[361060] Aggregations with nil=ÕtrueÕ throw exceptions.
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 d12f649..fa168b8 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
@@ -57,7 +57,9 @@ * Mukul Gandhi - bug 339025 - fixes to fn:distinct-values function. ability to find distinct values on node items. * 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. + ******************************************************************************/ + package org.eclipse.wst.xml.xpath2.processor.test; import java.math.BigInteger; @@ -2417,6 +2419,77 @@ assertEquals("2", actual); } + public void testNumberAggregationWithNill() throws Exception { + + URL fileURL = bundle.getEntry("/bugTestFiles/bugNilled.xml"); + URL schemaURL = bundle.getEntry("/bugTestFiles/bugNilled.xsd"); + + loadDOMDocument(fileURL, schemaURL); + + // Get XSModel object for the Schema + XSModel schema = getGrammar(schemaURL); + + 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 = ((XSDecimal) 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 = ((XSDecimal) 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 = ((XSDecimal) 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 = ((XSDecimal) 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 = ((XSDecimal) rs.first()).getStringValue(); + assertEquals("1", actual); + } + public void testBug339025_distinctValuesOnNodeSequence() throws Exception { // bug 339025 URL fileURL = bundle.getEntry("/bugTestFiles/bug339025.xml");