package org.apache.hise;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import javax.xml.namespace.QName;
import junit.framework.Assert;
import net.sf.saxon.dom.NodeOverNodeInfo;
import net.sf.saxon.om.NodeInfo;
import net.sf.saxon.type.TypeHierarchy;
import org.apache.cxf.helpers.IOUtils;
import org.apache.hise.dao.Message;
import org.apache.hise.lang.xsd.htd.TDeadline;
import org.apache.hise.lang.xsd.htd.TDurationExpr;
import org.apache.hise.runtime.Task;
import org.apache.hise.runtime.TaskEvaluator;
import org.apache.hise.utils.DOMUtils;
import org.apache.hise.utils.XQueryEvaluator;
import org.junit.Test;
import org.w3c.dom.Node;
public class TaskEvaluatorTest {
private TaskEvaluator buildTaskEvaluator() {
Task t = new MockTask();
t.setCurrentEventDateTime(new Date(1234L));
org.apache.hise.dao.Task t2 = new org.apache.hise.dao.Task();
t2.setId(1234L);
t2.getInput().put("request", new Message("request", "<a><b>text1</b></a>"));
t.setTaskDto(t2);
return new TaskEvaluator(t);
}
@Test
public void testEval() throws Exception {
XQueryEvaluator e = new XQueryEvaluator();
List r = e.evaluateExpression("string(*/*/text())", DOMUtils.parse("<a><b/><c>ddx</c></a>"));
Assert.assertTrue(r.toString().equals("[ddx]"));
}
@Test
public void testEval2() throws Exception {
XQueryEvaluator e = new XQueryEvaluator();
e.bindVariable(QName.valueOf("abc"), null);
Object r = e.evaluateExpression("declare namespace htd='http://www.example.org/WS-HT'; for $i in htd:literal/htd:organizationalEntity/htd:users/htd:user return string($i)", DOMUtils.parse(getClass().getResourceAsStream("/taskEvaluator.xml")));
Assert.assertTrue(r.toString().equals("[user1, user2]"));
}
@Test
public void testEval3() throws Exception {
XQueryEvaluator e = new XQueryEvaluator();
Object r = e.evaluateExpression("declare namespace htd='http://www.example.org/WS-HT'; for $i in htd:literal/htd:organizationalEntity/htd:users/htd:user return string($i)", DOMUtils.parse(getClass().getResourceAsStream("/taskEvaluator.xml")).getFirstChild());
Assert.assertTrue(r.toString().equals("[user1, user2]"));
}
@Test
public void testEval4() throws Exception {
XQueryEvaluator e = new XQueryEvaluator();
e.bindVariable(QName.valueOf("abc"), "val");
Object r = e.evaluateExpression(TaskEvaluator.getTemplateExpr(Collections.singletonList((Object) "123 {$abc} 345")), null);
Assert.assertEquals(r.toString(), "[123 val 345]");
}
@Test
public void testEvalOutcome() throws Exception {
XQueryEvaluator e = new XQueryEvaluator();
e.bindVariable(QName.valueOf("outcome"), true);
Assert.assertEquals(true, e.evaluateExpression("$outcome", null).get(0));
}
@Test
public void testEvaluateApproveResponseHeader() throws Exception {
TaskEvaluator te = buildTaskEvaluator();
Node n = te.evaluateApproveResponseHeader();
Assert.assertTrue(DOMUtils.domToString(n).contains(">1234<"));
}
@Test
public void testDeadline() throws Exception {
TaskEvaluator e = buildTaskEvaluator();
TDeadline deadline = new TDeadline();
TDurationExpr d = new TDurationExpr();
deadline.setFor(d);
d.getContent().add(new String("'PT5S'"));
Date r = e.evaluateDeadline(deadline);
Assert.assertEquals(6234L, r.getTime());
}
@Test
public void testEvalGetInput() throws Exception {
XQueryEvaluator e = buildTaskEvaluator().buildQueryEvaluator();
Object r = e.evaluateExpression("declare namespace htd='http://www.example.org/WS-HT'; xs:string(htd:getInput('request')/b)", null);
Assert.assertTrue(r.toString().equals("[text1]"));
}
@Test
public void testEvalOutcome2() throws Exception {
System.out.println("testEvalOutcome2");
XQueryEvaluator e = buildTaskEvaluator().buildQueryEvaluator();
Object r = DOMUtils.domToString((Node) e.evaluateExpression(IOUtils.toString(getClass().getResourceAsStream("/outcome2.xml")), null).get(0));
Assert.assertTrue(r.toString().contains("<firstname>text1</firstname><lastname>text1</lastname><taskId>1234</taskId>"));
System.out.println("~testEvalOutcome2");
}
}