@Test public void testFunctionInvocationEmptyParams() { String inputExpression = "my.test.Function()"; BaseNode functionBase = parse( inputExpression ); assertThat( functionBase, is( instanceOf( FunctionInvocationNode.class ) ) ); assertThat( functionBase.getText(), is( inputExpression ) ); FunctionInvocationNode function = (FunctionInvocationNode) functionBase; assertThat( function.getName(), is( instanceOf( QualifiedNameNode.class ) ) ); assertThat( function.getName().getText(), is( "my.test.Function" ) ); assertThat( function.getParams(), is( instanceOf( ListNode.class ) ) ); assertThat( function.getParams().getElements(), is( empty() ) ); }
@Test public void testFunctionInvocationPositionalParams() { String inputExpression = "my.test.Function( x+10, \"foo\" )"; BaseNode functionBase = parse( inputExpression ); assertThat( functionBase, is( instanceOf( FunctionInvocationNode.class ) ) ); assertThat( functionBase.getText(), is( inputExpression ) ); FunctionInvocationNode function = (FunctionInvocationNode) functionBase; assertThat( function.getName(), is( instanceOf( QualifiedNameNode.class ) ) ); assertThat( function.getName().getText(), is( "my.test.Function" ) ); assertThat( function.getParams(), is( instanceOf( ListNode.class ) ) ); assertThat( function.getParams().getElements().size(), is( 2 ) ); assertThat( function.getParams().getElements().get( 0 ), is( instanceOf( InfixOpNode.class ) ) ); assertThat( function.getParams().getElements().get( 1 ), is( instanceOf( StringNode.class ) ) ); }
@Test public void testFunctionInvocationWithKeyword() { String inputExpression = "date and time( \"2016-07-29T19:47:53\" )"; BaseNode functionBase = parse( inputExpression ); assertThat( functionBase, is( instanceOf( FunctionInvocationNode.class ) ) ); assertThat( functionBase.getText(), is( inputExpression ) ); FunctionInvocationNode function = (FunctionInvocationNode) functionBase; assertThat( function.getName(), is( instanceOf( NameRefNode.class ) ) ); assertThat( function.getName().getText(), is( "date and time" ) ); assertThat( function.getParams(), is( instanceOf( ListNode.class ) ) ); assertThat( function.getParams().getElements().size(), is( 1 ) ); assertThat( function.getParams().getElements().get( 0 ), is( instanceOf( StringNode.class ) ) ); }
@Test public void testFunctionInvocationWithExpressionParameters() { String inputExpression = "date and time( date(\"2016-07-29\"), time(\"19:47:53\") )"; BaseNode functionBase = parse( inputExpression ); assertThat( functionBase, is( instanceOf( FunctionInvocationNode.class ) ) ); assertThat( functionBase.getText(), is( inputExpression ) ); FunctionInvocationNode function = (FunctionInvocationNode) functionBase; assertThat( function.getName(), is( instanceOf( NameRefNode.class ) ) ); assertThat( function.getName().getText(), is( "date and time" ) ); assertThat( function.getParams(), is( instanceOf( ListNode.class ) ) ); assertThat( function.getParams().getElements().size(), is( 2 ) ); assertThat( function.getParams().getElements().get( 0 ), is( instanceOf( FunctionInvocationNode.class ) ) ); assertThat( function.getParams().getElements().get( 1 ), is( instanceOf( FunctionInvocationNode.class ) ) ); }
@Override public DirectCompilerResult visit(FunctionInvocationNode n) { DirectCompilerResult functionName = n.getName().accept(this); DirectCompilerResult params = n.getParams().accept(this); return DirectCompilerResult.of( Expressions.invoke(functionName.getExpression(), params.getExpression()), functionName.resultType) .withFD(functionName) .withFD(params); }
@Test public void testFunctionInvocationNamedParams() { String inputExpression = "my.test.Function( named parameter 1 : x+10, named parameter 2 : \"foo\" )"; BaseNode functionBase = parse( inputExpression ); assertThat( functionBase, is( instanceOf( FunctionInvocationNode.class ) ) ); assertThat( functionBase.getText(), is( inputExpression ) ); FunctionInvocationNode function = (FunctionInvocationNode) functionBase; assertThat( function.getName(), is( instanceOf( QualifiedNameNode.class ) ) ); assertThat( function.getName().getText(), is( "my.test.Function" ) ); assertThat( function.getParams(), is( instanceOf( ListNode.class ) ) ); assertThat( function.getParams().getElements().size(), is( 2 ) ); assertThat( function.getParams().getElements().get( 0 ), is( instanceOf( NamedParameterNode.class ) ) ); assertThat( function.getParams().getElements().get( 1 ), is( instanceOf( NamedParameterNode.class ) ) ); NamedParameterNode named = (NamedParameterNode) function.getParams().getElements().get( 0 ); assertThat( named.getText(), is( "named parameter 1 : x+10" ) ); assertThat( named.getName().getText(), is( "named parameter 1" ) ); assertThat( named.getExpression(), is( instanceOf( InfixOpNode.class ) ) ); assertThat( named.getExpression().getText(), is( "x+10" ) ); named = (NamedParameterNode) function.getParams().getElements().get( 1 ); assertThat( named.getText(), is( "named parameter 2 : \"foo\"" ) ); assertThat( named.getName().getText(), is( "named parameter 2" ) ); assertThat( named.getExpression(), is( instanceOf( StringNode.class ) ) ); assertThat( named.getExpression().getText(), is( "\"foo\"" ) ); }