public static ContextNode newContextNode(ParserRuleContext ctx, ListNode list) { return new ContextNode( ctx, list ); }
@Test public void testEmptyContext() { String inputExpression = "{}"; BaseNode context = parse( inputExpression ); assertThat( context, is( instanceOf( ContextNode.class ) ) ); assertThat( context.getText(), is( inputExpression ) ); ContextNode ctx = (ContextNode) context; assertThat( ctx.getEntries(), is( empty() )); }
@Override public DirectCompilerResult visit(ContextNode n) { if (n.getEntries().isEmpty()) { return DirectCompilerResult.of( FeelCtx.emptyContext(), BuiltInType.CONTEXT); DirectCompilerResult entries = n.getEntries() .stream() .map(e -> {
assertThat( ctx.getEntries().size(), is( 2 ) ); ContextEntryNode entry = ctx.getEntries().get( 0 ); assertThat( entry.getName(), is( instanceOf( NameDefNode.class ) ) ); NameDefNode name = (NameDefNode) entry.getName(); assertThat( entry.getValue().getText(), is("10") ); entry = ctx.getEntries().get( 1 ); assertThat( entry.getName(), is( instanceOf( NameDefNode.class ) ) ); name = (NameDefNode) entry.getName(); assertThat( applicant.getEntries().size(), is( 5 ) ); assertThat( applicant.getEntries().get( 0 ).getName().getText(), is("first name") ); assertThat( applicant.getEntries().get( 0 ).getResultType(), is( BuiltInType.STRING ) ); assertThat( applicant.getEntries().get( 1 ).getName().getText(), is("last + name") ); assertThat( applicant.getEntries().get( 1 ).getResultType(), is( BuiltInType.STRING ) ); assertThat( applicant.getEntries().get( 2 ).getName().getText(), is("full name") ); assertThat( applicant.getEntries().get( 2 ).getResultType(), is( BuiltInType.STRING ) ); assertThat( applicant.getEntries().get( 3 ).getName().getText(), is("address") ); assertThat( applicant.getEntries().get( 3 ).getValue(), is( instanceOf( ContextNode.class ) ) ); ContextNode address = (ContextNode) applicant.getEntries().get( 3 ).getValue(); assertThat( address.getEntries().size(), is( 2 ) ); assertThat( address.getEntries().get( 0 ).getName().getText(), is("street") ); assertThat( address.getEntries().get( 0 ).getResultType(), is( BuiltInType.STRING ) ); assertThat( address.getEntries().get( 1 ).getName().getText(), is("city") ); assertThat( address.getEntries().get( 0 ).getResultType(), is( BuiltInType.STRING ) );
@Test public void testFunctionDefinition() { String inputExpression = "{ is minor : function( person's age ) person's age < 21 }"; BaseNode ctxbase = parse( inputExpression ); assertThat( ctxbase, is( instanceOf( ContextNode.class ) ) ); assertThat( ctxbase.getText(), is( inputExpression ) ); ContextNode ctx = (ContextNode) ctxbase; assertThat( ctx.getEntries().size(), is( 1 ) ); ContextEntryNode entry = ctx.getEntries().get( 0 ); assertThat( entry.getName(), is( instanceOf( NameDefNode.class ) ) ); NameDefNode name = (NameDefNode) entry.getName(); assertThat( name.getText(), is("is minor") ); assertThat( entry.getValue(), is( instanceOf( FunctionDefNode.class ) ) ); assertThat( entry.getValue().getText(), is("function( person's age ) person's age < 21") ); FunctionDefNode isMinorFunc = (FunctionDefNode) entry.getValue(); assertThat( isMinorFunc.getFormalParameters().size(), is( 1 ) ); assertThat( isMinorFunc.getFormalParameters().get( 0 ).getText(), is( "person's age" ) ); assertThat( isMinorFunc.isExternal(), is( false ) ); assertThat( isMinorFunc.getBody(), is( instanceOf( InfixOpNode.class ) ) ); }
assertThat( ctx.getEntries().size(), is( 1 ) ); ContextEntryNode entry = ctx.getEntries().get( 0 ); assertThat( entry.getName(), is( instanceOf( NameDefNode.class ) ) ); NameDefNode name = (NameDefNode) entry.getName(); assertThat( body.getEntries().size(), is( 1 ) ); ContextEntryNode java = body.getEntries().get( 0 ); assertThat( java.getName().getText(), is( "java" ) ); assertThat( java.getValue(), is( instanceOf( ContextNode.class ) ) ); assertThat( def.getEntries().size(), is( 2 ) ); assertThat( def.getEntries().get( 0 ).getName().getText(), is( "class" ) ); assertThat( def.getEntries().get( 0 ).getValue(), is( instanceOf( StringNode.class ) ) ); assertThat( def.getEntries().get( 0 ).getValue().getText(), is( "\"java.lang.Math\"" ) ); assertThat( def.getEntries().get( 1 ).getName().getText(), is( "method signature" ) ); assertThat( def.getEntries().get( 1 ).getValue(), is( instanceOf( StringNode.class ) ) ); assertThat( def.getEntries().get( 1 ).getValue().getText(), is( "\"cos(double)\"" ) );
@Test public void testNestedContexts2() { String inputExpression = "{ an applicant : { " + " home address : {" + " street name: \"broadway st\"," + " city : \"New York\" " + " } " + " },\n " + " street : an applicant.home address.street name \n" + "}"; BaseNode ctxbase = parse( inputExpression ); assertThat( ctxbase, is( instanceOf( ContextNode.class ) ) ); assertThat( ctxbase.getText(), is( inputExpression ) ); ContextNode ctx = (ContextNode) ctxbase; assertThat( ctx.getEntries().size(), is( 2 ) ); ContextEntryNode entry = ctx.getEntries().get( 1 ); assertThat( entry.getName(), is( instanceOf( NameDefNode.class ) ) ); assertThat( entry.getResultType(), is( BuiltInType.STRING ) ); NameDefNode name = (NameDefNode) entry.getName(); assertThat( name.getText(), is("street") ); assertThat( entry.getValue(), is( instanceOf( QualifiedNameNode.class ) ) ); QualifiedNameNode qnn = (QualifiedNameNode) entry.getValue(); assertThat( qnn.getParts().get( 0 ).getText(), is("an applicant") ); assertThat( qnn.getParts().get( 1 ).getText(), is("home address") ); assertThat( qnn.getParts().get( 2 ).getText(), is("street name") ); }
assertThat( ctx.getEntries().size(), is( 3 ) ); ContextEntryNode entry = ctx.getEntries().get( 0 ); assertThat(entry.getName(), is(instanceOf(StringNode.class))); StringNode nameNode = (StringNode) entry.getName(); assertThat( entry.getValue().getText(), is("10") ); entry = ctx.getEntries().get( 1 ); assertThat( entry.getName(), is( instanceOf( NameDefNode.class ) ) ); NameDefNode name = (NameDefNode) entry.getName(); assertThat( entry.getValue().getText(), is( "foo+bar" ) ); entry = ctx.getEntries().get( 2 ); assertThat( entry.getName(), is( instanceOf( NameDefNode.class ) ) ); name = (NameDefNode) entry.getName();
assertThat( ctx.getEntries().size(), is( 3 ) ); ContextEntryNode entry = ctx.getEntries().get( 0 ); assertThat( entry.getName(), is( instanceOf( NameDefNode.class ) ) ); NameDefNode name = (NameDefNode) entry.getName(); assertThat( entry.getValue().getText(), is("10") ); entry = ctx.getEntries().get( 1 ); assertThat( entry.getName(), is( instanceOf( NameDefNode.class ) ) ); name = (NameDefNode) entry.getName(); assertThat( entry.getValue().getText(), is( "a variable with in keyword + 20" ) ); entry = ctx.getEntries().get( 2 ); assertThat( entry.getName(), is( instanceOf( NameDefNode.class ) ) ); name = (NameDefNode) entry.getName();