[xpath2] committing test case changes for bug reports 323900 & 325262
diff --git a/tests/org.eclipse.wst.xml.xpath2.processor.tests/bugTestFiles/bug323900_1.xml b/tests/org.eclipse.wst.xml.xpath2.processor.tests/bugTestFiles/bug323900_1.xml
new file mode 100644
index 0000000..ebd8dd6
--- /dev/null
+++ b/tests/org.eclipse.wst.xml.xpath2.processor.tests/bugTestFiles/bug323900_1.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<X>1 2 3</X>
diff --git a/tests/org.eclipse.wst.xml.xpath2.processor.tests/bugTestFiles/bug323900_1.xsd b/tests/org.eclipse.wst.xml.xpath2.processor.tests/bugTestFiles/bug323900_1.xsd
new file mode 100644
index 0000000..6781dd8
--- /dev/null
+++ b/tests/org.eclipse.wst.xml.xpath2.processor.tests/bugTestFiles/bug323900_1.xsd
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <xs:element name="X">
+ <xs:simpleType>
+ <xs:list itemType="xs:integer" />
+ </xs:simpleType>
+ </xs:element>
+
+</xs:schema>
diff --git a/tests/org.eclipse.wst.xml.xpath2.processor.tests/bugTestFiles/bug323900_2.xml b/tests/org.eclipse.wst.xml.xpath2.processor.tests/bugTestFiles/bug323900_2.xml
new file mode 100644
index 0000000..0de4798
--- /dev/null
+++ b/tests/org.eclipse.wst.xml.xpath2.processor.tests/bugTestFiles/bug323900_2.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<X>1 2 3.3</X>
diff --git a/tests/org.eclipse.wst.xml.xpath2.processor.tests/bugTestFiles/bug323900_2.xsd b/tests/org.eclipse.wst.xml.xpath2.processor.tests/bugTestFiles/bug323900_2.xsd
new file mode 100644
index 0000000..e741702
--- /dev/null
+++ b/tests/org.eclipse.wst.xml.xpath2.processor.tests/bugTestFiles/bug323900_2.xsd
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <xs:element name="X">
+ <xs:simpleType>
+ <xs:list>
+ <xs:simpleType>
+ <xs:union memberTypes="xs:integer xs:string" />
+ </xs:simpleType>
+ </xs:list>
+ </xs:simpleType>
+ </xs:element>
+
+</xs:schema>
diff --git a/tests/org.eclipse.wst.xml.xpath2.processor.tests/bugTestFiles/bug323900_3.xml b/tests/org.eclipse.wst.xml.xpath2.processor.tests/bugTestFiles/bug323900_3.xml
new file mode 100644
index 0000000..7639ba1
--- /dev/null
+++ b/tests/org.eclipse.wst.xml.xpath2.processor.tests/bugTestFiles/bug323900_3.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<X>3.3</X>
diff --git a/tests/org.eclipse.wst.xml.xpath2.processor.tests/bugTestFiles/bug323900_3.xsd b/tests/org.eclipse.wst.xml.xpath2.processor.tests/bugTestFiles/bug323900_3.xsd
new file mode 100644
index 0000000..953c943
--- /dev/null
+++ b/tests/org.eclipse.wst.xml.xpath2.processor.tests/bugTestFiles/bug323900_3.xsd
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <xs:element name="X">
+ <xs:simpleType>
+ <xs:union memberTypes="xs:integer xs:string" />
+ </xs:simpleType>
+ </xs:element>
+
+</xs:schema>
diff --git a/tests/org.eclipse.wst.xml.xpath2.processor.tests/bugTestFiles/bug323900_4.xml b/tests/org.eclipse.wst.xml.xpath2.processor.tests/bugTestFiles/bug323900_4.xml
new file mode 100644
index 0000000..727667b
--- /dev/null
+++ b/tests/org.eclipse.wst.xml.xpath2.processor.tests/bugTestFiles/bug323900_4.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<X>10</X>
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 48e2641..4fe2d00 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
@@ -42,9 +42,15 @@
* Jesper S Moller - bug 312191 - instance of test fails with partial matches
* Mukul Gandhi - bug 318313 - improvements to computation of typed values of nodes,
* when validated by XML Schema primitive types
+ * Mukul Gandhi - bug 323900 - improving computing the typed value of element &
+ * attribute nodes, where the schema type of nodes
+ * are simple, with varieties 'list' and 'union'.
+ * Mukul Gandhi - bug 325262 - providing ability to store an XPath2 sequence into
+ * an user-defined variable.
*******************************************************************************/
package org.eclipse.wst.xml.xpath2.processor.test;
+import java.math.BigInteger;
import java.net.URL;
import java.util.Comparator;
@@ -60,12 +66,16 @@
import org.eclipse.wst.xml.xpath2.processor.DynamicError;
import org.eclipse.wst.xml.xpath2.processor.Evaluator;
import org.eclipse.wst.xml.xpath2.processor.ResultSequence;
+import org.eclipse.wst.xml.xpath2.processor.ResultSequenceFactory;
import org.eclipse.wst.xml.xpath2.processor.ast.XPath;
+import org.eclipse.wst.xml.xpath2.processor.internal.types.QName;
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;
import org.eclipse.wst.xml.xpath2.processor.internal.types.XSDuration;
import org.eclipse.wst.xml.xpath2.processor.internal.types.XSFloat;
+import org.eclipse.wst.xml.xpath2.processor.internal.types.XSInteger;
+import org.eclipse.wst.xml.xpath2.processor.internal.types.XSString;
import org.osgi.framework.Bundle;
import org.xml.sax.InputSource;
@@ -1758,6 +1768,186 @@
assertEquals("true", actual);
}
+ public void testTypedValueEnhancement_Bug323900_1() throws Exception {
+ // Bug 323900
+ URL fileURL = bundle.getEntry("/bugTestFiles/bug323900_1.xml");
+ URL schemaURL = bundle.getEntry("/bugTestFiles/bug323900_1.xsd");
+
+ loadDOMDocument(fileURL, schemaURL);
+
+ // Get XSModel object for the Schema
+ XSModel schema = getGrammar(schemaURL);
+
+ DynamicContext dc = setupDynamicContext(schema);
+
+ String xpath = "data(X) instance of xs:integer+";
+ XPath path = compileXPath(dc, xpath);
+
+ Evaluator eval = new DefaultEvaluator(dc, domDoc);
+ ResultSequence rs = eval.evaluate(path);
+
+ XSBoolean result = (XSBoolean) rs.first();
+
+ String actual = result.string_value();
+
+ assertEquals("true", actual);
+ }
+
+ public void testTypedValueEnhancement_Bug323900_2() throws Exception {
+ // Bug 323900
+ URL fileURL = bundle.getEntry("/bugTestFiles/bug323900_2.xml");
+ URL schemaURL = bundle.getEntry("/bugTestFiles/bug323900_2.xsd");
+
+ loadDOMDocument(fileURL, schemaURL);
+
+ // Get XSModel object for the Schema
+ XSModel schema = getGrammar(schemaURL);
+
+ DynamicContext dc = setupDynamicContext(schema);
+
+ // 1st test
+ String xpath = "data(X) instance of xs:integer+";
+ XPath path = compileXPath(dc, xpath);
+
+ Evaluator eval = new DefaultEvaluator(dc, domDoc);
+ ResultSequence rs = eval.evaluate(path);
+
+ XSBoolean result = (XSBoolean) rs.first();
+
+ String actual = result.string_value();
+
+ assertEquals("false", actual);
+ }
+
+ public void testTypedValueEnhancement_Bug323900_3() throws Exception {
+ // Bug 323900
+ URL fileURL = bundle.getEntry("/bugTestFiles/bug323900_2.xml");
+ URL schemaURL = bundle.getEntry("/bugTestFiles/bug323900_2.xsd");
+
+ loadDOMDocument(fileURL, schemaURL);
+
+ // Get XSModel object for the Schema
+ XSModel schema = getGrammar(schemaURL);
+
+ DynamicContext dc = setupDynamicContext(schema);
+ String xpath = "data(X)";
+ XPath path = compileXPath(dc, xpath);
+ Evaluator eval = new DefaultEvaluator(dc, domDoc);
+ ResultSequence rs = eval.evaluate(path);
+
+ boolean result1 = ((XSInteger) rs.get(0)).eq(new XSInteger(BigInteger.
+ valueOf(1)), dc);
+ boolean result2 = ((XSInteger) rs.get(1)).eq(new XSInteger(BigInteger.
+ valueOf(2)), dc);
+ boolean result3 = ((XSString) rs.get(2)).eq(new XSString("3.3"), dc);
+
+ assertEquals(true, result1 && result2 && result3);
+ }
+
+ public void testTypedValueEnhancement_Bug323900_4() throws Exception {
+ // Bug 323900
+ URL fileURL = bundle.getEntry("/bugTestFiles/bug323900_3.xml");
+ URL schemaURL = bundle.getEntry("/bugTestFiles/bug323900_3.xsd");
+
+ loadDOMDocument(fileURL, schemaURL);
+
+ // Get XSModel object for the Schema
+ XSModel schema = getGrammar(schemaURL);
+
+ DynamicContext dc = setupDynamicContext(schema);
+ String xpath = "data(X)";
+ XPath path = compileXPath(dc, xpath);
+ Evaluator eval = new DefaultEvaluator(dc, domDoc);
+ ResultSequence rs = eval.evaluate(path);
+
+ XSString result = (XSString) rs.get(0);
+ assertEquals("3.3", result.string_value());
+ }
+
+ public void testTypedValueEnhancement_Bug323900_5() throws Exception {
+ // Bug 323900
+ URL fileURL = bundle.getEntry("/bugTestFiles/bug323900_4.xml");
+ URL schemaURL = bundle.getEntry("/bugTestFiles/bug323900_3.xsd");
+
+ loadDOMDocument(fileURL, schemaURL);
+
+ // Get XSModel object for the Schema
+ XSModel schema = getGrammar(schemaURL);
+
+ DynamicContext dc = setupDynamicContext(schema);
+ String xpath = "data(X)";
+ XPath path = compileXPath(dc, xpath);
+ Evaluator eval = new DefaultEvaluator(dc, domDoc);
+ ResultSequence rs = eval.evaluate(path);
+
+ XSInteger result = (XSInteger) rs.get(0);
+ assertEquals("10", result.string_value());
+ }
+
+ public void testTypedValueEnhancement_BugUsingSeqIntoVariable_1()
+ throws Exception {
+ // Bug 325262
+ DynamicContext dc = setupDynamicContext(null);
+
+ ResultSequence rs = ResultSequenceFactory.create_new();
+ dc.set_variable(new QName("value"), rs);
+
+ String xpath = "deep-equal($value,())";
+ XPath path = compileXPath(dc, xpath);
+ Evaluator eval = new DefaultEvaluator(dc, domDoc);
+ ResultSequence rsRes = eval.evaluate(path);
+
+ XSBoolean result = (XSBoolean) rsRes.get(0);
+ assertEquals("true", result.string_value());
+ }
+
+ public void testTypedValueEnhancement_BugUsingSeqIntoVariable_2()
+ throws Exception {
+ // Bug 325262
+ DynamicContext dc = setupDynamicContext(null);
+
+ ResultSequence rs = ResultSequenceFactory.create_new();
+ rs.add(new XSInteger(BigInteger.valueOf(2)));
+ rs.add(new XSInteger(BigInteger.valueOf(4)));
+ rs.add(new XSInteger(BigInteger.valueOf(6)));
+ dc.set_variable(new QName("value"), rs);
+
+ // test a
+ String xpath = "$value instance of xs:integer+";
+ XPath path = compileXPath(dc, xpath);
+ Evaluator eval = new DefaultEvaluator(dc, domDoc);
+ ResultSequence rsRes = eval.evaluate(path);
+ XSBoolean result = (XSBoolean) rsRes.get(0);
+ assertEquals("true", result.string_value());
+
+ // test b
+ xpath = "deep-equal($value, (2, 4, 6))";
+ path = compileXPath(dc, xpath);
+ eval = new DefaultEvaluator(dc, domDoc);
+ rsRes = eval.evaluate(path);
+ result = (XSBoolean) rsRes.get(0);
+ assertEquals("true", result.string_value());
+ }
+
+ public void testTypedValueEnhancement_BugUsingSeqIntoVariable_3()
+ throws Exception {
+ // Bug 325262
+ DynamicContext dc = setupDynamicContext(null);
+
+ ResultSequence rs = ResultSequenceFactory.create_new();
+ rs.add(new XSInteger(BigInteger.valueOf(2)));
+ rs.add(new XSInteger(BigInteger.valueOf(4)));
+ rs.add(new XSInteger(BigInteger.valueOf(6)));
+ dc.set_variable(new QName("value"), rs);
+
+ String xpath = "count(data($value)) = 3";
+ XPath path = compileXPath(dc, xpath);
+ Evaluator eval = new DefaultEvaluator(dc, domDoc);
+ ResultSequence rsRes = eval.evaluate(path);
+ XSBoolean result = (XSBoolean) rsRes.get(0);
+ assertEquals("true", result.string_value());
+ }
+
private CollationProvider createLengthCollatorProvider() {
return new CollationProvider() {
@SuppressWarnings("unchecked")