package lux.functions;
import static org.junit.Assert.*;
import lux.Evaluator;
import lux.QueryContext;
import lux.XdmResultSet;
import lux.xml.QName;
import org.junit.Before;
import org.junit.Test;
public class EvalTest {
private Evaluator eval;
@Before public void init () {
eval = new Evaluator();
}
@Test
public void testEval () throws Exception {
XdmResultSet result = eval.evaluate("lux:eval('1 + 1')");
assertEquals ("2", result.getXdmValue().itemAt(0).getStringValue());
}
@Test
public void testEvalArgBinding () throws Exception {
QueryContext context = new QueryContext();
context.bindVariable(new QName("x"), "2");
context.bindVariable(new QName("y"), 3);
context.setContextItem(null);
context.bindVariable(new QName("x"), null);
XdmResultSet result = eval.evaluate("declare variable $y external; lux:eval('declare variable $x external; $x', ('x', $y))", context);
if (! result.getErrors().isEmpty()) {
fail (result.getErrors().get(0).toString());
}
assertEquals ("3", result.getXdmValue().itemAt(0).getStringValue());
}
@Test
public void testParamNS () throws Exception {
XdmResultSet result = eval.evaluate("lux:eval('declare variable $lux:x external; $lux:x', ('lux:x', 3))");
if (! result.getErrors().isEmpty()) {
fail (result.getErrors().get(0).toString());
}
assertEquals ("3", result.getXdmValue().itemAt(0).getStringValue());
}
@Test
public void testOddParam () throws Exception {
XdmResultSet result = eval.evaluate("lux:eval('2', ('lux:x'))");
assertTrue (! result.getErrors().isEmpty());
assertEquals ("Odd number of items in third argument to lux:transform, which should be parameter/value pairs", result.getErrors().get(0).getMessage());
}
@Test
public void testEvalRuntimeError () throws Exception {
XdmResultSet result = eval.evaluate("lux:eval('1 div (fn:seconds-from-dateTime(current-dateTime()) - fn:seconds-from-dateTime(current-dateTime()))')");
assertFalse (result.getErrors().isEmpty());
assertEquals ("Decimal divide by zero", result.getErrors().get(0).getMessage());
}
@Test
public void testEvalCompileError () throws Exception {
XdmResultSet result = eval.evaluate("lux:eval('1 +')");
assertFalse (result.getErrors().isEmpty());
assertEquals ("Unexpected token \"<eof>\" in path expression", result.getErrors().get(0).getMessage());
}
}
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */