FunctionCall extends ContainerExpression { @Override public IJsonNode evaluate(final IJsonNode node, IJsonNode target, final EvaluationContext context) { final IJsonNode[] params = new IJsonNode[this.paramExprs.size()]; for (int index = 0; index < params.length; index++) params[index] = this.paramExprs.get(index).evaluate(node, context); return this.function.call(JsonUtil.asArray(params), target, context); } FunctionCall(final String functionName, final SopremoFunction function, final EvaluationExpression... params);  FunctionCall(final String functionName, final SopremoFunction function,
			final List<EvaluationExpression> params);  FunctionCall(final String functionName, final EvaluationScope scope,
			final EvaluationExpression... params);  FunctionCall(final String functionName, final EvaluationScope scope,
			final List<EvaluationExpression> params); @Override FunctionCall clone(); @Override boolean equals(final Object obj); SopremoFunction getFunction(); String getFunctionName(); @Override int hashCode(); @Override IJsonNode evaluate(final IJsonNode node, IJsonNode target, final EvaluationContext context); @Override List<? extends EvaluationExpression> getChildren(); @Override void setChildren(final List<? extends EvaluationExpression> children); @Override void toString(final StringBuilder builder);  }
@Test public void shouldCallFunction() { final IJsonNode result = new FunctionCall("sum", this.context, new ArrayAccess(0), new ArrayAccess(1)).evaluate(createArrayNode(1, 2), null, this.context); Assert.assertEquals(new DoubleNode(3), result); }