[298267]: [xpath2] problems with xpath2 "instance of" evaluation
https://bugs.eclipse.org/bugs/show_bug.cgi?id=298267
diff --git a/tests/org.eclipse.wst.xml.xpath2.processor.tests/src/org/eclipse/wst/xml/xpath2/processor/test/AllPsychoPathTests.java b/tests/org.eclipse.wst.xml.xpath2.processor.tests/src/org/eclipse/wst/xml/xpath2/processor/test/AllPsychoPathTests.java
index f38b0b0..b31cff3 100644
--- a/tests/org.eclipse.wst.xml.xpath2.processor.tests/src/org/eclipse/wst/xml/xpath2/processor/test/AllPsychoPathTests.java
+++ b/tests/org.eclipse.wst.xml.xpath2.processor.tests/src/org/eclipse/wst/xml/xpath2/processor/test/AllPsychoPathTests.java
@@ -34,6 +34,7 @@
 		suite.addTestSuite(XPathDecimalFormatTest.class);
 		suite.addTestSuite(LiteralUtilsTest.class);
 		suite.addTestSuite(TestWTPDOMXPath2.class);
+		suite.addTestSuite(KindTestSITest.class);
 		//$JUnit-END$
 		return suite;
 	}
diff --git a/tests/org.eclipse.wst.xml.xpath2.processor.tests/src/org/eclipse/wst/xml/xpath2/processor/test/KindTestSITest.java b/tests/org.eclipse.wst.xml.xpath2.processor.tests/src/org/eclipse/wst/xml/xpath2/processor/test/KindTestSITest.java
new file mode 100644
index 0000000..5b99a83
--- /dev/null
+++ b/tests/org.eclipse.wst.xml.xpath2.processor.tests/src/org/eclipse/wst/xml/xpath2/processor/test/KindTestSITest.java
@@ -0,0 +1,204 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Standards for Technology in Automotive Retail and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     David Carver - STAR - initial api and implementation bug 262765 
+ *******************************************************************************/
+
+package org.eclipse.wst.xml.xpath2.processor.test;
+
+import java.net.URL;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.xml.validation.Schema;
+import javax.xml.validation.SchemaFactory;
+
+import org.apache.xerces.jaxp.validation.XMLSchemaFactory;
+import org.apache.xerces.xs.XSModel;
+import org.eclipse.wst.xml.xpath2.processor.*;
+import org.eclipse.wst.xml.xpath2.processor.ast.XPath;
+import org.eclipse.wst.xml.xpath2.processor.internal.types.XSBoolean;
+import org.xml.sax.SAXException;
+
+public class KindTestSITest extends AbstractPsychoPathTest {
+
+	public void testElementTest1() throws Exception {
+		String inputFile = "/TestSources/SpecialTypes.xml";
+		String expectedResult = "true";
+		URL fileURL = bundle.getEntry(inputFile);
+		Schema jaxpSchema = loadSchema();
+		loadDOMDocument(fileURL, jaxpSchema);
+
+		// Get XML Schema Information for the Document
+		XSModel schema = getGrammar();
+
+		DynamicContext dc = setupDynamicContext(schema);
+		dc.add_namespace(null, "http://typedecl");
+		// addUserDefinedSimpleTypes(schema, dc);
+
+		String xpath = "/root/InterleaveType instance of element()";
+		String actual = null;
+		try {
+			XPath path = compileXPath(dc, xpath);
+
+			Evaluator eval = new DefaultEvaluator(dc, domDoc);
+			ResultSequence rs = eval.evaluate(path);
+
+			actual = buildResultString(rs);
+
+		} catch (XPathParserException ex) {
+			actual = ex.code();
+		} catch (StaticError ex) {
+			actual = ex.code();
+		} catch (DynamicError ex) {
+			actual = ex.code();
+		}
+
+		assertEquals("XPath Result Error:", expectedResult, actual);
+	}
+
+	public void testElementTest2() throws Exception {
+		String inputFile = "/TestSources/SpecialTypes.xml";
+		String expectedResult = "true";
+		URL fileURL = bundle.getEntry(inputFile);
+		Schema jaxpSchema = loadSchema();
+		loadDOMDocument(fileURL, jaxpSchema);
+
+		// Get XML Schema Information for the Document
+		XSModel schema = getGrammar();
+
+		DynamicContext dc = setupDynamicContext(schema);
+		dc.add_namespace(null, "http://typedecl");
+		// addUserDefinedSimpleTypes(schema, dc);
+
+		String xpath = "/root/InterleaveType instance of element(InterleaveType)";
+		String actual = null;
+		try {
+			XPath path = compileXPath(dc, xpath);
+
+			Evaluator eval = new DefaultEvaluator(dc, domDoc);
+			ResultSequence rs = eval.evaluate(path);
+
+			actual = buildResultString(rs);
+
+		} catch (XPathParserException ex) {
+			actual = ex.code();
+		} catch (StaticError ex) {
+			actual = ex.code();
+		} catch (DynamicError ex) {
+			actual = ex.code();
+		}
+
+		assertEquals("XPath Result Error:", expectedResult, actual);
+	}
+
+	public void testElementTest3() throws Exception {
+		String inputFile = "/TestSources/SpecialTypes.xml";
+		String expectedResult = "false";
+		URL fileURL = bundle.getEntry(inputFile);
+		Schema jaxpSchema = loadSchema();
+		loadDOMDocument(fileURL, jaxpSchema);
+
+		// Get XML Schema Information for the Document
+		XSModel schema = getGrammar();
+
+		DynamicContext dc = setupDynamicContext(schema);
+		dc.add_namespace(null, "http://typedecl");
+		// addUserDefinedSimpleTypes(schema, dc);
+
+		String xpath = "/root/InterleaveType instance of element(integer)";
+		String actual = null;
+		try {
+			XPath path = compileXPath(dc, xpath);
+
+			Evaluator eval = new DefaultEvaluator(dc, domDoc);
+			ResultSequence rs = eval.evaluate(path);
+
+			actual = buildResultString(rs);
+
+		} catch (XPathParserException ex) {
+			actual = ex.code();
+		} catch (StaticError ex) {
+			actual = ex.code();
+		} catch (DynamicError ex) {
+			actual = ex.code();
+		}
+
+		assertEquals("XPath Result Error:", expectedResult, actual);
+	}
+
+
+	public void testXPathInstanceOf4() throws Exception {
+		// Bug 298267
+		// This test should fail
+		String inputFile = "/TestSources/SpecialTypes.xml";
+		String expectedResult = "true";
+		URL fileURL = bundle.getEntry(inputFile);
+		Schema jaxpSchema = loadSchema();
+		loadDOMDocument(fileURL, jaxpSchema);
+
+		// Get XML Schema Information for the Document
+		XSModel schema = getGrammar();
+
+		DynamicContext dc = setupDynamicContext(schema);
+		dc.add_namespace(null, "http://typedecl");
+		// addUserDefinedSimpleTypes(schema, dc);
+
+		String xpath = "/root/InterleaveType instance of element(InterleaveType, InterleaveType)";
+		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(expectedResult, actual);
+
+	}
+
+	public void testXPathInstanceOf5() throws Exception {
+		// Bug 298267
+		// This test should fail
+		String inputFile = "/TestSources/SpecialTypes.xml";
+		String expectedResult = "false";
+		URL fileURL = bundle.getEntry(inputFile);
+		Schema jaxpSchema = loadSchema();
+		loadDOMDocument(fileURL, jaxpSchema);
+
+		// Get XML Schema Information for the Document
+		XSModel schema = getGrammar();
+
+		DynamicContext dc = setupDynamicContext(schema);
+		dc.add_namespace(null, "http://typedecl");
+		// addUserDefinedSimpleTypes(schema, dc);
+
+		String xpath = "/root/InterleaveType instance of element(InterleaveType, InterleaveType2)";
+		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(expectedResult, actual);
+
+	}
+	
+	private Schema loadSchema() throws SAXException {
+		String schemaFile = "/TestSources/SpecialTypes.xsd";
+		SchemaFactory schemaFactory = new XMLSchemaFactory();
+		URL schemaURL = bundle.getEntry(schemaFile);
+		Schema jaxpschema = schemaFactory.newSchema(schemaURL);
+		return jaxpschema;
+	}
+
+}
diff --git a/tests/org.eclipse.wst.xml.xpath2.processor.tests/src/org/eclipse/wst/xml/xpath2/processor/testsuite/core/SeqExprInstanceOfTest.java b/tests/org.eclipse.wst.xml.xpath2.processor.tests/src/org/eclipse/wst/xml/xpath2/processor/testsuite/core/SeqExprInstanceOfTest.java
index 40c4fed..fac0e19 100644
--- a/tests/org.eclipse.wst.xml.xpath2.processor.tests/src/org/eclipse/wst/xml/xpath2/processor/testsuite/core/SeqExprInstanceOfTest.java
+++ b/tests/org.eclipse.wst.xml.xpath2.processor.tests/src/org/eclipse/wst/xml/xpath2/processor/testsuite/core/SeqExprInstanceOfTest.java
@@ -6518,8 +6518,6 @@
       }
 
       assertEquals("XPath Result Error " + xqFile + ":", expectedResult, actual);
