[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");