You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by mu...@apache.org on 2025/07/23 11:48:57 UTC
(xalan-java) branch xalan-j_xslt3.0_mvn updated: committing implementation improvements for xpath general comparison operators =, !=, <, <=, >, >=
This is an automated email from the ASF dual-hosted git repository.
mukulg pushed a commit to branch xalan-j_xslt3.0_mvn
in repository https://gitbox.apache.org/repos/asf/xalan-java.git
The following commit(s) were added to refs/heads/xalan-j_xslt3.0_mvn by this push:
new 26d869c46 committing implementation improvements for xpath general comparison operators =, !=, <, <=, >, >=
26d869c46 is described below
commit 26d869c461407ffedc352c7f5f0c571712fbccf9
Author: Mukul Gandhi <ga...@gmail.com>
AuthorDate: Wed Jul 23 17:18:33 2025 +0530
committing implementation improvements for xpath general comparison operators =, !=, <, <=, >, >=
---
README | 8 +-
.../org/apache/xalan/processor/XSLTSchema.java | 2 +-
.../org/apache/xalan/templates/ElemCopyOf.java | 2 +-
.../org/apache/xalan/templates/ElemForEach.java | 2 +-
.../xalan/templates/ElemTemplateElement.java | 2 +-
.../org/apache/xalan/templates/ElemValueOf.java | 2 +-
.../org/apache/xalan/templates/ElemVariable.java | 2 +-
.../org/apache/xalan/templates/TemplateList.java | 2 +-
.../org/apache/xml/serializer/SerializerBase.java | 2 +-
.../java/org/apache/xpath/compiler/Compiler.java | 8 +-
.../org/apache/xpath/compiler/FunctionTable.java | 2 +-
.../java/org/apache/xpath/compiler/Keywords.java | 2 +-
src/main/java/org/apache/xpath/compiler/OpMap.java | 2 +-
.../org/apache/xpath/compiler/XPathParser.java | 76 +++++++++---------
.../java/org/apache/xpath/objects/XPathArray.java | 17 +++++
src/main/java/org/apache/xpath/operations/Div.java | 2 +-
.../java/org/apache/xpath/operations/Equals.java | 22 +++++-
.../java/org/apache/xpath/operations/Minus.java | 2 +-
.../java/org/apache/xpath/operations/Mult.java | 2 +-
.../java/org/apache/xpath/operations/Plus.java | 2 +-
.../org/apache/xpath/res/XPATHErrorResources.java | 2 +-
.../xalan/tests/util/XslTransformTestsUtil.java | 2 +-
.../tests/w3c/xslt3/W3CXslTransformTestsUtil.java | 40 ++++++++++
.../w3c/xslt3/result/attr/_as-test-set_result.xml | 4 +-
.../w3c/xslt3/result/attr/_avt-test-set_result.xml | 2 +-
.../xslt3/result/attr/_match-test-set_result.xml | 2 +-
.../xslt3/result/attr/_select-test-set_result.xml | 4 +-
.../_xpath-default-namespace-test-set_result.xml | 2 +-
.../result/decl/_attribute-set-test-set_result.xml | 2 +-
.../result/decl/_character-map-test-set_result.xml | 2 +-
.../result/decl/_function-test-set_result.xml | 4 +-
.../result/decl/_variable-test-set_result.xml | 2 +-
.../xslt3/result/expr/_axes-test-set_result.xml | 4 +-
.../result/expr/_castable-test-set_result.xml | 2 +-
.../result/expr/_expression-test-set_result.xml | 2 +-
.../w3c/xslt3/result/expr/_for-test-set_result.xml | 2 +-
.../_higher-order-functions-test-set_result.xml | 2 +-
.../xslt3/result/expr/_math-test-set_result.xml | 2 +-
.../result/expr/_nodetest-test-set_result.xml | 2 +-
.../xslt3/result/expr/_path-test-set_result.xml | 2 +-
.../result/expr/_predicate-test-set_result.xml | 2 +-
.../result/fn/_deep-equal-test-set_result.xml | 2 +-
.../result/fn/_format-number-test-set_result.xml | 2 +-
.../w3c/xslt3/result/fn/_key-test-set_result.xml | 2 +-
.../xslt3/result/fn/_position-test-set_result.xml | 2 +-
.../w3c/xslt3/result/fn/_root-test-set_result.xml | 4 +-
.../insn/_analyze-string-test-set_result.xml | 2 +-
.../insn/_apply-templates-test-set_result.xml | 2 +-
.../result/insn/_attribute-test-set_result.xml | 2 +-
.../result/insn/_call-template-test-set_result.xml | 2 +-
.../xslt3/result/insn/_choose-test-set_result.xml | 2 +-
.../xslt3/result/insn/_copy-test-set_result.xml | 6 +-
.../xslt3/result/insn/_element-test-set_result.xml | 2 +-
.../insn/_for-each-group-test-set_result.xml | 2 +-
.../xslt3/result/insn/_iterate-test-set_result.xml | 6 +-
.../result/insn/_sequence-test-set_result.xml | 2 +-
.../xslt3/result/insn/_sort-test-set_result.xml | 2 +-
.../w3c/xslt3/result/insn/_try-test-set_result.xml | 2 +-
.../result/insn/_xsl-document-test-set_result.xml | 6 +-
.../xslt3/result/misc/_regex-test-set_result.xml | 2 +-
.../xslt3/result/type/_boolean-test-set_result.xml | 2 +-
.../xslt3/result/type/_date-test-set_result.xml | 2 +-
.../xslt3/result/type/_node-test-set_result.xml | 2 +-
.../xslt3/result/type/_string-test-set_result.xml | 2 +-
.../result/w3c_xslt3_testsuite_xalan-j_result.xml | 6 +-
.../xpath3/XPathGeneralComparisonOpTests.java | 40 ++++++++++
.../xpath_general_comparison/gold/test15.out | 5 ++
.../xpath_general_comparison/gold/test16.out | 4 +
.../xpath_general_comparison/gold/test17.out | 6 ++
.../xpath_general_comparison/gold/test18.out | 10 +++
.../resources/xpath_general_comparison/test15.xml | 6 ++
.../resources/xpath_general_comparison/test15.xsl | 56 ++++++++++++++
.../resources/xpath_general_comparison/test16.xml | 7 ++
.../resources/xpath_general_comparison/test16.xsl | 50 ++++++++++++
.../resources/xpath_general_comparison/test17.xsl | 89 ++++++++++++++++++++++
.../resources/xpath_general_comparison/test18.xsl | 76 ++++++++++++++++++
76 files changed, 541 insertions(+), 123 deletions(-)
diff --git a/README b/README
index 40822e0cb..30ec063a9 100644
--- a/README
+++ b/README
@@ -17,7 +17,7 @@
Copyright 1999-2025 The Apache Software Foundation
-Document last modified : 2025-07-22
+Document last modified : 2025-07-23
Authors:
Gary Gregory <gg...@apache.org>
@@ -59,16 +59,16 @@ The Maven build results like following shall be produced:
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running org.apache.xalan.tests.main.AllXalanXSLT3Tests
-[INFO] Tests run: 1166, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 126.82 s - in org.apache.xalan.tests.main.AllXalanXSLT3Tests
+[INFO] Tests run: 1170, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 33.613 s - in org.apache.xalan.tests.main.AllXalanXSLT3Tests
[INFO]
[INFO] Results:
[INFO]
-[INFO] Tests run: 1166, Failures: 0, Errors: 0, Skipped: 0
+[INFO] Tests run: 1170, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
-[INFO] Total time: 04:17 min
+[INFO] Total time: 01:02 min
If the user needs to run Xalan-J's XSLT 3.0 implementation via Java code, the value of JVM's system property
diff --git a/src/main/java/org/apache/xalan/processor/XSLTSchema.java b/src/main/java/org/apache/xalan/processor/XSLTSchema.java
index c1ee123d1..4d56932dd 100644
--- a/src/main/java/org/apache/xalan/processor/XSLTSchema.java
+++ b/src/main/java/org/apache/xalan/processor/XSLTSchema.java
@@ -79,7 +79,7 @@ import org.apache.xalan.templates.ElemWithParam;
import org.apache.xml.utils.QName;
/**
- * This class defines the allowed structure for an XSLT 3 stylesheet, and the
+ * This class defines the allowed structure for an XSLT 3.0 stylesheet, and the
* mapping between Xalan classes and the markup elements in the stylesheet.
*
* @see <a href="https://www.w3.org/TR/xslt-30/#xsd11-schema-for-xslt">XSD 1.1 Schema for XSLT Stylesheets</a>
diff --git a/src/main/java/org/apache/xalan/templates/ElemCopyOf.java b/src/main/java/org/apache/xalan/templates/ElemCopyOf.java
index 7e2fc8025..c2d2c0d1d 100644
--- a/src/main/java/org/apache/xalan/templates/ElemCopyOf.java
+++ b/src/main/java/org/apache/xalan/templates/ElemCopyOf.java
@@ -72,7 +72,7 @@ import xml.xpath31.processor.types.XSUntypedAtomic;
* @author Christine Li <jy...@apache.org>
*
* @author Mukul Gandhi <mu...@apache.org>
- * (XSLT 3 specific changes, to this class)
+ * (XSLT 3.0 specific changes, to this class)
*
* @xsl.usage advanced
*/
diff --git a/src/main/java/org/apache/xalan/templates/ElemForEach.java b/src/main/java/org/apache/xalan/templates/ElemForEach.java
index 71bbea562..89fd2fb91 100644
--- a/src/main/java/org/apache/xalan/templates/ElemForEach.java
+++ b/src/main/java/org/apache/xalan/templates/ElemForEach.java
@@ -61,7 +61,7 @@ import xml.xpath31.processor.types.XSBoolean;
* Ilene Seelemann <il...@apache.org>
*
* @author Mukul Gandhi <mu...@apache.org>
- * (XSLT 3 specific changes, to this class)
+ * (XSLT 3.0 specific changes, to this class)
*
* @xsl.usage advanced
*/
diff --git a/src/main/java/org/apache/xalan/templates/ElemTemplateElement.java b/src/main/java/org/apache/xalan/templates/ElemTemplateElement.java
index 4d92e85c8..a58e79235 100644
--- a/src/main/java/org/apache/xalan/templates/ElemTemplateElement.java
+++ b/src/main/java/org/apache/xalan/templates/ElemTemplateElement.java
@@ -78,7 +78,7 @@ import org.xml.sax.helpers.NamespaceSupport;
* @author Joseph Kesselman <jk...@apache.org>
*
* @author Mukul Gandhi <mu...@apache.org>
- * (XSLT 3 specific changes, to this class)
+ * (XSLT 3.0 specific changes, to this class)
*
* @xsl.usage advanced
*/
diff --git a/src/main/java/org/apache/xalan/templates/ElemValueOf.java b/src/main/java/org/apache/xalan/templates/ElemValueOf.java
index d5bc1ca17..ec7622a31 100644
--- a/src/main/java/org/apache/xalan/templates/ElemValueOf.java
+++ b/src/main/java/org/apache/xalan/templates/ElemValueOf.java
@@ -71,7 +71,7 @@ import xml.xpath31.processor.types.XSQName;
* Morris Kwan <mk...@apache.org>, Christine Li <jy...@apache.org>
*
* @author Mukul Gandhi <mu...@apache.org>
- * (XSLT 3 specific changes, to this class)
+ * (XSLT 3.0 specific changes, to this class)
*
* @xsl.usage advanced
*/
diff --git a/src/main/java/org/apache/xalan/templates/ElemVariable.java b/src/main/java/org/apache/xalan/templates/ElemVariable.java
index 70899ec39..3b9670107 100644
--- a/src/main/java/org/apache/xalan/templates/ElemVariable.java
+++ b/src/main/java/org/apache/xalan/templates/ElemVariable.java
@@ -85,7 +85,7 @@ import xml.xpath31.processor.types.XSUntypedAtomic;
* Christine Li <jy...@apache.org>
*
* @author Mukul Gandhi <mu...@apache.org>
- * (XSLT 3 specific changes, to this class)
+ * (XSLT 3.0 specific changes, to this class)
*
* @xsl.usage advanced
*/
diff --git a/src/main/java/org/apache/xalan/templates/TemplateList.java b/src/main/java/org/apache/xalan/templates/TemplateList.java
index ab81567dd..681580f07 100644
--- a/src/main/java/org/apache/xalan/templates/TemplateList.java
+++ b/src/main/java/org/apache/xalan/templates/TemplateList.java
@@ -437,7 +437,7 @@ public class TemplateList implements java.io.Serializable
/**
* Add a template to the template list.
*
- * This method definition supports XSLT 3 xsl:template pattern strings
+ * This method definition supports XSLT 3.0 xsl:template pattern strings
* like ".", and .[...] (this is XPath pattern '.' followed by predicate
* that imposes a boolean filter condition on context value '.'. Only
* one predicate is supported here).
diff --git a/src/main/java/org/apache/xml/serializer/SerializerBase.java b/src/main/java/org/apache/xml/serializer/SerializerBase.java
index 99f09292a..6f18b89dd 100644
--- a/src/main/java/org/apache/xml/serializer/SerializerBase.java
+++ b/src/main/java/org/apache/xml/serializer/SerializerBase.java
@@ -243,7 +243,7 @@ public abstract class SerializerBase
protected char[] m_attrBuff = new char[30];
/**
- * This class field supports, XSLT 3 instruction xsl:character-map
+ * This class field supports, XSLT 3.0 xsl:character-map instruction
* processing.
*/
private CharacterMapConfig m_charMapConfig = new CharacterMapConfig();
diff --git a/src/main/java/org/apache/xpath/compiler/Compiler.java b/src/main/java/org/apache/xpath/compiler/Compiler.java
index 166d89d69..60f474d43 100644
--- a/src/main/java/org/apache/xpath/compiler/Compiler.java
+++ b/src/main/java/org/apache/xpath/compiler/Compiler.java
@@ -105,7 +105,7 @@ import org.apache.xpath.res.XPATHErrorResources;
* Christine Li <jy...@apache.org>
*
* @author Mukul Gandhi <mu...@apache.org>
- * (XPath 3 specific changes, to this class)
+ * (XPath 3.1 specific changes, to this class)
*
* @xsl.usage advanced
*/
@@ -122,7 +122,7 @@ public class Compiler extends OpMap
* may be null, but which, if not null, must be valid over
* the long haul, in other words, it will not be cloned.
* @param funcTable The FunctionTable object where the xpath build-in
- * functions are stored.
+ * functions are stored.
*/
public Compiler(ErrorListener errorHandler, SourceLocator locator, FunctionTable funcTable)
{
@@ -291,11 +291,11 @@ public class Compiler extends OpMap
case OpCodes.OP_ARRAY_COMPARISON :
expr = xpathExpressionArrayComparison(opPos); break;
case OpCodes.OP_QUO:
- error(XPATHErrorResources.ER_UNKNOWN_OPCODE, new Object[]{ "quo" });
+ error(XPATHErrorResources.ER_UNKNOWN_OPCODE, new Object[]{ m_currentPattern, "quo" });
break;
default :
error(XPATHErrorResources.ER_UNKNOWN_OPCODE,
- new Object[]{ Integer.toString(getOp(opPos)) });
+ new Object[]{ m_currentPattern, Integer.toString(getOp(opPos)) });
}
return expr;
diff --git a/src/main/java/org/apache/xpath/compiler/FunctionTable.java b/src/main/java/org/apache/xpath/compiler/FunctionTable.java
index 60b31e57b..45cef2f52 100644
--- a/src/main/java/org/apache/xpath/compiler/FunctionTable.java
+++ b/src/main/java/org/apache/xpath/compiler/FunctionTable.java
@@ -36,7 +36,7 @@ import org.apache.xpath.functions.Function;
* @author Christine Li <jy...@apache.org>
*
* @author Mukul Gandhi <mu...@apache.org>
- * (XPath 3 specific changes, to this class)
+ * (XPath 3.1 specific changes, to this class)
*/
public class FunctionTable
{
diff --git a/src/main/java/org/apache/xpath/compiler/Keywords.java b/src/main/java/org/apache/xpath/compiler/Keywords.java
index f50551706..d53043565 100644
--- a/src/main/java/org/apache/xpath/compiler/Keywords.java
+++ b/src/main/java/org/apache/xpath/compiler/Keywords.java
@@ -31,7 +31,7 @@ import java.util.Hashtable;
* @author Christine Li <jy...@apache.org>
*
* @author Mukul Gandhi <mu...@apache.org>
- * (XPath 3 specific changes, to this class)
+ * (XPath 3.1 specific changes, to this class)
*
* @xsl.usage internal
*/
diff --git a/src/main/java/org/apache/xpath/compiler/OpMap.java b/src/main/java/org/apache/xpath/compiler/OpMap.java
index 32765061e..565301e19 100644
--- a/src/main/java/org/apache/xpath/compiler/OpMap.java
+++ b/src/main/java/org/apache/xpath/compiler/OpMap.java
@@ -289,7 +289,7 @@ public class OpMap
else
{
error(org.apache.xpath.res.XPATHErrorResources.ER_UNKNOWN_OPCODE,
- new Object[]{ String.valueOf(stepType) }); //"ERROR! Unknown op code: "+m_opMap[opPos]);
+ new Object[]{ m_currentPattern, String.valueOf(stepType) }); //"ERROR! Unknown op code: "+m_opMap[opPos]);
return -1;
}
}
diff --git a/src/main/java/org/apache/xpath/compiler/XPathParser.java b/src/main/java/org/apache/xpath/compiler/XPathParser.java
index cd57c55c1..efa92478c 100644
--- a/src/main/java/org/apache/xpath/compiler/XPathParser.java
+++ b/src/main/java/org/apache/xpath/compiler/XPathParser.java
@@ -122,7 +122,7 @@ import xml.xpath31.processor.types.XSInteger;
* Henry Zongaro <zo...@ca.ibm.com>, Christine Li <jy...@apache.org>
*
* @author Mukul Gandhi <mu...@apache.org>
- * (XPath 3 specific changes, to this class)
+ * (XPath 3.1 specific changes, to this class)
*
* @xsl.usage general
*/
@@ -392,10 +392,12 @@ public class XPathParser
}
if (isXPathExprStrHasBalancedParens || tokenIs(',')) {
- // We check for the token string "," as well, since
- // an XPath parse might have finished without completing
- // parse of all sequence items if it was an XPath literal
- // sequence constructor parse.
+ /**
+ * We check for the token string "," as well, since
+ * an XPath parse might have finished without completing
+ * parse of all sequence items if it was an XPath literal
+ * sequence constructor parse.
+ */
newExpression = "(" + expression + ")";
}
}
@@ -1520,6 +1522,8 @@ public class XPathParser
// XPath parse of general comparison (i.e, =, !=, <, <=, >, >=) between
// an xdm array on LHS and another XPath operand on RHS.
+ List<String> arrComparisonXpathLhs = new ArrayList<String>();
+
TokenQueueScanPosition prevTokenQueueScanPos = new TokenQueueScanPosition(m_queueMark, m_tokenChar, m_token);
StringBuffer arrItemXPathStrBuff = new StringBuffer();
@@ -1531,17 +1535,17 @@ public class XPathParser
if (tokenIs(',')) {
nextToken();
- seqOrArrayXPathItems.add(arrItemXPathStrBuff.toString());
+ arrComparisonXpathLhs.add(arrItemXPathStrBuff.toString());
arrItemXPathStrBuff = new StringBuffer();
continue;
}
if (tokenIs(']')) {
nextToken();
- seqOrArrayXPathItems.add(arrItemXPathStrBuff.toString());
+ arrComparisonXpathLhs.add(arrItemXPathStrBuff.toString());
break;
}
- }
+ }
if (m_token != null) {
m_xpathArrayComparison = new XPathArrayComparison();
@@ -1582,22 +1586,21 @@ public class XPathParser
nextToken();
}
- if (isRelnComparison) {
- StringBuffer seqArrItemXPathStrBuff = new StringBuffer();
- if (lookahead(null, 1)) {
- arrComparisonXpathRhs.add(m_token);
- nextToken();
- }
- else if (tokenIs('(')) {
- consumeExpected('(');
+ if (isRelnComparison) {
+ if (tokenIs('[')) {
+ // The RHS operand is a literal array constructor
+ consumeExpected('[');
+ StringBuffer seqArrItemXPathStrBuff = new StringBuffer();
while (m_token != null) {
- if (tokenIs(')')) {
- arrComparisonXpathRhs.add(seqArrItemXPathStrBuff.toString());
- consumeExpected(')');
+ if (tokenIs(']')) {
+ if (seqArrItemXPathStrBuff.length() > 0) {
+ arrComparisonXpathRhs.add(seqArrItemXPathStrBuff.toString());
+ }
+ consumeExpected(']');
}
- else if (tokenIs(',')) {
- nextToken();
+ else if (tokenIs(',')) {
arrComparisonXpathRhs.add(seqArrItemXPathStrBuff.toString());
+ nextToken();
seqArrItemXPathStrBuff = new StringBuffer();
}
else {
@@ -1606,26 +1609,17 @@ public class XPathParser
}
}
}
- else if (tokenIs('[')) {
- consumeExpected('(');
+ else {
+ // The RHS operand XPath expression
+ StringBuffer seqArrItemXPathStrBuff = new StringBuffer();
while (m_token != null) {
- if (tokenIs(']')) {
- arrComparisonXpathRhs.add(seqArrItemXPathStrBuff.toString());
- consumeExpected(')');
- }
- else if (tokenIs(',')) {
- nextToken();
- arrComparisonXpathRhs.add(seqArrItemXPathStrBuff.toString());
- seqArrItemXPathStrBuff = new StringBuffer();
- }
- else {
- seqArrItemXPathStrBuff.append(m_token);
- nextToken();
- }
+ seqArrItemXPathStrBuff.append(m_token);
+ nextToken();
}
- }
+ arrComparisonXpathRhs.add(seqArrItemXPathStrBuff.toString());
+ }
- m_xpathArrayComparison.setArrayConstructorXPathLhs(seqOrArrayXPathItems);
+ m_xpathArrayComparison.setArrayConstructorXPathLhs(arrComparisonXpathLhs);
m_xpathArrayComparison.setSeqArrConstructorXPathRhs(arrComparisonXpathRhs);
int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
@@ -1638,12 +1632,14 @@ public class XPathParser
return;
}
else {
- seqOrArrayXPathItems.clear();
+ seqOrArrayXPathItems.clear();
+
restoreTokenQueueScanPosition(prevTokenQueueScanPos);
}
}
else {
- seqOrArrayXPathItems.clear();
+ seqOrArrayXPathItems.clear();
+
restoreTokenQueueScanPosition(prevTokenQueueScanPos);
}
}
diff --git a/src/main/java/org/apache/xpath/objects/XPathArray.java b/src/main/java/org/apache/xpath/objects/XPathArray.java
index 8d34e8aae..09f10305e 100644
--- a/src/main/java/org/apache/xpath/objects/XPathArray.java
+++ b/src/main/java/org/apache/xpath/objects/XPathArray.java
@@ -93,6 +93,23 @@ public class XPathArray extends XObject {
fList.clear();
}
+ /**
+ * Method definition, to atomize an XPath array
+ * to a sequence.
+ *
+ * @return ResultSequence object
+ */
+ public ResultSequence atomize() {
+ ResultSequence result = new ResultSequence();
+
+ for (int i = 0; i < this.size(); i++) {
+ XObject arrItem = this.get(i);
+ result.add(arrItem);
+ }
+
+ return result;
+ }
+
/**
* Get the string value of this XPathArray object.
*
diff --git a/src/main/java/org/apache/xpath/operations/Div.java b/src/main/java/org/apache/xpath/operations/Div.java
index 314009d88..2bb6d4f07 100644
--- a/src/main/java/org/apache/xpath/operations/Div.java
+++ b/src/main/java/org/apache/xpath/operations/Div.java
@@ -43,7 +43,7 @@ import xml.xpath31.processor.types.XSYearMonthDuration;
* @author Scott Boag <sc...@us.ibm.com>
*
* @author Mukul Gandhi <mu...@apache.org>
- * (XSLT 3 specific changes, to this class)
+ * (XPath 3.1 specific changes, to this class)
*/
public class Div extends ArithmeticOperation
{
diff --git a/src/main/java/org/apache/xpath/operations/Equals.java b/src/main/java/org/apache/xpath/operations/Equals.java
index 63998adbd..dbf979c47 100644
--- a/src/main/java/org/apache/xpath/operations/Equals.java
+++ b/src/main/java/org/apache/xpath/operations/Equals.java
@@ -31,6 +31,7 @@ import org.apache.xpath.objects.XBooleanStatic;
import org.apache.xpath.objects.XMLNodeCursorImpl;
import org.apache.xpath.objects.XNumber;
import org.apache.xpath.objects.XObject;
+import org.apache.xpath.objects.XPathArray;
import org.apache.xpath.objects.XString;
import xml.xpath31.processor.types.XSBoolean;
@@ -59,6 +60,14 @@ public class Equals extends Operation
throws javax.xml.transform.TransformerException
{
XObject result = null;
+
+ if (left instanceof XPathArray) {
+ left = ((XPathArray)left).atomize();
+ }
+
+ if (right instanceof XPathArray) {
+ right = ((XPathArray)right).atomize();
+ }
if (right instanceof ResultSequence) {
if (left instanceof XNumber) {
@@ -85,9 +94,16 @@ public class Equals extends Operation
XObject xObj1 = resultSeqLhs.item(i);
for (int j = 0; j < resultSeqRhs.size(); j++) {
XObject xObj2 = resultSeqRhs.item(j);
- if (xObj1.equals(xObj2)) {
- isEqual = true;
- break;
+ if (xObj2 instanceof ResultSequence) {
+ XObject r1 = operate(xObj1, xObj2);
+ isEqual = r1.bool();
+ }
+ else if (xObj1.equals(xObj2)) {
+ isEqual = true;
+ }
+
+ if (isEqual) {
+ break;
}
}
diff --git a/src/main/java/org/apache/xpath/operations/Minus.java b/src/main/java/org/apache/xpath/operations/Minus.java
index 9dc32e770..c4cf89259 100644
--- a/src/main/java/org/apache/xpath/operations/Minus.java
+++ b/src/main/java/org/apache/xpath/operations/Minus.java
@@ -46,7 +46,7 @@ import xml.xpath31.processor.types.XSYearMonthDuration;
* @author Scott Boag <sc...@us.ibm.com>
*
* @author Mukul Gandhi <mu...@apache.org>
- * (XSLT 3 specific changes, to this class)
+ * (XPath 3.1 specific changes, to this class)
*/
public class Minus extends ArithmeticOperation
{
diff --git a/src/main/java/org/apache/xpath/operations/Mult.java b/src/main/java/org/apache/xpath/operations/Mult.java
index c3b6781a6..72ab3cd62 100644
--- a/src/main/java/org/apache/xpath/operations/Mult.java
+++ b/src/main/java/org/apache/xpath/operations/Mult.java
@@ -47,7 +47,7 @@ import xml.xpath31.processor.types.XSYearMonthDuration;
* @author Scott Boag <sc...@us.ibm.com>
*
* @author Mukul Gandhi <mu...@apache.org>
- * (XSLT 3 specific changes, to this class)
+ * (XPath 3.1 specific changes, to this class)
*/
public class Mult extends ArithmeticOperation
{
diff --git a/src/main/java/org/apache/xpath/operations/Plus.java b/src/main/java/org/apache/xpath/operations/Plus.java
index 6b0f52558..c58609c09 100644
--- a/src/main/java/org/apache/xpath/operations/Plus.java
+++ b/src/main/java/org/apache/xpath/operations/Plus.java
@@ -49,7 +49,7 @@ import xml.xpath31.processor.types.XSYearMonthDuration;
* @author Scott Boag <sc...@us.ibm.com>
*
* @author Mukul Gandhi <mu...@apache.org>
- * (XSLT 3 specific changes, to this class)
+ * (XPath 3.1 specific changes, to this class)
*/
public class Plus extends ArithmeticOperation
{
diff --git a/src/main/java/org/apache/xpath/res/XPATHErrorResources.java b/src/main/java/org/apache/xpath/res/XPATHErrorResources.java
index 36242d78e..9af0bf5cd 100644
--- a/src/main/java/org/apache/xpath/res/XPATHErrorResources.java
+++ b/src/main/java/org/apache/xpath/res/XPATHErrorResources.java
@@ -474,7 +474,7 @@ public static final String ER_IGNORABLE_WHITESPACE_NOT_HANDLED =
"Could not get variable named {0}"},
{ ER_UNKNOWN_OPCODE,
- "ERROR! Unknown op code: {0}"},
+ "XPST0003 : An XPath expression {0} has syntax error. Unknown op code : {1}."},
{ ER_EXTRA_ILLEGAL_TOKENS,
"Extra illegal tokens: {0}"},
diff --git a/src/test/java/org/apache/xalan/tests/util/XslTransformTestsUtil.java b/src/test/java/org/apache/xalan/tests/util/XslTransformTestsUtil.java
index a325f04cc..1876cce4e 100644
--- a/src/test/java/org/apache/xalan/tests/util/XslTransformTestsUtil.java
+++ b/src/test/java/org/apache/xalan/tests/util/XslTransformTestsUtil.java
@@ -620,7 +620,7 @@ public class XslTransformTestsUtil extends FileComparisonUtil {
}
/**
- * This method definition checks whether, two XML or HTML
+ * Method definition, to check whether two XML or HTML
* string values represent equal document content.
*/
protected boolean isTwoXmlHtmlStrEqual(String str1, String str2) {
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/W3CXslTransformTestsUtil.java b/src/test/java/org/apache/xalan/tests/w3c/xslt3/W3CXslTransformTestsUtil.java
index f73940e47..dc49eded7 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/W3CXslTransformTestsUtil.java
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/W3CXslTransformTestsUtil.java
@@ -61,6 +61,7 @@ import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@@ -490,9 +491,13 @@ public class W3CXslTransformTestsUtil extends XslTransformTestsUtil {
}
Document xmlInpDoc1 = m_xmlDocumentBuilder.parse(new ByteArrayInputStream((resultStrWriter.toString()).getBytes()));
+ normalizeXmlDocumentText(xmlInpDoc1);
+
String xmlHtmlStr1 = serializeXmlDomElementNode(xmlInpDoc1);
Document xmlInpDoc2 = m_xmlDocumentBuilder.parse(new ByteArrayInputStream((expectedResultStr).getBytes()));
+ normalizeXmlDocumentText(xmlInpDoc2);
+
String xmlHtmlStr2 = serializeXmlDomElementNode(xmlInpDoc2);
if (isTwoXmlHtmlStrEqual(xmlHtmlStr1, xmlHtmlStr2)) {
@@ -1099,6 +1104,41 @@ public class W3CXslTransformTestsUtil extends XslTransformTestsUtil {
}
}
+ /**
+ * Method definition, to normalize an XML document content
+ * if an XML document's top most element only contains text
+ * node children.
+ *
+ * @param document The supplied XML document
+ */
+ private void normalizeXmlDocumentText(Document document) {
+ Element docElem = document.getDocumentElement();
+ StringBuffer strBuff = new StringBuffer();
+ NodeList nodeList = docElem.getChildNodes();
+ boolean isAllTextNode = true;
+ for (int i = 0; i < nodeList.getLength(); i++) {
+ Node node = nodeList.item(i);
+ if (node.getNodeType() == Node.TEXT_NODE) {
+ strBuff.append(node.getTextContent());
+ }
+ else {
+ isAllTextNode = false;
+ break;
+ }
+ }
+
+ if (isAllTextNode) {
+ String normalizedTextNodeValue = (strBuff.toString()).trim();
+ for (int i = 0; i < nodeList.getLength(); i++) {
+ Node node = nodeList.item(i);
+ docElem.removeChild(node);
+ }
+
+ Text textNode = document.createTextNode(normalizedTextNodeValue);
+ docElem.appendChild(textNode);
+ }
+ }
+
/**
* An object of this class, contains information for XSL test case's expected
* run-time result, when the test case specifies expected XSL transformation
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_as-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_as-test-set_result.xml
index 22fabc3d2..17e35a55e 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_as-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_as-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:54:59Z" fail="53" name="as" pass="51" skipped="4" statusUnknown="1" totalRun="105">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:36Z" fail="53" name="as" pass="51" skipped="4" statusUnknown="1" totalRun="105">
<testResult status="pass" testName="as-0101"/>
<testResult status="pass" testName="as-0102"/>
<testResult status="pass" testName="as-0103"/>
@@ -131,7 +131,7 @@
<testResult status="fail" testName="as-1222">
<outResult>
<errTrace>XTTE0570 : The required item type of an xdm input node is item(). The supplied value does'nt match an expected type.</errTrace>
- <errTrace>ERROR! Unknown op code: -1</errTrace>
+ <errTrace>XPST0003 : An XPath expression /out/par1/normalize-space() = "hello namespaced true" has syntax error. Unknown op code : -1.</errTrace>
<errTrace>java.lang.NullPointerException</errTrace>
</outResult>
</testResult>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_avt-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_avt-test-set_result.xml
index 4cdc7a053..4fdc777c3 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_avt-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_avt-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:04Z" fail="14" name="avt" pass="21" skipped="0" statusUnknown="0" totalRun="35">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:40Z" fail="14" name="avt" pass="21" skipped="0" statusUnknown="0" totalRun="35">
<testResult status="pass" testName="avt-0101"/>
<testResult status="fail" testName="avt-0201"/>
<testResult status="pass" testName="avt-0202"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_match-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_match-test-set_result.xml
index 6571255df..a51504205 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_match-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_match-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:05Z" fail="61" name="match" pass="67" skipped="8" statusUnknown="1" totalRun="129">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:41Z" fail="61" name="match" pass="67" skipped="8" statusUnknown="1" totalRun="129">
<testResult status="pass" testName="match-001"/>
<testResult status="pass" testName="match-002"/>
<testResult status="pass" testName="match-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_select-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_select-test-set_result.xml
index 8462a9753..2842f317c 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_select-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_select-test-set_result.xml
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:11Z" fail="6" name="select" pass="18" skipped="0" statusUnknown="1" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:45Z" fail="5" name="select" pass="19" skipped="0" statusUnknown="1" totalRun="25">
<testResult status="pass" testName="select-0101"/>
<testResult status="pass" testName="select-0102"/>
- <testResult status="fail" testName="select-0201"/>
+ <testResult status="pass" testName="select-0201"/>
<testResult status="pass" testName="select-0202"/>
<testResult status="pass" testName="select-0301"/>
<testResult status="fail" testName="select-0302"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_xpath-default-namespace-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_xpath-default-namespace-test-set_result.xml
index 87006c574..d899f8c33 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_xpath-default-namespace-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_xpath-default-namespace-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:59:14Z" fail="17" name="xpath-default-namespace" pass="9" skipped="0" statusUnknown="0" totalRun="26">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:36:59Z" fail="17" name="xpath-default-namespace" pass="9" skipped="0" statusUnknown="0" totalRun="26">
<testResult status="pass" testName="xpath-default-namespace-0101"/>
<testResult status="fail" testName="xpath-default-namespace-0102"/>
<testResult status="pass" testName="xpath-default-namespace-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_attribute-set-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_attribute-set-test-set_result.xml
index 0cd28a011..9737dd325 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_attribute-set-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_attribute-set-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:41Z" fail="8" name="attribute-set" pass="41" skipped="1" statusUnknown="0" totalRun="49">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:04Z" fail="8" name="attribute-set" pass="41" skipped="1" statusUnknown="0" totalRun="49">
<testResult status="pass" testName="attribute-set-0101"/>
<testResult status="fail" testName="attribute-set-0102">
<outResult/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_character-map-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_character-map-test-set_result.xml
index cfaa0dd19..7ed129bc3 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_character-map-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_character-map-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:40Z" fail="12" name="character-map" pass="15" skipped="1" statusUnknown="1" totalRun="28">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:03Z" fail="12" name="character-map" pass="15" skipped="1" statusUnknown="1" totalRun="28">
<testResult status="pass" testName="character-map-001"/>
<testResult status="pass" testName="character-map-002"/>
<testResult status="pass" testName="character-map-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_function-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_function-test-set_result.xml
index f5ece154e..d0aa28d8f 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_function-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_function-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:37Z" fail="27" name="function" pass="38" skipped="4" statusUnknown="1" totalRun="66">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:02Z" fail="27" name="function" pass="38" skipped="4" statusUnknown="1" totalRun="66">
<testResult status="fail" testName="function-0001">
<outResult/>
</testResult>
@@ -47,7 +47,7 @@
<testResult status="fail" testName="function-0401"/>
<testResult status="fail" testName="function-0501">
<outResult>
- <errTrace>ERROR! Unknown op code: 0</errTrace>
+ <errTrace>XPST0003 : An XPath expression /out/section[1]/actor[1][@name="User"][children/child="Administrator"][empty(parents/node())] has syntax error. Unknown op code : 0.</errTrace>
<errTrace>java.lang.ArrayIndexOutOfBoundsException</errTrace>
</outResult>
</testResult>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_variable-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_variable-test-set_result.xml
index b965458f2..d248f6a1d 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_variable-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_variable-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:54:57Z" fail="3" name="variable" pass="16" skipped="0" statusUnknown="1" totalRun="20">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:34Z" fail="3" name="variable" pass="16" skipped="0" statusUnknown="1" totalRun="20">
<testResult status="pass" testName="variable-0101"/>
<testResult status="pass" testName="variable-0102"/>
<testResult status="pass" testName="variable-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_axes-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_axes-test-set_result.xml
index 57b8e339a..0c87875d0 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_axes-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_axes-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:43Z" fail="20" name="axes" pass="181" skipped="0" statusUnknown="0" totalRun="201">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:05Z" fail="20" name="axes" pass="181" skipped="0" statusUnknown="0" totalRun="201">
<testResult status="pass" testName="axes-001"/>
<testResult status="pass" testName="axes-002"/>
<testResult status="pass" testName="axes-003"/>
@@ -65,7 +65,7 @@
<testResult status="fail" testName="axes-060"/>
<testResult status="fail" testName="axes-061">
<outResult>
- <errTrace>ERROR! Unknown op code: 21</errTrace>
+ <errTrace>XPST0003 : An XPath expression /out/u = "2,9,3,4" /out/u = "9,2,3,4" has syntax error. Unknown op code : 21.</errTrace>
<errTrace>java.lang.ArrayIndexOutOfBoundsException</errTrace>
</outResult>
</testResult>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_castable-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_castable-test-set_result.xml
index c5475bbfa..ebe17213a 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_castable-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_castable-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:50Z" fail="5" name="castable" pass="4" skipped="0" statusUnknown="0" totalRun="9">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:10Z" fail="5" name="castable" pass="4" skipped="0" statusUnknown="0" totalRun="9">
<testResult status="pass" testName="castable-001"/>
<testResult status="pass" testName="castable-002"/>
<testResult status="pass" testName="castable-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_expression-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_expression-test-set_result.xml
index 81b3c9e62..ae3561d83 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_expression-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_expression-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:51Z" fail="0" name="expression" pass="9" skipped="0" statusUnknown="1" totalRun="10">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:10Z" fail="0" name="expression" pass="9" skipped="0" statusUnknown="1" totalRun="10">
<testResult status="pass" testName="expression-0101"/>
<testResult status="pass" testName="expression-0301"/>
<testResult status="pass" testName="expression-0302"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_for-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_for-test-set_result.xml
index 955e81a69..36257ac42 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_for-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_for-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:52Z" fail="2" name="for" pass="1" skipped="0" statusUnknown="1" totalRun="4">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:10Z" fail="2" name="for" pass="1" skipped="0" statusUnknown="1" totalRun="4">
<testResult status="fail" testName="for-001"/>
<testResult status="fail" testName="for-002"/>
<testResult status="pass" testName="for-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_higher-order-functions-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_higher-order-functions-test-set_result.xml
index 3e7a5bdd6..bc4d5083f 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_higher-order-functions-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_higher-order-functions-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:56:01Z" fail="6" name="higher-order-functions" pass="18" skipped="0" statusUnknown="1" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:16Z" fail="6" name="higher-order-functions" pass="18" skipped="0" statusUnknown="1" totalRun="25">
<testResult status="pass" testName="higher-order-functions-001"/>
<testResult status="pass" testName="higher-order-functions-002"/>
<testResult status="pass" testName="higher-order-functions-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_math-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_math-test-set_result.xml
index 5335f20b2..dc0eec7be 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_math-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_math-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:54Z" fail="39" name="math" pass="108" skipped="0" statusUnknown="1" totalRun="148">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:12Z" fail="39" name="math" pass="108" skipped="0" statusUnknown="1" totalRun="148">
<testResult status="pass" testName="math-0101"/>
<testResult status="fail" testName="math-0102">
<outResult/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_nodetest-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_nodetest-test-set_result.xml
index 7eea4d661..67d20d6c2 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_nodetest-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_nodetest-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:59Z" fail="36" name="nodetest" pass="2" skipped="0" statusUnknown="0" totalRun="38">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:15Z" fail="36" name="nodetest" pass="2" skipped="0" statusUnknown="0" totalRun="38">
<testResult status="pass" testName="nodetest-001"/>
<testResult status="pass" testName="nodetest-002"/>
<testResult status="fail" testName="nodetest-003">
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_path-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_path-test-set_result.xml
index 803a6d51d..c16ed0682 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_path-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_path-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:56:01Z" fail="3" name="path" pass="7" skipped="0" statusUnknown="0" totalRun="10">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:16Z" fail="3" name="path" pass="7" skipped="0" statusUnknown="0" totalRun="10">
<testResult status="pass" testName="path-001"/>
<testResult status="pass" testName="path-002"/>
<testResult status="pass" testName="path-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_predicate-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_predicate-test-set_result.xml
index 7a8b6748d..00d97a7e8 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_predicate-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_predicate-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:56:03Z" fail="7" name="predicate" pass="50" skipped="0" statusUnknown="0" totalRun="57">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:17Z" fail="7" name="predicate" pass="50" skipped="0" statusUnknown="0" totalRun="57">
<testResult status="fail" testName="predicate-001"/>
<testResult status="fail" testName="predicate-002"/>
<testResult status="fail" testName="predicate-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_deep-equal-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_deep-equal-test-set_result.xml
index 3eff19a12..f1140d1ac 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_deep-equal-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_deep-equal-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:58:59Z" fail="0" name="deep-equal" pass="2" skipped="0" statusUnknown="0" totalRun="2">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:36:50Z" fail="0" name="deep-equal" pass="2" skipped="0" statusUnknown="0" totalRun="2">
<testResult status="pass" testName="deep-equal-001"/>
<testResult status="pass" testName="deep-equal-002"/>
</testrun>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_format-number-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_format-number-test-set_result.xml
index 5adac9d2f..3c722e0f9 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_format-number-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_format-number-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:59:10Z" fail="32" name="format-number" pass="38" skipped="4" statusUnknown="0" totalRun="70">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:36:56Z" fail="32" name="format-number" pass="38" skipped="4" statusUnknown="0" totalRun="70">
<testResult status="fail" testName="format-number-001"/>
<testResult status="fail" testName="format-number-002"/>
<testResult status="fail" testName="format-number-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_key-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_key-test-set_result.xml
index 3e7559ff9..907b18407 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_key-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_key-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:59:08Z" fail="3" name="key" pass="21" skipped="0" statusUnknown="1" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:36:55Z" fail="3" name="key" pass="21" skipped="0" statusUnknown="1" totalRun="25">
<testResult status="pass" testName="key-001"/>
<testResult status="fail" testName="key-002"/>
<testResult status="pass" testName="key-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_position-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_position-test-set_result.xml
index 03675ec2d..f3595dbf8 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_position-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_position-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:59:00Z" fail="11" name="position" pass="126" skipped="0" statusUnknown="1" totalRun="138">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:36:50Z" fail="11" name="position" pass="126" skipped="0" statusUnknown="1" totalRun="138">
<testResult status="pass" testName="position-0101"/>
<testResult status="fail" testName="position-0102"/>
<testResult status="fail" testName="position-0103">
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_root-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_root-test-set_result.xml
index 04bfec74e..7ba16e946 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_root-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_root-test-set_result.xml
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:59:07Z" fail="4" name="root" pass="6" skipped="0" statusUnknown="0" totalRun="10">
- <testResult status="fail" testName="root-0101"/>
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:36:55Z" fail="3" name="root" pass="7" skipped="0" statusUnknown="0" totalRun="10">
+ <testResult status="pass" testName="root-0101"/>
<testResult status="fail" testName="root-0102"/>
<testResult status="pass" testName="root-0103"/>
<testResult status="fail" testName="root-0104"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_analyze-string-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_analyze-string-test-set_result.xml
index 38f556cb6..0a8bc6516 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_analyze-string-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_analyze-string-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:59:04Z" fail="17" name="analyze-string" pass="36" skipped="5" statusUnknown="0" totalRun="53">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:36:53Z" fail="17" name="analyze-string" pass="36" skipped="5" statusUnknown="0" totalRun="53">
<testResult status="pass" testName="analyze-string-001"/>
<testResult status="pass" testName="analyze-string-002"/>
<testResult status="pass" testName="analyze-string-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_apply-templates-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_apply-templates-test-set_result.xml
index af04777c5..a2c69f9b9 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_apply-templates-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_apply-templates-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:12Z" fail="25" name="apply-templates" pass="21" skipped="2" statusUnknown="0" totalRun="46">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:46Z" fail="25" name="apply-templates" pass="21" skipped="2" statusUnknown="0" totalRun="46">
<testResult status="fail" testName="apply-templates-001">
<outResult><?xml version="1.0" encoding="UTF-8"?>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_attribute-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_attribute-test-set_result.xml
index 37c834400..c0864981a 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_attribute-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_attribute-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:18Z" fail="21" name="attribute" pass="8" skipped="0" statusUnknown="1" totalRun="30">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:50Z" fail="21" name="attribute" pass="8" skipped="0" statusUnknown="1" totalRun="30">
<testResult status="fail" testName="attribute-0001"/>
<testResult status="fail" testName="attribute-0002">
<outResult/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_call-template-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_call-template-test-set_result.xml
index 4a8d2957a..91ccc9602 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_call-template-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_call-template-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:19Z" fail="14" name="call-template" pass="27" skipped="1" statusUnknown="0" totalRun="41">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:51Z" fail="14" name="call-template" pass="27" skipped="1" statusUnknown="0" totalRun="41">
<testResult status="fail" testName="call-template-0001">
<outResult><?xml version="1.0" encoding="UTF-8"?><out/></outResult>
</testResult>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_choose-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_choose-test-set_result.xml
index b81b00c25..60911114c 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_choose-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_choose-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:21Z" fail="6" name="choose" pass="17" skipped="0" statusUnknown="1" totalRun="24">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:52Z" fail="6" name="choose" pass="17" skipped="0" statusUnknown="1" totalRun="24">
<testResult status="pass" testName="choose-0101"/>
<testResult status="pass" testName="choose-0102"/>
<testResult status="fail" testName="choose-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_copy-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_copy-test-set_result.xml
index b5b9919d8..d8d708b73 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_copy-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_copy-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:25Z" fail="43" name="copy" pass="16" skipped="0" statusUnknown="1" totalRun="60">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:54Z" fail="43" name="copy" pass="16" skipped="0" statusUnknown="1" totalRun="60">
<testResult status="fail" testName="copy-0101"/>
<testResult status="pass" testName="copy-0102"/>
<testResult status="fail" testName="copy-0103"/>
@@ -262,7 +262,7 @@
<testResult status="fail" testName="copy-1213">
<outResult>
<errTrace>XTSE0010 : an instruction xsl:where-populated is not known to the XSLT processor.</errTrace>
- <errTrace>ERROR! Unknown op code: 0</errTrace>
+ <errTrace>XPST0003 : An XPath expression /out/comment() = "Boo!" has syntax error. Unknown op code : 0.</errTrace>
<errTrace>java.lang.ArrayIndexOutOfBoundsException</errTrace>
</outResult>
</testResult>
@@ -274,7 +274,7 @@
<testResult status="fail" testName="copy-1215">
<outResult>
<errTrace>XTTE0570 : The xs:string value 'Boo!' cannot be cast to a type node().</errTrace>
- <errTrace>ERROR! Unknown op code: 0</errTrace>
+ <errTrace>XPST0003 : An XPath expression /out/text() = "Boo!" has syntax error. Unknown op code : 0.</errTrace>
<errTrace>java.lang.ArrayIndexOutOfBoundsException</errTrace>
</outResult>
</testResult>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_element-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_element-test-set_result.xml
index fc7fc6dcf..3d0c6ea84 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_element-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_element-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:33Z" fail="18" name="element" pass="11" skipped="0" statusUnknown="0" totalRun="29">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:59Z" fail="18" name="element" pass="11" skipped="0" statusUnknown="0" totalRun="29">
<testResult status="fail" testName="element-0001">
<outResult/>
</testResult>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_for-each-group-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_for-each-group-test-set_result.xml
index 6cae113a8..b6090745d 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_for-each-group-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_for-each-group-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:13Z" fail="26" name="for-each-group" pass="47" skipped="4" statusUnknown="1" totalRun="74">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:47Z" fail="26" name="for-each-group" pass="47" skipped="4" statusUnknown="1" totalRun="74">
<testResult status="pass" testName="for-each-group-001"/>
<testResult status="skipped" testName="for-each-group-002a" xsltVersion="xslt 2.0 only"/>
<testResult status="pass" testName="for-each-group-002"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_iterate-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_iterate-test-set_result.xml
index 9d1a1dffc..2c04a7f78 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_iterate-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_iterate-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:28Z" fail="29" name="iterate" pass="15" skipped="0" statusUnknown="0" totalRun="44">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:56Z" fail="29" name="iterate" pass="15" skipped="0" statusUnknown="0" totalRun="44">
<testResult status="pass" testName="iterate-001"/>
<testResult status="pass" testName="iterate-002"/>
<testResult status="pass" testName="iterate-003"/>
@@ -111,7 +111,7 @@
</testResult>
<testResult status="fail" testName="iterate-028">
<outResult>
- <errTrace>ERROR! Unknown op code: 0</errTrace>
+ <errTrace>XPST0003 : An XPath expression /out/text()[. = "exit at 12 of 76"] has syntax error. Unknown op code : 0.</errTrace>
<errTrace>java.lang.ArrayIndexOutOfBoundsException</errTrace>
</outResult>
</testResult>
@@ -119,7 +119,7 @@
<testResult status="fail" testName="iterate-030">
<outResult>
<errTrace>XTSE0010 : An xsl:next-iteration instruction is not in a tail position within the sequence constructor of an xsl:iterate instruction.</errTrace>
- <errTrace>ERROR! Unknown op code: 0</errTrace>
+ <errTrace>XPST0003 : An XPath expression /out/text()["count 2"] has syntax error. Unknown op code : 0.</errTrace>
<errTrace>java.lang.ArrayIndexOutOfBoundsException</errTrace>
</outResult>
</testResult>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sequence-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sequence-test-set_result.xml
index 2e490be31..175d89e62 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sequence-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sequence-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:30Z" fail="18" name="sequence" pass="8" skipped="0" statusUnknown="1" totalRun="27">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:57Z" fail="18" name="sequence" pass="8" skipped="0" statusUnknown="1" totalRun="27">
<testResult status="fail" testName="sequence-0101"/>
<testResult status="fail" testName="sequence-0102"/>
<testResult status="pass" testName="sequence-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sort-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sort-test-set_result.xml
index 7259684ca..d7eac0b8f 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sort-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sort-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:34Z" fail="44" name="sort" pass="36" skipped="0" statusUnknown="0" totalRun="80">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:00Z" fail="44" name="sort" pass="36" skipped="0" statusUnknown="0" totalRun="80">
<testResult status="pass" testName="sort-001"/>
<testResult status="pass" testName="sort-002"/>
<testResult status="fail" testName="sort-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_try-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_try-test-set_result.xml
index 6540e2498..bba7e4b91 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_try-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_try-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:55:17Z" fail="26" name="try" pass="11" skipped="5" statusUnknown="0" totalRun="37">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:34:49Z" fail="26" name="try" pass="11" skipped="5" statusUnknown="0" totalRun="37">
<testResult status="pass" testName="try-001"/>
<testResult status="fail" testName="try-002">
<outResult/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_xsl-document-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_xsl-document-test-set_result.xml
index 6e755ea06..dfaef46e6 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_xsl-document-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_xsl-document-test-set_result.xml
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:59:13Z" fail="13" name="xsl-document" pass="12" skipped="0" statusUnknown="0" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:36:59Z" fail="13" name="xsl-document" pass="12" skipped="0" statusUnknown="0" totalRun="25">
<testResult status="pass" testName="xsl-document-0101"/>
<testResult status="fail" testName="xsl-document-0102">
<outResult>
- <errTrace>ERROR! Unknown op code: 0</errTrace>
+ <errTrace>XPST0003 : An XPath expression /out/node()[1][self::comment()][.="Valuable comment"] has syntax error. Unknown op code : 0.</errTrace>
<errTrace>java.lang.ArrayIndexOutOfBoundsException: -1</errTrace>
</outResult>
</testResult>
@@ -16,7 +16,7 @@
<testResult status="pass" testName="xsl-document-0203"/>
<testResult status="fail" testName="xsl-document-0301">
<outResult>
- <errTrace>ERROR! Unknown op code: 0</errTrace>
+ <errTrace>XPST0003 : An XPath expression /out/node()[1][self::*:e1][namespace-uri()="http://www.example.org/foo"][@t1="1"][@t2="2"][@t3="3"] has syntax error. Unknown op code : 0.</errTrace>
<errTrace>java.lang.ArrayIndexOutOfBoundsException: -1</errTrace>
</outResult>
</testResult>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/misc/_regex-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/misc/_regex-test-set_result.xml
index bcb7dee2a..50b74ea93 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/misc/_regex-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/misc/_regex-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:59:12Z" fail="12" name="regex" pass="33" skipped="0" statusUnknown="0" totalRun="45">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:36:58Z" fail="12" name="regex" pass="33" skipped="0" statusUnknown="0" totalRun="45">
<testResult status="pass" testName="regex-001"/>
<testResult status="fail" testName="regex-002"/>
<testResult status="pass" testName="regex-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_boolean-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_boolean-test-set_result.xml
index 17c92dd16..bc3199c23 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_boolean-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_boolean-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:56:05Z" fail="24" name="boolean" pass="88" skipped="0" statusUnknown="0" totalRun="112">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:19Z" fail="24" name="boolean" pass="88" skipped="0" statusUnknown="0" totalRun="112">
<testResult status="pass" testName="boolean-001"/>
<testResult status="pass" testName="boolean-002"/>
<testResult status="pass" testName="boolean-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_date-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_date-test-set_result.xml
index 371c67800..1baeb01b8 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_date-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_date-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:56:13Z" fail="47" name="date" pass="37" skipped="0" statusUnknown="1" totalRun="85">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:24Z" fail="47" name="date" pass="37" skipped="0" statusUnknown="1" totalRun="85">
<testResult status="pass" testName="date-001"/>
<testResult status="pass" testName="date-002"/>
<testResult status="pass" testName="date-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_node-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_node-test-set_result.xml
index cf31f05af..23565e76e 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_node-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_node-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:56:08Z" fail="17" name="node" pass="15" skipped="0" statusUnknown="0" totalRun="32">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:21Z" fail="17" name="node" pass="15" skipped="0" statusUnknown="0" totalRun="32">
<testResult status="pass" testName="node-0101"/>
<testResult status="pass" testName="node-0201"/>
<testResult status="fail" testName="node-0301">
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_string-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_string-test-set_result.xml
index fce23d5c7..994e44bb2 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_string-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_string-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-22T12:56:09Z" fail="8" name="string" pass="128" skipped="0" statusUnknown="0" totalRun="136">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-23T11:35:21Z" fail="8" name="string" pass="128" skipped="0" statusUnknown="0" totalRun="136">
<testResult status="pass" testName="string-001"/>
<testResult status="pass" testName="string-002"/>
<testResult status="pass" testName="string-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/w3c_xslt3_testsuite_xalan-j_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/w3c_xslt3_testsuite_xalan-j_result.xml
index 18fa1e327..7bf6dc03e 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/w3c_xslt3_testsuite_xalan-j_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/w3c_xslt3_testsuite_xalan-j_result.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<testResult dateTime="2025-07-22T12:59:54Z" desc="W3C XSLT 3.0 test suite results" fail="777" pass="1415" skipped="39" success="64.03%" totalRun="2210" xslt_processor="Xalan-J XSLT 3.0 development code">
+<testResult dateTime="2025-07-23T11:37:14Z" desc="W3C XSLT 3.0 test suite results" fail="775" pass="1417" skipped="39" success="64.12%" totalRun="2210" xslt_processor="Xalan-J XSLT 3.0 development code">
<attr>
<as fail="53" pass="51" skipped="4" success="48.57%" totalRun="105"/>
<avt fail="14" pass="21" skipped="0" success="60.0%" totalRun="35"/>
<match fail="61" pass="67" skipped="8" success="51.94%" totalRun="129"/>
- <select fail="6" pass="18" skipped="0" success="72.0%" totalRun="25"/>
+ <select fail="5" pass="19" skipped="0" success="76.0%" totalRun="25"/>
<xpath-default-namespace fail="17" pass="9" skipped="0" success="34.62%" totalRun="26"/>
</attr>
<decl>
@@ -29,7 +29,7 @@
<format-number fail="32" pass="38" skipped="4" success="54.29%" totalRun="70"/>
<key fail="3" pass="21" skipped="0" success="84.0%" totalRun="25"/>
<position fail="11" pass="126" skipped="0" success="91.3%" totalRun="138"/>
- <root fail="4" pass="6" skipped="0" success="60.0%" totalRun="10"/>
+ <root fail="3" pass="7" skipped="0" success="70.0%" totalRun="10"/>
</fn>
<insn>
<analyze-string fail="17" pass="36" skipped="5" success="67.92%" totalRun="53"/>
diff --git a/src/test/java/org/apache/xalan/tests/xpath3/XPathGeneralComparisonOpTests.java b/src/test/java/org/apache/xalan/tests/xpath3/XPathGeneralComparisonOpTests.java
index a6a6c3463..142dc0829 100644
--- a/src/test/java/org/apache/xalan/tests/xpath3/XPathGeneralComparisonOpTests.java
+++ b/src/test/java/org/apache/xalan/tests/xpath3/XPathGeneralComparisonOpTests.java
@@ -189,5 +189,45 @@ public class XPathGeneralComparisonOpTests extends XslTransformTestsUtil {
runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
}
+
+ @Test
+ public void xpathGeneralComparisonOpTest15() {
+ String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test15.xml";
+ String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test15.xsl";
+
+ String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test15.out";
+
+ runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+ }
+
+ @Test
+ public void xpathGeneralComparisonOpTest16() {
+ String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test16.xml";
+ String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test16.xsl";
+
+ String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test16.out";
+
+ runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+ }
+
+ @Test
+ public void xpathGeneralComparisonOpTest17() {
+ String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test16.xml";
+ String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test17.xsl";
+
+ String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test17.out";
+
+ runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+ }
+
+ @Test
+ public void xpathGeneralComparisonOpTest18() {
+ String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test18.xsl";
+ String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test18.xsl";
+
+ String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test18.out";
+
+ runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+ }
}
diff --git a/src/test/resources/xpath_general_comparison/gold/test15.out b/src/test/resources/xpath_general_comparison/gold/test15.out
new file mode 100644
index 000000000..9ecf8cef3
--- /dev/null
+++ b/src/test/resources/xpath_general_comparison/gold/test15.out
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?><result>
+ <one>true</one>
+ <two>false</two>
+ <three>false</three>
+</result>
diff --git a/src/test/resources/xpath_general_comparison/gold/test16.out b/src/test/resources/xpath_general_comparison/gold/test16.out
new file mode 100644
index 000000000..8f8f9e2b5
--- /dev/null
+++ b/src/test/resources/xpath_general_comparison/gold/test16.out
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?><result>
+ <a>1</a>
+ <b/>
+</result>
diff --git a/src/test/resources/xpath_general_comparison/gold/test17.out b/src/test/resources/xpath_general_comparison/gold/test17.out
new file mode 100644
index 000000000..b32099c45
--- /dev/null
+++ b/src/test/resources/xpath_general_comparison/gold/test17.out
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?><result>
+ <a>1</a>
+ <b/>
+ <c>3</c>
+ <d>4</d>
+</result>
diff --git a/src/test/resources/xpath_general_comparison/gold/test18.out b/src/test/resources/xpath_general_comparison/gold/test18.out
new file mode 100644
index 000000000..80a4b0dae
--- /dev/null
+++ b/src/test/resources/xpath_general_comparison/gold/test18.out
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?><result>
+ <one>true</one>
+ <two>true</two>
+ <three>false</three>
+ <four>false</four>
+ <a>true</a>
+ <b>true</b>
+ <c>false</c>
+ <d>false</d>
+</result>
diff --git a/src/test/resources/xpath_general_comparison/test15.xml b/src/test/resources/xpath_general_comparison/test15.xml
new file mode 100644
index 000000000..2c1d4abbb
--- /dev/null
+++ b/src/test/resources/xpath_general_comparison/test15.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<doc>
+ <a>hello</a>
+ <b>ok</b>
+ <c>thanks</c>
+</doc>
diff --git a/src/test/resources/xpath_general_comparison/test15.xsl b/src/test/resources/xpath_general_comparison/test15.xsl
new file mode 100644
index 000000000..e3ea4f233
--- /dev/null
+++ b/src/test/resources/xpath_general_comparison/test15.xsl
@@ -0,0 +1,56 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:fn0="http://fn0"
+ exclude-result-prefixes="#all"
+ version="3.0">
+
+ <!-- Author: mukulg@apache.org -->
+
+ <!-- use with test15.xml -->
+
+ <!-- An XSL stylesheet test case, to test XPath 3.1 general
+ comparison operator != with XPath literal array on LHS. -->
+
+ <xsl:output method="xml" indent="yes"/>
+
+ <xsl:template match="/doc">
+ <result>
+ <one>
+ <xsl:value-of select="[fn0:str1(a), fn0:str1(b), fn0:str1(c)] != 'thanks'"/>
+ </one>
+ <two>
+ <xsl:value-of select="[fn0:str1(a), fn0:str1(a), fn0:str1(a)] != 'hello'"/>
+ </two>
+ <three>
+ <xsl:value-of select="[fn0:str1(a), fn0:str1(a), fn0:str1(a)] != fn0:str1(a)"/>
+ </three>
+ </result>
+ </xsl:template>
+
+ <!-- An XSL stylesheet function, that returns string value of
+ supplied xdm element node. -->
+ <xsl:function name="fn0:str1" as="xs:string">
+ <xsl:param name="p1" as="element()"/>
+ <xsl:sequence select="string($p1)"/>
+ </xsl:function>
+
+ <!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+</xsl:stylesheet>
diff --git a/src/test/resources/xpath_general_comparison/test16.xml b/src/test/resources/xpath_general_comparison/test16.xml
new file mode 100644
index 000000000..0e050deab
--- /dev/null
+++ b/src/test/resources/xpath_general_comparison/test16.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<doc>
+ <one>1</one>
+ <two>2</two>
+ <three>3</three>
+ <four>4</four>
+</doc>
diff --git a/src/test/resources/xpath_general_comparison/test16.xsl b/src/test/resources/xpath_general_comparison/test16.xsl
new file mode 100644
index 000000000..e2f2b5f2c
--- /dev/null
+++ b/src/test/resources/xpath_general_comparison/test16.xsl
@@ -0,0 +1,50 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version="3.0">
+
+ <!-- Author: mukulg@apache.org -->
+
+ <!-- use with test16.xml -->
+
+ <!-- An XSL stylesheet test case, to test XPath 3.1 general
+ comparison operator = with XPath literal array on LHS. -->
+
+ <xsl:output method="xml" indent="yes"/>
+
+ <xsl:template match="/doc">
+ <result>
+ <a>
+ <xsl:variable name="var1">
+ <xsl:if test="[number(two), number(one), number(three)] = number(two)">
+ 1
+ </xsl:if>
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($var1)"/>
+ </a>
+ <b>
+ <xsl:if test="[number(two), number(one), number(three)] = number(four)">
+ 2
+ </xsl:if>
+ </b>
+ </result>
+ </xsl:template>
+
+ <!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+</xsl:stylesheet>
diff --git a/src/test/resources/xpath_general_comparison/test17.xsl b/src/test/resources/xpath_general_comparison/test17.xsl
new file mode 100644
index 000000000..88966e154
--- /dev/null
+++ b/src/test/resources/xpath_general_comparison/test17.xsl
@@ -0,0 +1,89 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:fn0="http://fn0"
+ exclude-result-prefixes="#all"
+ version="3.0">
+
+ <!-- Author: mukulg@apache.org -->
+
+ <!-- use with test16.xml -->
+
+ <!-- An XSL stylesheet test case, to test XPath 3.1 general
+ comparison operator = with XPath literal array on LHS.
+
+ This stylesheet also tests, calling XSL stylesheet function
+ with arguments that're XPath literal sequence or array.
+ -->
+
+ <xsl:output method="xml" indent="yes"/>
+
+ <xsl:template match="/doc">
+ <result>
+ <a>
+ <xsl:variable name="var1">
+ <xsl:if test="[two, one, three] = two">
+ 1
+ </xsl:if>
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($var1)" />
+ </a>
+ <b>
+ <xsl:if test="[two, one, three] = four">
+ 2
+ </xsl:if>
+ </b>
+ <c>
+ <xsl:variable name="var1">
+ <xsl:if test="fn0:compareXdmSeq((two, one, three), two)">
+ 3
+ </xsl:if>
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($var1)" />
+ </c>
+ <d>
+ <xsl:variable name="var1">
+ <xsl:if test="fn0:compareXdmArray([two, one, three], two)">
+ 4
+ </xsl:if>
+ </xsl:variable>
+ <xsl:value-of select="normalize-space($var1)" />
+ </d>
+ </result>
+ </xsl:template>
+
+ <!-- An XSL stylesheet function, that compares an xdm sequence of
+ elements with an element node using XPath operator '='. -->
+ <xsl:function name="fn0:compareXdmSeq" as="xs:boolean">
+ <xsl:param name="p1" as="element()*"/>
+ <xsl:param name="p2" as="element()"/>
+ <xsl:sequence select="$p1 = $p2"/>
+ </xsl:function>
+
+ <!-- An XSL stylesheet function, that compares an xdm array of
+ elements with an element node using XPath operator '='. -->
+ <xsl:function name="fn0:compareXdmArray" as="xs:boolean">
+ <xsl:param name="p1" as="array(*)"/>
+ <xsl:param name="p2" as="element()"/>
+ <xsl:sequence select="$p1 = $p2"/>
+ </xsl:function>
+
+ <!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+</xsl:stylesheet>
diff --git a/src/test/resources/xpath_general_comparison/test18.xsl b/src/test/resources/xpath_general_comparison/test18.xsl
new file mode 100644
index 000000000..35d041717
--- /dev/null
+++ b/src/test/resources/xpath_general_comparison/test18.xsl
@@ -0,0 +1,76 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ exclude-result-prefixes="xs"
+ version="3.0">
+
+ <!-- Author: mukulg@apache.org -->
+
+ <!-- An XSL stylesheet test case, to test XPath 3.1 general
+ comparison operator = with XPath literal array on LHS
+ and XPath literal array or sequence on RHS.
+
+ As per XPath 3.1 spec, from the point of view of XPath
+ comparison operator =, XPath literal arrays are atomized
+ to sequence before comparison, which means that XPath literal
+ array is similar to literal sequence for comparison purposes.
+ -->
+
+ <xsl:output method="xml" indent="yes"/>
+
+ <xsl:template match="/">
+ <result>
+ <one>
+ <xsl:value-of select="[1,2,3] = [2,5]"/>
+ </one>
+ <two>
+ <xsl:value-of select="[1,2,3] = (2,5)"/>
+ </two>
+ <three>
+ <xsl:value-of select="[1,2,3] = [6,7]"/>
+ </three>
+ <four>
+ <xsl:value-of select="[1,2,3] = (6,7)"/>
+ </four>
+
+ <!-- Using xsl:variable, to do same comparisons -->
+ <xsl:variable name="n1" select="1" as="xs:integer"/>
+ <xsl:variable name="n2" select="2" as="xs:integer"/>
+ <xsl:variable name="n3" select="3" as="xs:integer"/>
+ <xsl:variable name="n5" select="5" as="xs:integer"/>
+ <xsl:variable name="n6" select="6" as="xs:integer"/>
+ <xsl:variable name="n7" select="7" as="xs:integer"/>
+ <a>
+ <xsl:value-of select="[$n1, $n2, $n3] = [$n2, $n5]"/>
+ </a>
+ <b>
+ <xsl:value-of select="[$n1, $n2, $n3] = ($n2, $n5)"/>
+ </b>
+ <c>
+ <xsl:value-of select="[$n1, $n2, $n3] = [$n6, $n7]"/>
+ </c>
+ <d>
+ <xsl:value-of select="[$n1, $n2, $n3] = ($n6, $n7)"/>
+ </d>
+ </result>
+ </xsl:template>
+
+ <!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+</xsl:stylesheet>
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xalan.apache.org
For additional commands, e-mail: commits-help@xalan.apache.org