[361659] - ElemntType typed value in case of nil=ÕtrueÕ (edit)
diff --git a/tests/org.eclipse.wst.xml.xpath2.processor.tests/bugTestFiles/bugNilledNoSchema.xml b/tests/org.eclipse.wst.xml.xpath2.processor.tests/bugTestFiles/bugNilledNoSchema.xml
new file mode 100644
index 0000000..1617885
--- /dev/null
+++ b/tests/org.eclipse.wst.xml.xpath2.processor.tests/bugTestFiles/bugNilledNoSchema.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <!-- Nillable, but not nilled -->
+ <element1>1</element1>
+
+ <!-- Nillable and nilled -->
+ <element2 xsi:nil="true"/>
+
+ <!-- Not nillable, and obviously not nilled (it would give a validation error)-->
+ <element3>42</element3>
+
+ <!-- Not processed / validated, and so never nill -->
+ <element4 xsi:nil="true">42</element4>
+</root>
diff --git a/tests/org.eclipse.wst.xml.xpath2.processor.tests/src/org/eclipse/wst/xml/xpath2/processor/test/TestBugs.java b/tests/org.eclipse.wst.xml.xpath2.processor.tests/src/org/eclipse/wst/xml/xpath2/processor/test/TestBugs.java
index 16858cd..0e3d453 100644
--- a/tests/org.eclipse.wst.xml.xpath2.processor.tests/src/org/eclipse/wst/xml/xpath2/processor/test/TestBugs.java
+++ b/tests/org.eclipse.wst.xml.xpath2.processor.tests/src/org/eclipse/wst/xml/xpath2/processor/test/TestBugs.java
@@ -58,7 +58,8 @@
* Mukul Gandhi - bug 341862 - improvements to computation of typed value of xs:boolean nodes.
* Jesper Steen Moller - bug 340933 - Migrate tests to new XPath2 API
* Lukasz Wycisk - bug 361060 - Aggregations with nil=ÕtrueÕ throw exceptions.
- * Lukasz Wycisk - bug 261059 - FnRoundHalfToEven is wrong in case of 2 arguments
+ * Lukasz Wycisk - bug 361059 - FnRoundHalfToEven is wrong in case of 2 arguments
+ * Lukasz Wycisk - bug 361659 - ElemntType typed value in case of nil=ÕtrueÕ
******************************************************************************/
package org.eclipse.wst.xml.xpath2.processor.test;
@@ -95,6 +96,7 @@
import org.eclipse.wst.xml.xpath2.processor.StaticError;
import org.eclipse.wst.xml.xpath2.processor.XPathParserException;
import org.eclipse.wst.xml.xpath2.processor.function.FnFunctionLibrary;
+import org.eclipse.wst.xml.xpath2.processor.internal.types.NumericType;
import org.eclipse.wst.xml.xpath2.processor.internal.types.XSBoolean;
import org.eclipse.wst.xml.xpath2.processor.internal.types.XSDecimal;
import org.eclipse.wst.xml.xpath2.processor.internal.types.XSDouble;
@@ -2587,7 +2589,75 @@
actual = ((XSDecimal) rs.first()).getStringValue();
assertEquals("1", actual);
}
-
+
+ public void testNumberAggregationWithNill2() throws Exception {
+
+ URL fileURL = bundle.getEntry("/bugTestFiles/bugNilledNoSchema.xml");
+
+ loadDOMDocument(fileURL);
+ XSModel schema = getGrammar();
+
+ setupDynamicContext(schema);
+
+ String xpath = null;
+ ResultSequence rs = null;
+ String actual = null;
+
+ //a
+ xpath = "fn:count(( /root/element1, /root/element2, /root/element3 ))";
+ compileXPath(xpath);
+ rs = evaluate(domDoc);
+
+ assertTrue( rs.size()>0 );
+ actual = ((XSDecimal) rs.first()).getStringValue();
+ assertEquals("3", actual);
+
+ //b
+ xpath = "fn:sum(( /root/element1, /root/element2, /root/element3 ))";
+ compileXPath(xpath);
+ rs = evaluate(domDoc);
+
+ assertTrue( rs.size()>0 );
+ actual = ((NumericType) rs.first()).getStringValue();
+ assertEquals("43", actual);
+
+ //b2
+ xpath = "fn:sum(( /root/element1, /root/element2, /root/element3 ), 100)";
+ compileXPath(xpath);
+ rs = evaluate(domDoc);
+
+ assertTrue( rs.size()>0 );
+ actual = ((NumericType) rs.first()).getStringValue();
+ assertEquals("143", actual);
+
+ //c
+ xpath = "fn:avg(( /root/element1, /root/element2, /root/element3, 1 ))";
+ compileXPath(xpath);
+ rs = evaluate(domDoc);
+
+ assertTrue( rs.size()>0 );
+ actual = ((NumericType) rs.first()).getStringValue();
+ assertEquals("11", actual);
+
+ //d
+ xpath = "fn:max(( /root/element1, /root/element2, /root/element3 ))";
+ compileXPath(xpath);
+ rs = evaluate(domDoc);
+
+ assertTrue( rs.size()>0 );
+ actual = ((NumericType) rs.first()).getStringValue();
+ assertEquals("42", actual);
+
+ //e
+ xpath = "fn:min(( /root/element1, /root/element2, /root/element3 ))";
+ compileXPath(xpath);
+ rs = evaluate(domDoc);
+
+ assertTrue( rs.size()>0 );
+ actual = ((NumericType) rs.first()).getStringValue();
+ assertEquals("1", actual);
+ }
+
public void testBug339025_distinctValuesOnNodeSequence() throws Exception {
// bug 339025
URL fileURL = bundle.getEntry("/bugTestFiles/bug339025.xml");