Repository: ode
Updated Branches:
  refs/heads/master 420f051b3 -> 5a88ee06b


fixing ODE-1016: taking NaN as possible value for numbers into account.


Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/5a88ee06
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/5a88ee06
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/5a88ee06

Branch: refs/heads/master
Commit: 5a88ee06b72564b94c6d699a1c4448e4da095a4c
Parents: 420f051
Author: Tammo van Lessen <[email protected]>
Authored: Mon Jul 21 20:09:56 2014 +0200
Committer: Tammo van Lessen <[email protected]>
Committed: Mon Jul 21 20:09:56 2014 +0200

----------------------------------------------------------------------
 .../runtime/XPath10ExpressionRuntime.java       |   2 +-
 .../runtime/XPath10ExpressionRuntimeTest.java   | 140 +++++++++++++++++++
 2 files changed, 141 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/5a88ee06/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/XPath10ExpressionRuntime.java
----------------------------------------------------------------------
diff --git 
a/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/XPath10ExpressionRuntime.java
 
b/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/XPath10ExpressionRuntime.java
index d8986f1..2b255af 100644
--- 
a/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/XPath10ExpressionRuntime.java
+++ 
b/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/XPath10ExpressionRuntime.java
@@ -109,7 +109,7 @@ public class XPath10ExpressionRuntime implements 
ExpressionLanguageRuntime {
                 Element wrapper = d.createElement("wrapper");
                 Object ret = retVal.get(0);
                 
-                if (ret instanceof Double) {
+                if (ret instanceof Double && !((Double)ret).isNaN()) {
                     // safely convert a double into a long if they are 
numerically equal. This
                     // makes 1 from 1.0, which is more reliable when calling 
web services.
                     if (Double.compare((Double)ret, Math.ceil((Double)ret)) == 
0) {

http://git-wip-us.apache.org/repos/asf/ode/blob/5a88ee06/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath10/runtime/XPath10ExpressionRuntimeTest.java
----------------------------------------------------------------------
diff --git 
a/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath10/runtime/XPath10ExpressionRuntimeTest.java
 
b/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath10/runtime/XPath10ExpressionRuntimeTest.java
new file mode 100644
index 0000000..9561011
--- /dev/null
+++ 
b/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath10/runtime/XPath10ExpressionRuntimeTest.java
@@ -0,0 +1,140 @@
+package org.apache.ode.bpel.elang.xpath10.runtime;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.net.URI;
+import java.util.Date;
+import java.util.HashMap;
+
+import javax.xml.namespace.QName;
+
+import org.apache.ode.bpel.common.FaultException;
+import org.apache.ode.bpel.compiler.bom.Expression;
+import 
org.apache.ode.bpel.elang.xpath10.compiler.XPath10ExpressionCompilerBPEL20;
+import org.apache.ode.bpel.elang.xpath10.o.OXPath10Expression;
+import org.apache.ode.bpel.elang.xpath20.runtime.MockCompilerContext;
+import org.apache.ode.bpel.explang.EvaluationContext;
+import org.apache.ode.bpel.explang.EvaluationException;
+import org.apache.ode.bpel.o.OExpression;
+import org.apache.ode.bpel.o.OLink;
+import org.apache.ode.bpel.o.OMessageVarType.Part;
+import org.apache.ode.bpel.o.OProcess.OProperty;
+import org.apache.ode.bpel.o.OScope.Variable;
+import org.apache.ode.utils.DOMUtils;
+import org.apache.ode.utils.NSContext;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+public class XPath10ExpressionRuntimeTest implements EvaluationContext {
+
+    private XPath10ExpressionRuntime _runtime;
+    private XPath10ExpressionCompilerBPEL20 _compiler;
+
+    private MockCompilerContext _cc;
+    
+    @Before
+    public void setUp() throws Exception {
+        _cc = new MockCompilerContext();
+        _runtime = new XPath10ExpressionRuntime();
+        _runtime.initialize(new HashMap<>());
+        _compiler = new XPath10ExpressionCompilerBPEL20();
+        _compiler.setCompilerContext(_cc);
+    }
+    
+    @After
+    public void tearDown() throws Exception {
+        _cc = null;
+        _runtime = null;
+        _compiler = null;
+    }
+
+    private OXPath10Expression compile(String xpath) {
+        Document doc = DOMUtils.newDocument();
+        Element e = doc.createElementNS(null, "expression");
+        doc.appendChild(e);
+        e.appendChild(doc.createTextNode(xpath));
+        Expression exp = new Expression(e);
+        return (OXPath10Expression)_compiler.compileLValue(exp);
+    }
+
+    @Test
+    public void testEvaluate_NaN() throws Exception {
+        OXPath10Expression exp = compile("number('/tns:Title/tns:Data')");
+        NSContext context = new NSContext();
+        context.register("tns", "http://foobar";);
+        exp.namespaceCtx = context;
+
+        Node retVal = _runtime.evaluateNode(exp, this);
+
+        assertNotNull(retVal);
+        assertEquals(String.valueOf(Double.NaN), retVal.getTextContent());
+    }
+
+    @Override
+    public Node readVariable(Variable variable, Part part)
+            throws FaultException {
+        return null;
+    }
+
+    @Override
+    public Node getPartData(Element message, Part part) throws FaultException {
+        return null;
+    }
+
+    @Override
+    public String readMessageProperty(Variable variable, OProperty property)
+            throws FaultException {
+        return null;
+    }
+
+    @Override
+    public boolean isLinkActive(OLink olink) throws FaultException {
+        return false;
+    }
+
+    @Override
+    public Node getRootNode() {
+        return null;
+    }
+
+    @Override
+    public Node evaluateQuery(Node root, OExpression expr)
+            throws FaultException, EvaluationException {
+        return null;
+    }
+
+    @Override
+    public Long getProcessId() {
+        return null;
+    }
+
+    @Override
+    public QName getProcessQName() {
+        return null;
+    }
+
+    @Override
+    public boolean narrowTypes() {
+        return false;
+    }
+
+    @Override
+    public URI getBaseResourceURI() {
+        return null;
+    }
+
+    @Override
+    public Node getPropertyValue(QName propertyName) {
+        return null;
+    }
+
+    @Override
+    public Date getCurrentEventDateTime() {
+        return null;
+    }
+}

Reply via email to