use of com.dexels.navajo.expression.api.ContextExpression in project navajo by Dexels.
the class TestTypeCheckCompiledExpressionEvaluator method testBadType.
@Test
public void testBadType() {
// test unknowable type
ExpressionCache ce = ExpressionCache.getInstance();
List<String> problems = new ArrayList<>();
// the [] expression has been added to prevent the expression to be pre-evaluated (as all other params are literals
ContextExpression cx = ce.parse(problems, "1 AND 'monkey' AND [whoop]", fn -> FunctionClassification.DEFAULT);
System.err.println("Problems: " + problems);
Assert.assertEquals(2, problems.size());
Assert.assertEquals(Property.BOOLEAN_PROPERTY, cx.returnType().get());
}
use of com.dexels.navajo.expression.api.ContextExpression in project navajo by Dexels.
the class TestTypeCheckCompiledExpressionEvaluator method testBasicTypes.
@Test
public void testBasicTypes() {
ExpressionCache ce = ExpressionCache.getInstance();
List<String> problems = new ArrayList<>();
ContextExpression cx = ce.parse(problems, "1", fn -> FunctionClassification.DEFAULT);
Assert.assertEquals(Property.INTEGER_PROPERTY, cx.returnType().get());
}
use of com.dexels.navajo.expression.api.ContextExpression in project navajo by Dexels.
the class TestCompiledExpression method testParseTmlComplex.
@Test
public void testParseTmlComplex() throws ParseException, TMLExpressionException {
String expression = "[TestArrayMessageMessage@Property=Prop2/Property]";
StringReader sr = new StringReader(expression);
CompiledParser cp = new CompiledParser(sr);
cp.Expression();
List<String> problems = new ArrayList<>();
ContextExpression ss = cp.getJJTree().rootNode().interpretToLambda(problems, sr.toString(), fn -> FunctionClassification.DEFAULT, name -> Optional.empty());
if (!problems.isEmpty()) {
throw new TMLExpressionException(problems, expression);
}
Navajo copy = NavajoFactory.getInstance().createNavajo();
Message rootMessage = NavajoFactory.getInstance().createMessage(copy, "TopMessage");
copy.addMessage(rootMessage);
rootMessage.addMessage(input.getMessage("TestArrayMessageMessage"));
Object value = ss.apply(copy, rootMessage, null, null, null, null, null, Optional.empty(), Optional.empty()).value;
Assert.assertEquals("Prop2", value);
Assert.assertFalse(ss.isLiteral());
}
use of com.dexels.navajo.expression.api.ContextExpression in project navajo by Dexels.
the class TestCompiledExpression method testEmptyFunctionCall.
@Test
public void testEmptyFunctionCall() throws ParseException {
FunctionInterface testFunction = new AddTestFunction();
FunctionDefinition fd = new FunctionDefinition(testFunction.getClass().getName(), "blib", "bleb", "blab");
FunctionFactoryFactory.getInstance().addExplicitFunctionDefinition("addtest", fd);
String expression = "addtest()";
StringReader sr = new StringReader(expression);
CompiledParser cp = new CompiledParser(sr);
cp.Expression();
List<String> problems = new ArrayList<>();
ContextExpression ss = cp.getJJTree().rootNode().interpretToLambda(problems, sr.toString(), fn -> FunctionClassification.DEFAULT, name -> Optional.empty());
Operand o = ss.apply();
Assert.assertEquals("monkey", o.value);
}
use of com.dexels.navajo.expression.api.ContextExpression in project navajo by Dexels.
the class TestCompiledExpression method testFunctionCallWithNamedParams.
@Test
public void testFunctionCallWithNamedParams() throws ParseException {
FunctionInterface testFunction = new AddTestFunction();
FunctionDefinition fd = new FunctionDefinition(testFunction.getClass().getName(), "blib", "bleb", "blab");
FunctionFactoryFactory.getInstance().addExplicitFunctionDefinition("addtest", fd);
String expression = "addtest(aap='blub',3+5,4)";
StringReader sr = new StringReader(expression);
CompiledParser cp = new CompiledParser(sr);
cp.Expression();
SimpleNode atn = (SimpleNode) cp.getJJTree().rootNode();
List<String> problems = new ArrayList<>();
ContextExpression ne = atn.interpretToLambda(problems, expression, fn -> FunctionClassification.DEFAULT, name -> Optional.empty());
Operand result = ne.apply();
Assert.assertEquals("monkey", result.value);
}
Aggregations