-        
-
    }
 
 }
diff --git a/tests/org.eclipse.wst.xml.xpath2.processor.tests/src/org/eclipse/wst/xml/xpath2/processor/testsuite/functions/ResolveQNameFuncTest.java b/tests/org.eclipse.wst.xml.xpath2.processor.tests/src/org/eclipse/wst/xml/xpath2/processor/testsuite/functions/ResolveQNameFuncTest.java
index 7f78509..e7f87e4 100644
--- a/tests/org.eclipse.wst.xml.xpath2.processor.tests/src/org/eclipse/wst/xml/xpath2/processor/testsuite/functions/ResolveQNameFuncTest.java
+++ b/tests/org.eclipse.wst.xml.xpath2.processor.tests/src/org/eclipse/wst/xml/xpath2/processor/testsuite/functions/ResolveQNameFuncTest.java
@@ -421,8 +421,8 @@
 	
 	public void test_K_ResolveQnameConstructFunc_4() throws Exception {
 		String inputFile = "/TestSources/emptydoc.xml";
-		String xqFile = "/Queries/XQuery/Functions/URIFunc/ResolveURIFunc/fn-resolve-uri-1.xq";
-		String expectedResult = "XPTY0004";
+		String xqFile = "Queries/XQuery/ResolveQNameConstructFunc/K-ResolveQNameConstructFunc-4.xq";
+		String expectedResult = "true";
 		URL fileURL = bundle.getEntry(inputFile);
 		loadDOMDocument(fileURL);