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/02 12:45:16 UTC
(xalan-java) branch xalan-j_xslt3.0_mvn updated: committing few xalan-j xslt 3.0 implementation bug fixes on this dev repos branch
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 6d5a87b65 committing few xalan-j xslt 3.0 implementation bug fixes on this dev repos branch
6d5a87b65 is described below
commit 6d5a87b654453d394ce84336ac91e2a53f9fc3a6
Author: Mukul Gandhi <ga...@gmail.com>
AuthorDate: Wed Jul 2 18:14:54 2025 +0530
committing few xalan-j xslt 3.0 implementation bug fixes on this dev repos branch
---
.../org/apache/xalan/templates/ElemFunction.java | 2 +-
.../org/apache/xalan/templates/ElemSequence.java | 32 ++-
.../org/apache/xalan/templates/ElemValueOf.java | 4 +-
src/main/java/org/apache/xpath/Expression.java | 4 +
.../java/org/apache/xpath/compiler/Compiler.java | 12 +-
.../java/org/apache/xpath/compiler/OpCodes.java | 4 +-
.../org/apache/xpath/compiler/XPathParser.java | 65 ++++-
.../composite/XPathExprFuncCallExtendedArg.java | 77 ++++++
.../xpath/composite/XPathSequenceConstructor.java | 12 +-
.../apache/xpath/functions/FuncFunctionArity.java | 35 ++-
.../apache/xpath/functions/FuncFunctionName.java | 34 ++-
.../xpath/functions/XPathDynamicFunctionCall.java | 133 +---------
.../XSL3ConstructorOrExtensionFunction.java | 4 +
.../xpath/functions/XSL3FunctionService.java | 288 +++++++++++++++++++--
.../tests/w3c/xslt3/W3CXslTransformTestsUtil.java | 54 ++--
.../w3c/xslt3/result/attr/_as-test-set_result.xml | 2 +-
.../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 | 2 +-
.../result/decl/_attribute-set-test-set_result.xml | 4 +-
.../result/decl/_character-map-test-set_result.xml | 2 +-
.../result/decl/_function-test-set_result.xml | 12 +-
.../result/decl/_variable-test-set_result.xml | 2 +-
.../xslt3/result/expr/_axes-test-set_result.xml | 2 +-
.../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 | 2 +-
.../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 | 2 +-
.../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 | 2 +-
.../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 | 2 +-
.../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 +-
56 files changed, 603 insertions(+), 255 deletions(-)
diff --git a/src/main/java/org/apache/xalan/templates/ElemFunction.java b/src/main/java/org/apache/xalan/templates/ElemFunction.java
index d0c0e1779..57f912b6c 100644
--- a/src/main/java/org/apache/xalan/templates/ElemFunction.java
+++ b/src/main/java/org/apache/xalan/templates/ElemFunction.java
@@ -330,7 +330,7 @@ public class ElemFunction extends ElemTemplate
(seqTypeItemOccurenceIndicator == SequenceTypeSupport.OccurrenceIndicator.ONE_OR_MANY) ||
(seqTypeItemOccurenceIndicator == SequenceTypeSupport.OccurrenceIndicator.ZERO_OR_ONE))) {
// An XPath sequence type occurrence indicator with value absent, or any
- // other occurrence indicator is ok for this case.
+ // other occurrence indicator is ok.
isSeqCardinalityOk = true;
}
else if ((seqTypeItemOccurenceIndicator == SequenceTypeSupport.OccurrenceIndicator.ZERO_OR_MANY) ||
diff --git a/src/main/java/org/apache/xalan/templates/ElemSequence.java b/src/main/java/org/apache/xalan/templates/ElemSequence.java
index b1dc01b7e..16339871f 100644
--- a/src/main/java/org/apache/xalan/templates/ElemSequence.java
+++ b/src/main/java/org/apache/xalan/templates/ElemSequence.java
@@ -76,14 +76,14 @@ public class ElemSequence extends ElemTemplateElement
private static final long serialVersionUID = 4299774714317634314L;
/**
- * Boolean value to indicate that, whether xsl:sequence instruction
- * is called from xsl:fork instruction.
+ * Boolean value to indicate, whether xsl:sequence instruction
+ * has been called from xsl:fork instruction.
*/
private boolean m_isCalledFromXslFork;
/**
- * xsl:sequence instruction's evaluation result. This is useful
- * when xsl:sequence instruction is called from xsl:fork
+ * An xsl:sequence instruction's evaluation result, when
+ * xsl:sequence instruction has been called from xsl:fork
* instruction.
*/
private XObject m_xslSequenceEvalResult = null;
@@ -315,7 +315,7 @@ public class ElemSequence extends ElemTemplateElement
dtmIter = locPathIterator.asIterator(xctxt, contextNode);
}
catch (ClassCastException ex) {
- // no op
+ // NO OP
}
if (dtmIter != null) {
@@ -401,10 +401,15 @@ public class ElemSequence extends ElemTemplateElement
}
if (xslSequenceVal == null) {
- xslSequenceVal = m_selectPattern.execute(xctxt, sourceNode, this);
- if (xslSequenceVal instanceof XPathNamedFunctionReference) {
- (XslTransformSharedDatastore.xpathNamedFunctionRefSequence).add((XPathNamedFunctionReference)xslSequenceVal);
+ if (selectExpression instanceof XPathNamedFunctionReference) {
+ (XslTransformSharedDatastore.xpathNamedFunctionRefSequence).add((XPathNamedFunctionReference)selectExpression);
}
+ else {
+ xslSequenceVal = m_selectPattern.execute(xctxt, sourceNode, this);
+ if (xslSequenceVal instanceof XPathNamedFunctionReference) {
+ (XslTransformSharedDatastore.xpathNamedFunctionRefSequence).add((XPathNamedFunctionReference)xslSequenceVal);
+ }
+ }
}
}
else if (getFirstChildElem() == null) {
@@ -417,17 +422,16 @@ public class ElemSequence extends ElemTemplateElement
}
if (xslSequenceVal == null) {
- // The result of evaluation of xsl:sequence instruction here,
- // is an empty sequence.
- XPath emptySeqXPath = new XPath(XPathParser.XPATH_EXPR_STR_EMPTY_SEQUENCE, srcLocator,
- null, XPath.SELECT, null);
- xslSequenceVal = emptySeqXPath.execute(xctxt, DTM.NULL, null);
+ // An xsl:sequence instruction's evaluation result here
+ // will be an empty sequence.
+ XPath xpathObj = new XPath(XPathParser.XPATH_EXPR_STR_EMPTY_SEQUENCE, srcLocator, null, XPath.SELECT, null);
+ xslSequenceVal = xpathObj.execute(xctxt, DTM.NULL, null);
}
if (m_isCalledFromXslFork) {
m_xslSequenceEvalResult = xslSequenceVal;
}
- else if (xslSequenceVal != null) {
+ else {
emitXslSequenceResultToSerializer(xctxt, transformer, xslSequenceVal);
}
}
diff --git a/src/main/java/org/apache/xalan/templates/ElemValueOf.java b/src/main/java/org/apache/xalan/templates/ElemValueOf.java
index 09b935a56..1f45031dd 100644
--- a/src/main/java/org/apache/xalan/templates/ElemValueOf.java
+++ b/src/main/java/org/apache/xalan/templates/ElemValueOf.java
@@ -64,9 +64,7 @@ import xml.xpath31.processor.types.XSNumericType;
import xml.xpath31.processor.types.XSQName;
/**
- * Implementation of XSLT xsl:value-of instruction.
- *
- * Ref : https://www.w3.org/TR/xslt-30/#element-value-of
+ * Implementation of XSLT 3.0 xsl:value-of instruction.
*
* @author Scott Boag <sc...@us.ibm.com>
* @author Ilene Seelemann
diff --git a/src/main/java/org/apache/xpath/Expression.java b/src/main/java/org/apache/xpath/Expression.java
index a8cb38cc9..6305713b3 100644
--- a/src/main/java/org/apache/xpath/Expression.java
+++ b/src/main/java/org/apache/xpath/Expression.java
@@ -596,6 +596,10 @@ public abstract class Expression implements java.io.Serializable, ExpressionNode
return m_parent.getColumnNumber();
}
+ public List<QName> getXPathVarList() {
+ return m_xpathVarList;
+ }
+
/**
* This method definition, evaluates an XPath expression suffix function call funcCall(..)
* within an expression like like /a/b/funcCall(..).
diff --git a/src/main/java/org/apache/xpath/compiler/Compiler.java b/src/main/java/org/apache/xpath/compiler/Compiler.java
index 7eb05d940..a7b15024b 100644
--- a/src/main/java/org/apache/xpath/compiler/Compiler.java
+++ b/src/main/java/org/apache/xpath/compiler/Compiler.java
@@ -286,6 +286,8 @@ public class Compiler extends OpMap
expr = xpathExprWithFuncCallSuffix(opPos); break;
case OpCodes.OP_CONTEXT_ITEM_WITH_PREDICATE :
expr = xpathContextItemWithPredicate(opPos); break;
+ case OpCodes.OP_XPATH_FUNC_CALL_EXTENDED_ARG :
+ expr = xpathExpressionFuncCallExtendedArg(opPos); break;
case OpCodes.OP_QUO:
error(XPATHErrorResources.ER_UNKNOWN_OPCODE, new Object[]{ "quo" });
break;
@@ -1657,7 +1659,15 @@ private static final boolean DEBUG = false;
*/
Expression xpathContextItemWithPredicate(int opPos) throws TransformerException
{
- return XPathParser.xpathContextItemWithPredicate;
+ return XPathParser.m_xpathContextItemWithPredicate;
+ }
+
+ /**
+ * Compile an XPath expression function call extended argument list.
+ */
+ Expression xpathExpressionFuncCallExtendedArg(int opPos) throws TransformerException
+ {
+ return XPathParser.m_xpathExprFuncCallExtendedArg;
}
/**
diff --git a/src/main/java/org/apache/xpath/compiler/OpCodes.java b/src/main/java/org/apache/xpath/compiler/OpCodes.java
index 1db0380c1..73bdf7d90 100644
--- a/src/main/java/org/apache/xpath/compiler/OpCodes.java
+++ b/src/main/java/org/apache/xpath/compiler/OpCodes.java
@@ -762,8 +762,10 @@ public class OpCodes
public static final int OP_XPATH_EXPR_WITH_FUNC_CALL_SUFFIX = 85;
public static final int OP_CONTEXT_ITEM_WITH_PREDICATE = 86;
+
+ public static final int OP_XPATH_FUNC_CALL_EXTENDED_ARG = 87;
/** The next free ID. Please keep this up to date. */
- private static final int NEXT_FREE_ID = 87;
+ private static final int NEXT_FREE_ID = 88;
}
diff --git a/src/main/java/org/apache/xpath/compiler/XPathParser.java b/src/main/java/org/apache/xpath/compiler/XPathParser.java
index 31870bf4a..f50d8800f 100644
--- a/src/main/java/org/apache/xpath/compiler/XPathParser.java
+++ b/src/main/java/org/apache/xpath/compiler/XPathParser.java
@@ -57,6 +57,7 @@ import org.apache.xpath.composite.SequenceTypeMapTest;
import org.apache.xpath.composite.SequenceTypeSupport;
import org.apache.xpath.composite.XPathArrayConstructor;
import org.apache.xpath.composite.XPathContextItemWithPredicate;
+import org.apache.xpath.composite.XPathExprFuncCallExtendedArg;
import org.apache.xpath.composite.XPathExprFunctionCallSuffix;
import org.apache.xpath.composite.XPathExprFunctionSuffix;
import org.apache.xpath.composite.XPathForExpr;
@@ -256,7 +257,9 @@ public class XPathParser
static XPathExprFunctionCallSuffix m_xpathExprWithFuncCallSuffix = null;
- static XPathContextItemWithPredicate xpathContextItemWithPredicate = null;
+ static XPathContextItemWithPredicate m_xpathContextItemWithPredicate = null;
+
+ static XPathExprFuncCallExtendedArg m_xpathExprFuncCallExtendedArg = null;
private String m_arrowOpRemainingXPathExprStr = null;
@@ -1818,7 +1821,7 @@ public class XPathParser
insertOp(opPos1, 2, OpCodes.OP_CONTEXT_ITEM_WITH_PREDICATE);
- xpathContextItemWithPredicate = new XPathContextItemWithPredicate();
+ m_xpathContextItemWithPredicate = new XPathContextItemWithPredicate();
consumeExpected('[');
StringBuffer xpathPredicateSuffixStrBuff = new StringBuffer();
@@ -1850,8 +1853,8 @@ public class XPathParser
xpathPredicateSuffixStr = prefixStr + suffixStr;
}
- xpathContextItemWithPredicate.setXPathPredicateSuffixExpr(xpathPredicateSuffixStr);
- xpathContextItemWithPredicate.setContextItemChar('.');
+ m_xpathContextItemWithPredicate.setXPathPredicateSuffixExpr(xpathPredicateSuffixStr);
+ m_xpathContextItemWithPredicate.setContextItemChar('.');
m_ops.setOp(opPos1 + OpMap.MAPINDEX_LENGTH,
m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos1);
@@ -4507,6 +4510,60 @@ public class XPathParser
else {
m_isParseSequenceTypeExprWithUserDefinedType = false;
}
+
+ if (tokenIs('(')) {
+ /**
+ * XPath parse of a possible function argument literal list suffix.
+ * This can handle an XPath function call syntax like prefix:func1(args1)(args2),
+ * where an XPath expression syntax prefix:func1(args1) returns a function item
+ * that can be called with it's required arguments (i.e, args2).
+ */
+
+ appendOp(2, OpCodes.OP_XPATH_FUNC_CALL_EXTENDED_ARG);
+
+ consumeExpected('(');
+
+ List<String> funcArgrgXPathExprStrList = new ArrayList<String>();
+
+ while (!tokenIs(')') && m_token != null)
+ {
+ if (tokenIs(','))
+ {
+ error(XPATHErrorResources.ER_FOUND_COMMA_BUT_NO_PRECEDING_ARG, null);
+ }
+
+ StringBuffer strBuff = new StringBuffer();
+ while (!(tokenIs(',') || tokenIs(')')) && m_token != null) {
+ strBuff.append(m_token);
+ nextToken();
+ }
+
+ String strValue = strBuff.toString();
+ if (strValue.length() > 0) {
+ funcArgrgXPathExprStrList.add(strValue);
+ }
+
+ if (!tokenIs(')'))
+ {
+ consumeExpected(',');
+
+ if (tokenIs(')'))
+ {
+ error(XPATHErrorResources.ER_FOUND_COMMA_BUT_NO_FOLLOWING_ARG, null);
+ }
+ }
+ }
+
+ m_xpathExprFuncCallExtendedArg = new XPathExprFuncCallExtendedArg();
+ if (funcArgrgXPathExprStrList.size() > 0) {
+ m_xpathExprFuncCallExtendedArg.setFunctionArgXPathExprStrList(funcArgrgXPathExprStrList);
+ }
+
+ consumeExpected(')');
+
+ m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH,
+ m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos);
+ }
m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH), OpCodes.ENDOP);
m_ops.setOp(OpMap.MAPINDEX_LENGTH,m_ops.getOp(OpMap.MAPINDEX_LENGTH) + 1);
diff --git a/src/main/java/org/apache/xpath/composite/XPathExprFuncCallExtendedArg.java b/src/main/java/org/apache/xpath/composite/XPathExprFuncCallExtendedArg.java
new file mode 100644
index 000000000..197830254
--- /dev/null
+++ b/src/main/java/org/apache/xpath/composite/XPathExprFuncCallExtendedArg.java
@@ -0,0 +1,77 @@
+/*
+ * 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.
+ */
+package org.apache.xpath.composite;
+
+import java.util.List;
+import java.util.Vector;
+
+import javax.xml.transform.TransformerException;
+
+import org.apache.xpath.Expression;
+import org.apache.xpath.ExpressionOwner;
+import org.apache.xpath.XPathContext;
+import org.apache.xpath.XPathVisitor;
+import org.apache.xpath.objects.XObject;
+
+/**
+ * A class definition providing support for XPath parse of
+ * function call syntax, like prefix:func1(args1)(args2). The
+ * list of string values within an object of this class, stores
+ * XPath expression strings for the function arguments args2.
+ *
+ * @author Mukul Gandhi <mu...@apache.org>
+ *
+ * @xsl.usage advanced
+ */
+public class XPathExprFuncCallExtendedArg extends Expression {
+
+ private static final long serialVersionUID = -5784911363958937383L;
+
+ private List<String> m_functionArgXPathExprStrList = null;
+
+ @Override
+ public void callVisitors(ExpressionOwner owner, XPathVisitor visitor) {
+ // NO OP
+ }
+
+ @Override
+ public XObject execute(XPathContext xctxt) throws TransformerException {
+ // NO OP
+ return null;
+ }
+
+ @Override
+ public void fixupVariables(Vector vars, int globalsSize) {
+ // NO OP
+ }
+
+ @Override
+ public boolean deepEquals(Expression expr) {
+ // NO OP
+ return false;
+ }
+
+ public List<String> getFunctionArgXPathExprStrList() {
+ return m_functionArgXPathExprStrList;
+ }
+
+ public void setFunctionArgXPathExprStrList(List<String> functionArgXPathExprStrList) {
+ this.m_functionArgXPathExprStrList = functionArgXPathExprStrList;
+ }
+
+}
diff --git a/src/main/java/org/apache/xpath/composite/XPathSequenceConstructor.java b/src/main/java/org/apache/xpath/composite/XPathSequenceConstructor.java
index f49241086..c899ad026 100644
--- a/src/main/java/org/apache/xpath/composite/XPathSequenceConstructor.java
+++ b/src/main/java/org/apache/xpath/composite/XPathSequenceConstructor.java
@@ -17,7 +17,6 @@
package org.apache.xpath.composite;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
import java.util.Vector;
@@ -224,16 +223,7 @@ public class XPathSequenceConstructor extends Expression {
}
else if (xpathExpr instanceof XSL3ConstructorOrExtensionFunction) {
XSL3ConstructorOrExtensionFunction xsl3ConstructorOrExtensionFunction = (XSL3ConstructorOrExtensionFunction)xpathExpr;
- XObject funcEvalResult = xsl3ConstructorOrExtensionFunction.execute(xctxt);
- String[] strParts = xpathExprStr.split("\\)\\(");
- if (strParts.length > 1) {
- String argStr = strParts[strParts.length - 1];
- argStr = argStr.substring(0, argStr.length() - 1);
- String[] argArray = argStr.split(",");
- funcEvalResult = m_xsl3FunctionService.evaluateXPathNamedFunctionReference((XPathNamedFunctionReference)funcEvalResult, Arrays.asList(argArray),
- prefixTable, m_vars, m_globals_size, getExpressionOwner(),
- xctxt);
- }
+ XObject funcEvalResult = xsl3ConstructorOrExtensionFunction.execute(xctxt);
resultSeq.add(funcEvalResult);
}
else {
diff --git a/src/main/java/org/apache/xpath/functions/FuncFunctionArity.java b/src/main/java/org/apache/xpath/functions/FuncFunctionArity.java
index 9317e554a..8b310cb8b 100644
--- a/src/main/java/org/apache/xpath/functions/FuncFunctionArity.java
+++ b/src/main/java/org/apache/xpath/functions/FuncFunctionArity.java
@@ -130,6 +130,37 @@ public class FuncFunctionArity extends FunctionDef1Arg
+ " not found.", srcLocator);
}
}
+ else if (arg0 instanceof XSL3ConstructorOrExtensionFunction) {
+ XSL3ConstructorOrExtensionFunction xsl3ConstructorOrExtensionFunction = (XSL3ConstructorOrExtensionFunction)arg0;
+ XObject xObj = xsl3ConstructorOrExtensionFunction.execute(xctxt);
+ if (xObj instanceof XPathNamedFunctionReference) {
+ XPathNamedFunctionReference xpathNamedFunctionReference = (XPathNamedFunctionReference)xObj;
+ String localName = xpathNamedFunctionReference.getFuncName();
+ String namespace = xpathNamedFunctionReference.getFuncNamespace();
+ Short arity = xpathNamedFunctionReference.getArity();
+ if ((FunctionTable.XPATH_BUILT_IN_FUNCS_NS_URI).equals(namespace) || (FunctionTable.XPATH_BUILT_IN_MATH_FUNCS_NS_URI).equals(namespace) ||
+ (FunctionTable.XPATH_BUILT_IN_MAP_FUNCS_NS_URI).equals(namespace) || (FunctionTable.XPATH_BUILT_IN_ARRAY_FUNCS_NS_URI).equals(namespace)) {
+ FunctionTable funcTable = xctxt.getFunctionTable();
+ Object funcId = funcTable.getFunctionId(localName);
+ if (funcId != null) {
+ Function function = funcTable.getFunction(Integer.valueOf(funcId.toString()));
+ List<Short> funcDefinedArity = Arrays.asList(function.getDefinedArity());
+ if (funcDefinedArity.contains(arity)) {
+ result = new XSInteger(String.valueOf(arity));
+ }
+ else {
+ throw new TransformerException("XPST0017 : An XSL function definition for function reference {"
+ + namespace + "}" + localName + "#" + arity + " not found.", srcLocator);
+ }
+ }
+ }
+ }
+ else if (xObj instanceof XPathInlineFunction) {
+ XPathInlineFunction xpathInlineFunction = (XPathInlineFunction)xObj;
+ List<InlineFunctionParameter> funcParamList = xpathInlineFunction.getFuncParamList();
+ result = new XSInteger(String.valueOf(funcParamList.size()));
+ }
+ }
else if (arg0 instanceof XPathInlineFunction) {
XPathInlineFunction xpathInlineFunction = (XPathInlineFunction)arg0;
List<InlineFunctionParameter> funcParamList = xpathInlineFunction.getFuncParamList();
@@ -140,8 +171,8 @@ public class FuncFunctionArity extends FunctionDef1Arg
}
/**
- * Method definition to get an XSL transformation's TransformerImpl
- * object instance within the current XSL transformation context.
+ * Method definition to get, an XSL transformation's TransformerImpl
+ * object instance available within the current XSL transformation context.
*
* @return TransformerImpl object instance
*/
diff --git a/src/main/java/org/apache/xpath/functions/FuncFunctionName.java b/src/main/java/org/apache/xpath/functions/FuncFunctionName.java
index 7e1f2f162..873ba8f5f 100644
--- a/src/main/java/org/apache/xpath/functions/FuncFunctionName.java
+++ b/src/main/java/org/apache/xpath/functions/FuncFunctionName.java
@@ -108,18 +108,30 @@ public class FuncFunctionName extends FunctionDef1Arg
}
else if (arg0 instanceof NodeTest) {
NodeTest nodeTest = (NodeTest)arg0;
-
+
result = getFunctionNameFromNodeTestExpr(nodeTest, srcLocator);
- }
- else if (arg0 instanceof XPathInlineFunction) {
+ }
+ else if (arg0 instanceof XSL3ConstructorOrExtensionFunction) {
+ XSL3ConstructorOrExtensionFunction xsl3ConstructorOrExtensionFunction = (XSL3ConstructorOrExtensionFunction)arg0;
+ XObject xObj = xsl3ConstructorOrExtensionFunction.execute(xctxt);
+ if (xObj instanceof XPathNamedFunctionReference) {
+ XPathNamedFunctionReference xpathNamedFunctionReference = (XPathNamedFunctionReference)xObj;
+
+ result = getFunctionNameFromNamedFuncRef(xpathNamedFunctionReference, funcTable, srcLocator);
+ }
+ else if (xObj instanceof XPathInlineFunction) {
+ result = new ResultSequence();
+ }
+ }
+ else if (arg0 instanceof XPathInlineFunction) {
result = new ResultSequence();
- }
- else {
+ }
+ else {
throw new javax.xml.transform.TransformerException("XPST0017 : An XPath function definition for the supplied function "
- + "reference not found.", srcLocator);
- }
-
- return result;
+ + "reference not found.", srcLocator);
+ }
+
+ return result;
}
/**
@@ -274,8 +286,8 @@ public class FuncFunctionName extends FunctionDef1Arg
StylesheetRoot stylesheetRoot = (StylesheetRoot)stylesheetRootNode;
ElemFunction elemFunction = XslTransformEvaluationHelper.getElemFunctionFromNodeTestExpression(
- nodeTest, stylesheetRoot.getTransformerImpl(),
- srcLocator);
+ nodeTest, stylesheetRoot.getTransformerImpl(),
+ srcLocator);
String funcNameRef = nodeTest.getLocalName();
String namespace = nodeTest.getNamespace();
int hashCharIdx = funcNameRef.indexOf('#');
diff --git a/src/main/java/org/apache/xpath/functions/XPathDynamicFunctionCall.java b/src/main/java/org/apache/xpath/functions/XPathDynamicFunctionCall.java
index c1beb2f57..e09f1a737 100644
--- a/src/main/java/org/apache/xpath/functions/XPathDynamicFunctionCall.java
+++ b/src/main/java/org/apache/xpath/functions/XPathDynamicFunctionCall.java
@@ -17,7 +17,6 @@
package org.apache.xpath.functions;
import java.util.Arrays;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -43,11 +42,8 @@ import org.apache.xpath.ExpressionOwner;
import org.apache.xpath.XPath;
import org.apache.xpath.XPathContext;
import org.apache.xpath.XPathVisitor;
-import org.apache.xpath.composite.SequenceTypeData;
-import org.apache.xpath.composite.SequenceTypeSupport;
import org.apache.xpath.composite.XPathNamedFunctionReference;
import org.apache.xpath.objects.ElemFunctionItem;
-import org.apache.xpath.objects.InlineFunctionParameter;
import org.apache.xpath.objects.ResultSequence;
import org.apache.xpath.objects.XMLNodeCursorImpl;
import org.apache.xpath.objects.XObject;
@@ -109,7 +105,6 @@ public class XPathDynamicFunctionCall extends Expression {
private XSL3FunctionService m_xsl3FunctionService = XSLFunctionBuilder.getXSLFunctionService();
-
/**
* Evaluate an XPath dynamic function call expression.
*/
@@ -160,12 +155,14 @@ public class XPathDynamicFunctionCall extends Expression {
}
if (functionRef instanceof XPathInlineFunction) {
- evalResult = evaluateXPathInlineFunction(xctxt, (XPathInlineFunction)functionRef, m_argList, prefixTable);
+ evalResult = m_xsl3FunctionService.evaluateXPathInlineFunction((XPathInlineFunction)functionRef, m_argList,
+ xctxt, prefixTable, m_vars, m_globals_size,
+ m_xpathVarList, m_funcRefVarName);
if ((evalResult instanceof XPathNamedFunctionReference) && (m_trailingArgList != null)) {
evalResult = m_xsl3FunctionService.evaluateXPathNamedFunctionReference((XPathNamedFunctionReference)evalResult, m_trailingArgList,
- prefixTable, m_vars, m_globals_size, getExpressionOwner(),
- xctxt);
+ prefixTable, m_vars, m_globals_size, getExpressionOwner(),
+ xctxt);
}
}
else if (functionRef instanceof XPathMap) {
@@ -526,7 +523,9 @@ public class XPathDynamicFunctionCall extends Expression {
}
if ((evalResult instanceof XPathInlineFunction) && (m_trailingArgList != null)) {
- evalResult = evaluateXPathInlineFunction(xctxt, (XPathInlineFunction)evalResult, m_trailingArgList, prefixTable);
+ evalResult = m_xsl3FunctionService.evaluateXPathInlineFunction((XPathInlineFunction)evalResult, m_trailingArgList,
+ xctxt, prefixTable, m_vars, m_globals_size,
+ m_xpathVarList, m_funcRefVarName);
}
return evalResult;
@@ -586,122 +585,6 @@ public class XPathDynamicFunctionCall extends Expression {
return evalResult;
}
- /**
- * Method definition to evaluate an XPath inline function reference.
- *
- * @param xctxt An XPath context object
- * @param xpathInlineFunction An XPath compiled inline function reference object
- * @param argList A list of XPath string values for argument information of
- * inline function reference.
- * @param prefixTable An XML prefix table list object reference containing
- * an XSL context namespace binding information.
- * @return The result of evaluation of an XPath inline function
- * reference.
- * @throws TransformerException
- */
- private XObject evaluateXPathInlineFunction(XPathContext xctxt, XPathInlineFunction xpathInlineFunction,
- List<String> argList, List<XMLNSDecl> prefixTable) throws TransformerException {
-
- XObject evalResult = null;
-
- Map<QName, XObject> inlineFunctionVarMap = xctxt.getXPathVarMap();
-
- SourceLocator srcLocator = xctxt.getSAXLocator();
-
- final int contextNode = xctxt.getCurrentNode();
-
- String inlineFnXPathStr = xpathInlineFunction.getFuncBodyXPathExprStr();
- List<InlineFunctionParameter> funcParamList = xpathInlineFunction.getFuncParamList();
-
- int argCount1 = argList.size();
-
- if (argCount1 != funcParamList.size()) {
- throw new javax.xml.transform.TransformerException("XPTY0004 : Number of arguments required for "
- + "XPath dynamic function call is " + funcParamList.size() + ". "
- + "Arguments provided : " + argCount1 + ".", srcLocator);
- }
-
- Map<QName, XObject> functionParamAndArgMap = new HashMap<QName, XObject>();
-
- for (int idx = 0; idx < funcParamList.size(); idx++) {
- InlineFunctionParameter funcParam = funcParamList.get(idx);
-
- String argXPathStr = argList.get(idx);
-
- if (prefixTable != null) {
- argXPathStr = XslTransformEvaluationHelper.replaceNsUrisWithPrefixesOnXPathStr(argXPathStr, prefixTable);
- }
-
- XPath argXPath = new XPath(argXPathStr, srcLocator, xctxt.getNamespaceContext(), XPath.SELECT, null);
- if (m_vars != null) {
- argXPath.fixupVariables(m_vars, m_globals_size);
- }
-
- XObject argValue = argXPath.execute(xctxt, contextNode, xctxt.getNamespaceContext());
-
- String funcParamName = funcParam.getParamName();
- SequenceTypeData paramType = funcParam.getParamType();
-
- if (paramType != null) {
- try {
- argValue = SequenceTypeSupport.castXdmValueToAnotherType(argValue, null, paramType, null);
- if (argValue == null) {
- throw new TransformerException("XTTE0505 : An item type of argument at position " + (idx + 1) + " of XPath dynamic "
- + "function call $" + m_funcRefVarName + ", "
- + "doesn't match an expected type.", srcLocator);
- }
- }
- catch (TransformerException ex) {
- throw new TransformerException("XTTE0505 : An item type of argument at position " + (idx + 1) + " of XPath dynamic "
- + "function call $" + m_funcRefVarName + ", "
- + "doesn't match an expected type.", srcLocator);
- }
- }
-
- m_xpathVarList.add(new QName(funcParamName));
-
- functionParamAndArgMap.put(new QName(funcParamName), argValue);
- }
-
- inlineFunctionVarMap.putAll(functionParamAndArgMap);
-
- if (prefixTable != null) {
- inlineFnXPathStr = XslTransformEvaluationHelper.replaceNsUrisWithPrefixesOnXPathStr(inlineFnXPathStr, prefixTable);
- }
-
- XPath inlineFnXPath = new XPath(inlineFnXPathStr, srcLocator, xctxt.getNamespaceContext(),
- XPath.SELECT, null);
- if (m_vars != null) {
- inlineFnXPath.fixupVariables(m_vars, m_globals_size);
- }
-
- evalResult = inlineFnXPath.execute(xctxt, contextNode, xctxt.getNamespaceContext());
-
- SequenceTypeData funcReturnType = xpathInlineFunction.getReturnType();
- if (funcReturnType != null) {
- try {
- evalResult = SequenceTypeSupport.castXdmValueToAnotherType(evalResult, null, funcReturnType, null);
- if (evalResult == null) {
- throw new TransformerException("XTTE0505 : An item type of result of dynamic function call $"+ m_funcRefVarName + ", "
- + "doesn't match an expected type.", srcLocator);
- }
- }
- catch (TransformerException ex) {
- throw new TransformerException("XTTE0505 : An item type of result of dynamic function call $"+ m_funcRefVarName + ", "
- + "doesn't match an expected type.", srcLocator);
- }
- }
-
- Set<QName> keysOfArgVariables = functionParamAndArgMap.keySet();
- Iterator<QName> iter = keysOfArgVariables.iterator();
- while (iter.hasNext()) {
- QName key = iter.next();
- inlineFunctionVarMap.remove(key);
- }
-
- return evalResult;
- }
-
/**
* Method definition to lookup an XDM map entry's value for the specified key.
*
diff --git a/src/main/java/org/apache/xpath/functions/XSL3ConstructorOrExtensionFunction.java b/src/main/java/org/apache/xpath/functions/XSL3ConstructorOrExtensionFunction.java
index c193b7fc2..16386aa95 100644
--- a/src/main/java/org/apache/xpath/functions/XSL3ConstructorOrExtensionFunction.java
+++ b/src/main/java/org/apache/xpath/functions/XSL3ConstructorOrExtensionFunction.java
@@ -356,5 +356,9 @@ public class XSL3ConstructorOrExtensionFunction extends Function
else
return m_extensionName;
}
+
+ public Vector getArgVector() {
+ return m_argVec;
+ }
}
diff --git a/src/main/java/org/apache/xpath/functions/XSL3FunctionService.java b/src/main/java/org/apache/xpath/functions/XSL3FunctionService.java
index ef4cf3faf..60994ec4d 100644
--- a/src/main/java/org/apache/xpath/functions/XSL3FunctionService.java
+++ b/src/main/java/org/apache/xpath/functions/XSL3FunctionService.java
@@ -24,7 +24,13 @@ import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
import java.util.Vector;
import javax.xml.XMLConstants;
@@ -33,6 +39,7 @@ import javax.xml.transform.TransformerException;
import org.apache.xalan.templates.Constants;
import org.apache.xalan.templates.ElemFunction;
+import org.apache.xalan.templates.ElemParam;
import org.apache.xalan.templates.ElemTemplate;
import org.apache.xalan.templates.ElemTemplateElement;
import org.apache.xalan.templates.StylesheetRoot;
@@ -54,9 +61,14 @@ import org.apache.xpath.XPathContext;
import org.apache.xpath.axes.SelfIteratorNoPredicate;
import org.apache.xpath.compiler.FunctionTable;
import org.apache.xpath.compiler.Keywords;
+import org.apache.xpath.composite.SequenceTypeData;
+import org.apache.xpath.composite.SequenceTypeSupport;
+import org.apache.xpath.composite.XPathExprFuncCallExtendedArg;
import org.apache.xpath.composite.XPathNamedFunctionReference;
+import org.apache.xpath.objects.InlineFunctionParameter;
import org.apache.xpath.objects.ResultSequence;
import org.apache.xpath.objects.XObject;
+import org.apache.xpath.objects.XPathInlineFunction;
import org.apache.xpath.types.XSBase64Binary;
import org.apache.xpath.types.XSByte;
import org.apache.xpath.types.XSGDay;
@@ -182,27 +194,120 @@ public class XSL3FunctionService {
}
TemplateList templateList = stylesheetRoot.getTemplateListComposed();
-
- int argCount = funcObj.getArgCount();
- ElemTemplate elemTemplate = templateList.getXslFunction(new QName(funcNamespace, funcName), argCount);
+
+ Vector argVector = funcObj.getArgVector();
+ int xslFuncArgCount = 0;
+ ResultSequence xslFuncArgSequence = new ResultSequence();
+ List<String> funcExtArgStrList = null;
+ for (int idx = 0; idx < argVector.size(); idx++) {
+ Expression argExpr = (Expression)(argVector.elementAt(idx));
+ if (!(argExpr instanceof XPathExprFuncCallExtendedArg)) {
+ XObject xslFuncArgVal = null;
+ if (!(argExpr instanceof XPathNamedFunctionReference)) {
+ xslFuncArgVal = argExpr.execute(xctxt);
+ }
+ else {
+ xslFuncArgVal = (XPathNamedFunctionReference)argExpr;
+ }
+ xslFuncArgSequence.add(xslFuncArgVal);
+ xslFuncArgCount++;
+ }
+ else {
+ XPathExprFuncCallExtendedArg xpathExprFuncCallExtendedArg = (XPathExprFuncCallExtendedArg)argExpr;
+ funcExtArgStrList = xpathExprFuncCallExtendedArg.getFunctionArgXPathExprStrList();
+ }
+ }
+
+ ElemTemplate elemTemplate = templateList.getXslFunction(new QName(funcNamespace, funcName), xslFuncArgCount);
if ((elemTemplate != null) && (elemTemplate instanceof ElemFunction)) {
- // Evaluate XSL stylesheet function call
- ResultSequence argSequence = new ResultSequence();
- for (int idx = 0; idx < funcObj.getArgCount(); idx++) {
- Expression argExpr = funcObj.getArg(idx);
- XObject argVal = null;
- if (!(argExpr instanceof XPathNamedFunctionReference)) {
- argVal = argExpr.execute(xctxt);
- }
- else {
- argVal = (XPathNamedFunctionReference)argExpr;
- }
+ // Evaluate XSL stylesheet function call
+ ElemFunction elemFunction = (ElemFunction)elemTemplate;
+
+ evalResult = elemFunction.evaluateXslFunction(transformerImpl, xslFuncArgSequence);
+
+ if ((evalResult instanceof XPathNamedFunctionReference) && (funcExtArgStrList != null)) {
+ XPathNamedFunctionReference xpathNamedFunctionReference = (XPathNamedFunctionReference)evalResult;
+ String localName = xpathNamedFunctionReference.getFuncName();
+ String namespace = xpathNamedFunctionReference.getFuncNamespace();
+ Short arity = xpathNamedFunctionReference.getArity();
+ if ((int)arity == funcExtArgStrList.size()) {
+ if ((FunctionTable.XPATH_BUILT_IN_FUNCS_NS_URI).equals(namespace) || (FunctionTable.XPATH_BUILT_IN_MATH_FUNCS_NS_URI).equals(namespace) ||
+ (FunctionTable.XPATH_BUILT_IN_MAP_FUNCS_NS_URI).equals(namespace) || (FunctionTable.XPATH_BUILT_IN_ARRAY_FUNCS_NS_URI).equals(namespace)) {
+ FunctionTable funcTable = xctxt.getFunctionTable();
+ Object funcId = funcTable.getFunctionId(localName);
+ if (funcId != null) {
+ Function function = funcTable.getFunction(Integer.valueOf(funcId.toString()));
+ List<Short> funcDefinedArity = Arrays.asList(function.getDefinedArity());
+ if (funcDefinedArity.contains(arity)) {
+ for (int idx = 0; idx < funcExtArgStrList.size(); idx++) {
+ String xpathExprStr = funcExtArgStrList.get(idx);
+ XPath argXPath = new XPath(xpathExprStr, srcLocator, xctxt.getNamespaceContext(), XPath.SELECT, null);
+ try {
+ function.setArg(argXPath.getExpression(), idx);
+ }
+ catch (WrongNumberArgsException ex) {
+ // NO OP
+ }
+ }
+
+ evalResult = function.execute(xctxt);
+ }
+ else {
+ throw new TransformerException("XPTY0004 : The function arity value specified in an XPath named "
+ + "function reference is " + arity + ", but the corresponding "
+ + "XPath function {" + namespace + "}" + localName + " doesn't allow this arity.", srcLocator);
+ }
+ }
+ else {
+ throw new TransformerException("XPTY0004 : The function {" + namespace + "}" + localName + " referred "
+ + "within an XPath expression is not found.", srcLocator);
+ }
+ }
+ }
+ else {
+ throw new TransformerException("XPTY0004 : The number of arguments provided during an XPath function call {" + namespace + "}" + localName
+ + " is " + funcExtArgStrList.size() + ", but the corresponding XPath named function "
+ + "reference specifies the function arity value as " + arity + ".", srcLocator);
+ }
+ }
+ else if ((evalResult instanceof XPathInlineFunction) && (funcExtArgStrList != null)) {
+ int paramIdx = 0;
+ Map<QName, XObject> xpathVarMap = xctxt.getXPathVarMap();
+ for (ElemTemplateElement elem = elemFunction.getFirstChildElem(); elem != null;
+ elem = elem.getNextSiblingElem()) {
+ if (elem.getXSLToken() == Constants.ELEMNAME_PARAMVARIABLE) {
+ ElemParam elemParam = (ElemParam)elem;
+ QName paramName = elemParam.getName();
+ XObject argValue = xslFuncArgSequence.item(paramIdx);
+ xpathVarMap.put(paramName, argValue);
+ paramIdx++;
+ }
+ else {
+ break;
+ }
+ }
+
+ XPathInlineFunction xpathInlineFunction = (XPathInlineFunction)evalResult;
- argSequence.add(argVal);
+ List<String> xpathInlineFuncArgList = new ArrayList<String>();
+ for (int idx = 0; idx < funcExtArgStrList.size(); idx++) {
+ String xpathExprStr = funcExtArgStrList.get(idx);
+ xpathInlineFuncArgList.add(xpathExprStr);
+ }
+
+ List<XMLNSDecl> prefixTable = null;
+ ElemTemplateElement elemTemplateElement = (ElemTemplateElement)xctxt.getNamespaceContext();
+
+ if (elemTemplateElement != null) {
+ prefixTable = (List<XMLNSDecl>)elemTemplateElement.getPrefixTable();
+ }
+
+ // REVISIT, for the first null argument & an argument 0
+ evalResult = evaluateXPathInlineFunction(xpathInlineFunction, xpathInlineFuncArgList,
+ xctxt, prefixTable, null, 0,
+ ((Expression)xpathExpr).getXPathVarList(), null);
}
-
- evalResult = ((ElemFunction)elemTemplate).evaluateXslFunction(transformerImpl, argSequence);
return evalResult;
}
@@ -1025,6 +1130,155 @@ public class XSL3FunctionService {
return result;
}
+ /**
+ * Method definition to evaluate an XPath inline function expression.
+ *
+ * @param xpathInlineFunction An XPath compiled inline function reference object
+ * @param argList A list of XPath string values for argument information of
+ * inline function reference.
+ * @param xctxt An XPath context object
+ * @param prefixTable An XML prefix table list object reference containing
+ * an XSL context namespace binding information.
+ * @param varVector Collection of variable names within an XSL current evaluation
+ * context.
+ * @param varGlobalSize An integer value to resolve variable names within an XSL
+ * current evaluation context.
+ * @param xpathVarList List of variable names to support resolving XSL run-time
+ * XPath expression evaluation.
+ * @param xslDynFuncCallVarName If this method is called to evaluate an XPath dynamic
+ * function call, this argument contains name of the variable
+ * referring to an XPath function that will be called.
+ *
+ * @return The result of evaluation of an XPath inline function expression.
+ * @throws TransformerException
+ */
+ public XObject evaluateXPathInlineFunction(XPathInlineFunction xpathInlineFunction, List<String> argList,
+ XPathContext xctxt, List<XMLNSDecl> prefixTable, Vector varVector,
+ int varGlobalSize, List<QName> xpathVarList, String xslDynFuncCallVarName) throws TransformerException {
+
+ XObject evalResult = null;
+
+ Map<QName, XObject> inlineFunctionVarMap = xctxt.getXPathVarMap();
+
+ SourceLocator srcLocator = xctxt.getSAXLocator();
+
+ final int contextNode = xctxt.getCurrentNode();
+
+ String inlineFnXPathStr = xpathInlineFunction.getFuncBodyXPathExprStr();
+ List<InlineFunctionParameter> funcParamList = xpathInlineFunction.getFuncParamList();
+
+ int argCount1 = argList.size();
+
+ if (argCount1 != funcParamList.size()) {
+ throw new javax.xml.transform.TransformerException("XPTY0004 : Number of arguments required for "
+ + "XPath dynamic function call is " + funcParamList.size() + ". "
+ + "Arguments provided : " + argCount1 + ".", srcLocator);
+ }
+
+ Map<QName, XObject> functionParamAndArgMap = new HashMap<QName, XObject>();
+
+ for (int idx = 0; idx < funcParamList.size(); idx++) {
+ InlineFunctionParameter funcParam = funcParamList.get(idx);
+
+ String argXPathStr = argList.get(idx);
+
+ if (prefixTable != null) {
+ argXPathStr = XslTransformEvaluationHelper.replaceNsUrisWithPrefixesOnXPathStr(argXPathStr, prefixTable);
+ }
+
+ XPath argXPath = new XPath(argXPathStr, srcLocator, xctxt.getNamespaceContext(), XPath.SELECT, null);
+ if (varVector != null) {
+ argXPath.fixupVariables(varVector, varGlobalSize);
+ }
+
+ XObject argValue = argXPath.execute(xctxt, contextNode, xctxt.getNamespaceContext());
+
+ String funcParamName = funcParam.getParamName();
+ SequenceTypeData paramType = funcParam.getParamType();
+
+ if (paramType != null) {
+ try {
+ argValue = SequenceTypeSupport.castXdmValueToAnotherType(argValue, null, paramType, null);
+ if (argValue == null) {
+ if (xslDynFuncCallVarName != null) {
+ throw new TransformerException("XTTE0505 : An item type of argument at position " + (idx + 1) + " of XPath dynamic "
+ + "function call $" + xslDynFuncCallVarName + ", "
+ + "doesn't match an expected type.", srcLocator);
+ }
+ else {
+ throw new TransformerException("XTTE0505 : An item type of argument at position " + (idx + 1) + " of an XPath "
+ + "function call, doesn't match an expected type.", srcLocator);
+ }
+ }
+ }
+ catch (TransformerException ex) {
+ if (xslDynFuncCallVarName != null) {
+ throw new TransformerException("XTTE0505 : An item type of argument at position " + (idx + 1) + " of XPath dynamic "
+ + "function call $" + xslDynFuncCallVarName + ", "
+ + "doesn't match an expected type.", srcLocator);
+ }
+ else {
+ throw new TransformerException("XTTE0505 : An item type of argument at position " + (idx + 1) + " of an XPath "
+ + "function call, doesn't match an expected type.", srcLocator);
+ }
+ }
+ }
+
+ xpathVarList.add(new QName(funcParamName));
+
+ functionParamAndArgMap.put(new QName(funcParamName), argValue);
+ }
+
+ inlineFunctionVarMap.putAll(functionParamAndArgMap);
+
+ if (prefixTable != null) {
+ inlineFnXPathStr = XslTransformEvaluationHelper.replaceNsUrisWithPrefixesOnXPathStr(inlineFnXPathStr, prefixTable);
+ }
+
+ XPath inlineFnXPath = new XPath(inlineFnXPathStr, srcLocator, xctxt.getNamespaceContext(), XPath.SELECT, null);
+ if (varVector != null) {
+ inlineFnXPath.fixupVariables(varVector, varGlobalSize);
+ }
+
+ evalResult = inlineFnXPath.execute(xctxt, contextNode, xctxt.getNamespaceContext());
+
+ SequenceTypeData funcReturnType = xpathInlineFunction.getReturnType();
+ if (funcReturnType != null) {
+ try {
+ evalResult = SequenceTypeSupport.castXdmValueToAnotherType(evalResult, null, funcReturnType, null);
+ if (evalResult == null) {
+ if (xslDynFuncCallVarName != null) {
+ throw new TransformerException("XTTE0505 : An item type of result of dynamic function call $"+ xslDynFuncCallVarName + ", "
+ + "doesn't match an expected type.", srcLocator);
+ }
+ else {
+ throw new TransformerException("XTTE0505 : An item type of result of an XPath function call, doesn't match "
+ + "an expected type.", srcLocator);
+ }
+ }
+ }
+ catch (TransformerException ex) {
+ if (xslDynFuncCallVarName != null) {
+ throw new TransformerException("XTTE0505 : An item type of result of dynamic function call $"+ xslDynFuncCallVarName + ", "
+ + "doesn't match an expected type.", srcLocator);
+ }
+ else {
+ throw new TransformerException("XTTE0505 : An item type of result of an XPath function call, doesn't match "
+ + "an expected type.", srcLocator);
+ }
+ }
+ }
+
+ Set<QName> keysOfArgVariables = functionParamAndArgMap.keySet();
+ Iterator<QName> iter = keysOfArgVariables.iterator();
+ while (iter.hasNext()) {
+ QName key = iter.next();
+ inlineFunctionVarMap.remove(key);
+ }
+
+ return evalResult;
+ }
+
/**
* Evaluate the XPath built-in constructor function call.
*/
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 b307040bc..97a136648 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
@@ -97,6 +97,8 @@ public class W3CXslTransformTestsUtil extends XslTransformTestsUtil {
private static final String EXPECTED_NODE_KIND_ASSERT_ALL_OF = "all-of";
+ private static final String EXPECTED_NODE_KIND_ASSERT_ANY_OF = "any-of";
+
private static final String EXPECTED_NODE_KIND_ASSERT = "assert";
private static final String EXPECTED_NODE_KIND_ASSERT_XML = "assert-xml";
@@ -250,8 +252,8 @@ public class W3CXslTransformTestsUtil extends XslTransformTestsUtil {
StreamSource xsltStreamSrc = new StreamSource(xslStylesheetUriStr);
try {
- runW3CXSLTTestSuiteXslTransformAndProduceResult(testCaseName, xmlInpDomSource, xsltStreamSrc,
- expectedResultElem, elemTestRun, testResultDoc);
+ runW3CXSLTTestSuiteXslTransformAndEmitResult(testCaseName, xmlInpDomSource, xsltStreamSrc,
+ expectedResultElem, elemTestRun, testResultDoc);
}
catch (Exception ex) {
System.out.println("Test case name : " + testCaseName + ", Exception message : " + ex.getMessage());
@@ -311,10 +313,10 @@ public class W3CXslTransformTestsUtil extends XslTransformTestsUtil {
}
/**
- * This method definition runs one W3C XSLT 3.0 test case within a test set,
- * on Xalan-J's XSLT 3 implementation.
+ * Method definition to run, one W3C XSLT 3.0 test case within a test set,
+ * using Xalan-J's XSLT 3 implementation.
*/
- private void runW3CXSLTTestSuiteXslTransformAndProduceResult(String testCaseName, DOMSource xmlInpDomSource,
+ private void runW3CXSLTTestSuiteXslTransformAndEmitResult(String testCaseName, DOMSource xmlInpDomSource,
StreamSource xsltStreamSrc, Element expectedResultElem,
Element elemTestRun, Document testResultDoc) throws Exception {
@@ -339,6 +341,7 @@ public class W3CXslTransformTestsUtil extends XslTransformTestsUtil {
Node nodeExpected = (expectedResultElem.getFirstChild()).getNextSibling();
String expectedNodeKindName = nodeExpected.getNodeName();
+
if (EXPECTED_NODE_KIND_ERROR.equals(expectedNodeKindName)) {
expErrCodeName = ((Element)nodeExpected).getAttribute("code");
}
@@ -393,7 +396,24 @@ public class W3CXslTransformTestsUtil extends XslTransformTestsUtil {
else {
testCaseExpectedAssertXPathList(elemTestResult, nodeExpected, resultStrWriter);
}
- }
+ }
+ else if (EXPECTED_NODE_KIND_ASSERT_ANY_OF.equals(expectedNodeKindName)) {
+ Node childNode = nodeExpected.getFirstChild();
+ while (childNode != null) {
+ if ((childNode instanceof Element) && EXPECTED_NODE_KIND_ASSERT_XML.equals(((Element)childNode).getNodeName())) {
+ String xmlStr1 = ((Element)childNode).getTextContent();
+ String xmlStr2 = resultStrWriter.toString();
+ if (isTwoXmlHtmlStrEqual(xmlStr1, xmlStr2)) {
+ elemTestResult.setAttribute("status", "pass");
+ break;
+ }
+ else {
+ elemTestResult.setAttribute("status", "fail");
+ }
+ }
+ childNode = childNode.getNextSibling();
+ }
+ }
else if (EXPECTED_NODE_KIND_ASSERT_XML.equals(expectedNodeKindName)) {
Element elemNode = (Element)nodeExpected;
String fileName = elemNode.getAttribute(FILE_ATTR);
@@ -407,14 +427,13 @@ public class W3CXslTransformTestsUtil extends XslTransformTestsUtil {
expectedResultStr = elemNode.getTextContent();
}
- Document xmlInpDoc1 = m_xmlDocumentBuilder.parse(new ByteArrayInputStream((resultStrWriter.toString()).getBytes()));
- String str1 = serializeXmlDomElementNode(xmlInpDoc1);
+ Document xmlInpDoc1 = m_xmlDocumentBuilder.parse(new ByteArrayInputStream((resultStrWriter.toString()).getBytes()));
+ String xmlHtmlStr1 = serializeXmlDomElementNode(xmlInpDoc1);
Document xmlInpDoc2 = m_xmlDocumentBuilder.parse(new ByteArrayInputStream((expectedResultStr).getBytes()));
+ String xmlHtmlStr2 = serializeXmlDomElementNode(xmlInpDoc2);
- String str2 = serializeXmlDomElementNode(xmlInpDoc2);
-
- if (isTwoXmlHtmlStrEqual(str1, str2)) {
+ if (isTwoXmlHtmlStrEqual(xmlHtmlStr1, xmlHtmlStr2)) {
elemTestResult.setAttribute("status", "pass");
}
else {
@@ -435,8 +454,9 @@ public class W3CXslTransformTestsUtil extends XslTransformTestsUtil {
}
Document xmlInpDoc1 = m_xmlDocumentBuilder.parse(new ByteArrayInputStream((resultStrWriter.toString()).getBytes()));
- String str1 = serializeXmlDomElementNode(xmlInpDoc1);
- StringReader strReader = new StringReader(str1);
+ String xmlStr1 = serializeXmlDomElementNode(xmlInpDoc1);
+
+ StringReader strReader = new StringReader(xmlStr1);
XPathFactoryImpl xpathFactory = new XPathFactoryImpl();
XPath xpath = xpathFactory.newXPath();
@@ -536,10 +556,12 @@ public class W3CXslTransformTestsUtil extends XslTransformTestsUtil {
transformer.transform(new DOMSource(documentToBeTransformed), new StreamResult(strWriter));
Document xmlInpDoc1 = m_xmlDocumentBuilder.parse(new ByteArrayInputStream((strWriter.toString()).getBytes()));
- String str1 = serializeXmlDomElementNode(xmlInpDoc1);
- String str2 = serializeXmlDomElementNode(expectedResultDoc);
+
+ String xmlStr1 = serializeXmlDomElementNode(xmlInpDoc1);
+
+ String xmlStr2 = serializeXmlDomElementNode(expectedResultDoc);
- if (isTwoXmlHtmlStrEqual(str1, str2)) {
+ if (isTwoXmlHtmlStrEqual(xmlStr1, xmlStr2)) {
elemTestResult.setAttribute("status", "pass");
}
else {
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 9d882fc29..aa896f913 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-06-30T12:04:16Z" fail="53" name="as" pass="51" skipped="4" statusUnknown="1" totalRun="109">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:45Z" fail="53" name="as" pass="51" skipped="4" statusUnknown="1" totalRun="109">
<testResult status="pass" testName="as-0101"/>
<testResult status="pass" testName="as-0102"/>
<testResult status="pass" testName="as-0103"/>
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 b735d8d5a..91defede0 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-06-30T12:04:19Z" fail="14" name="avt" pass="21" skipped="0" statusUnknown="0" totalRun="35">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:46Z" 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 b0fd95f43..878e7d233 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-06-30T12:04:20Z" fail="65" name="match" pass="59" skipped="8" statusUnknown="5" totalRun="137">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:47Z" fail="65" name="match" pass="59" skipped="8" statusUnknown="5" totalRun="137">
<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 df6fef004..4e4f0d62d 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,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-06-30T12:04:23Z" fail="7" name="select" pass="16" skipped="0" statusUnknown="2" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:47Z" fail="7" name="select" pass="16" skipped="0" statusUnknown="2" totalRun="25">
<testResult status="pass" testName="select-0101"/>
<testResult status="pass" testName="select-0102"/>
<testResult status="fail" testName="select-0201"/>
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 6ce05aa5b..f88d3a0cb 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-06-30T12:04:40Z" fail="7" name="attribute-set" pass="41" skipped="1" statusUnknown="1" totalRun="50">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:53Z" fail="8" name="attribute-set" pass="41" skipped="1" statusUnknown="0" totalRun="50">
<testResult status="pass" testName="attribute-set-0101"/>
<testResult status="fail" testName="attribute-set-0102">
<outResult/>
@@ -6,7 +6,7 @@
<testResult status="pass" testName="attribute-set-0104"/>
<testResult status="pass" testName="attribute-set-0105"/>
<testResult status="skipped" xsltVersion="2.0 only"/>
- <testResult testName="attribute-set-0106a"/>
+ <testResult status="fail" testName="attribute-set-0106a"/>
<testResult status="pass" testName="attribute-set-0107"/>
<testResult status="fail" testName="attribute-set-0108">
<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 a3957e6f9..05878dd40 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-06-30T12:04:40Z" fail="12" name="character-map" pass="15" skipped="0" statusUnknown="2" totalRun="29">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:53Z" fail="12" name="character-map" pass="15" skipped="0" statusUnknown="2" totalRun="29">
<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 56c627968..613dac7a4 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,10 +1,10 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-06-30T12:04:38Z" fail="36" name="function" pass="24" skipped="4" statusUnknown="6" totalRun="70">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:53Z" fail="38" name="function" pass="26" skipped="4" statusUnknown="2" totalRun="70">
<testResult status="fail" testName="function-0001">
<outResult/>
</testResult>
<testResult status="pass" testName="function-0002"/>
- <testResult testName="function-0003"/>
- <testResult status="fail" testName="function-0004"/>
+ <testResult status="pass" testName="function-0003"/>
+ <testResult status="pass" testName="function-0004"/>
<testResult status="pass" testName="function-0101"/>
<testResult status="pass" testName="function-0102"/>
<testResult status="pass" testName="function-0103"/>
@@ -76,7 +76,7 @@
</testResult>
<testResult status="fail" testName="function-1007"/>
<testResult status="fail" testName="function-1009"/>
- <testResult testName="function-1011"/>
+ <testResult status="fail" testName="function-1011"/>
<testResult status="pass" testName="function-1012"/>
<testResult status="fail" testName="function-1013"/>
<testResult status="fail" testName="function-1014"/>
@@ -86,8 +86,8 @@
<errTrace>java.lang.RuntimeException: ElemTemplateElement error: Found more than one XSL stylesheet function named: x:test with arity 1</errTrace>
</outResult>
</testResult>
- <testResult testName="function-1017"/>
- <testResult testName="function-1018"/>
+ <testResult status="fail" testName="function-1017"/>
+ <testResult status="fail" testName="function-1018"/>
<testResult testName="function-1019"/>
<testResult status="pass" testName="function-1020"/>
<testResult status="fail" testName="function-1021">
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 433c79a10..1913fa653 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-06-30T12:04:14Z" fail="3" name="variable" pass="16" skipped="0" statusUnknown="1" totalRun="20">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:44Z" 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 e6e21951b..124944657 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-06-30T12:04:41Z" fail="28" name="axes" pass="173" skipped="0" statusUnknown="0" totalRun="201">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:54Z" fail="28" name="axes" pass="173" skipped="0" statusUnknown="0" totalRun="201">
<testResult status="pass" testName="axes-001"/>
<testResult status="pass" testName="axes-002"/>
<testResult status="pass" testName="axes-003"/>
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 cb5882439..1221efa52 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-06-30T12:04:46Z" fail="5" name="castable" pass="4" skipped="0" statusUnknown="0" totalRun="9">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:54Z" 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 1784e02fb..e733d0973 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-06-30T12:04:46Z" fail="0" name="expression" pass="9" skipped="0" statusUnknown="1" totalRun="10">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:54Z" 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 7484a965a..bc75f515f 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-06-30T12:04:46Z" fail="2" name="for" pass="1" skipped="0" statusUnknown="1" totalRun="4">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:55Z" 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 fac6846ee..b7ea6bb41 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-06-30T12:04:52Z" 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-02T12:31:57Z" 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 6a518a073..0e9bfe3fc 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-06-30T12:04:48Z" fail="39" name="math" pass="108" skipped="0" statusUnknown="1" totalRun="148">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:56Z" 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 f8f2ea821..4d0b8c835 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-06-30T12:04:51Z" fail="36" name="nodetest" pass="2" skipped="0" statusUnknown="0" totalRun="38">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:57Z" 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 dd5a06d78..164bab238 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-06-30T12:04:51Z" fail="3" name="path" pass="7" skipped="0" statusUnknown="0" totalRun="10">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:57Z" 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 e8d17c4f9..937481c4d 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-06-30T12:04:53Z" fail="7" name="predicate" pass="50" skipped="0" statusUnknown="0" totalRun="57">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:58Z" 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 54e4c2ed8..0f1fc1961 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-06-30T12:06:36Z" fail="0" name="deep-equal" pass="2" skipped="0" statusUnknown="0" totalRun="2">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:33:39Z" 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 9b2067713..55f36d442 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-06-30T12:06:42Z" fail="33" name="format-number" pass="37" skipped="4" statusUnknown="0" totalRun="74">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:33:41Z" fail="33" name="format-number" pass="37" skipped="4" statusUnknown="0" totalRun="74">
<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 a794b0470..0f9a9de8f 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-06-30T12:06:41Z" fail="3" name="key" pass="21" skipped="0" statusUnknown="1" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:33:40Z" 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 6d817f796..6c8036ffd 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-06-30T12:06:37Z" fail="11" name="position" pass="126" skipped="0" statusUnknown="1" totalRun="138">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:33:39Z" 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 6dd797804..deaa4f9c3 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,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-06-30T12:06:40Z" fail="4" name="root" pass="6" skipped="0" statusUnknown="0" totalRun="10">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:33:40Z" fail="4" name="root" pass="6" skipped="0" statusUnknown="0" totalRun="10">
<testResult status="fail" testName="root-0101"/>
<testResult status="fail" testName="root-0102"/>
<testResult status="pass" testName="root-0103"/>
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 f308f9e42..edac6844a 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-06-30T12:06:39Z" fail="17" name="analyze-string" pass="36" skipped="5" statusUnknown="0" totalRun="58">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:33:40Z" fail="17" name="analyze-string" pass="36" skipped="5" statusUnknown="0" totalRun="58">
<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 997825ae4..13538cbe2 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-06-30T12:04:24Z" fail="29" name="apply-templates" pass="19" skipped="2" statusUnknown="0" totalRun="50">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:47Z" fail="29" name="apply-templates" pass="19" skipped="2" statusUnknown="0" totalRun="50">
<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 b0e16285c..39288ec0c 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-06-30T12:04:27Z" fail="21" name="attribute" pass="8" skipped="0" statusUnknown="1" totalRun="30">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:48Z" 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 c5f7f7297..036c6a599 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-06-30T12:04:28Z" fail="14" name="call-template" pass="27" skipped="1" statusUnknown="0" totalRun="42">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:48Z" fail="14" name="call-template" pass="27" skipped="1" statusUnknown="0" totalRun="42">
<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 56af1b534..ac6e9ddfe 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-06-30T12:04:29Z" fail="6" name="choose" pass="17" skipped="0" statusUnknown="1" totalRun="24">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:49Z" 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 06165cc1b..9dd5c99aa 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-06-30T12:04:31Z" fail="43" name="copy" pass="16" skipped="0" statusUnknown="1" totalRun="60">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:50Z" 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"/>
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 ff739dc94..5adbf19ca 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-06-30T12:04:36Z" fail="18" name="element" pass="11" skipped="0" statusUnknown="0" totalRun="29">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:53Z" 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 bdd47fc2a..2ac016391 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-06-30T12:04:25Z" fail="27" name="for-each-group" pass="46" skipped="4" statusUnknown="1" totalRun="78">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:47Z" fail="27" name="for-each-group" pass="46" skipped="4" statusUnknown="1" totalRun="78">
<testResult status="pass" testName="for-each-group-001"/>
<testResult status="skipped" xsltVersion="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 a6319cafd..600e93a29 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-06-30T12:04:33Z" fail="32" name="iterate" pass="11" skipped="0" statusUnknown="1" totalRun="44">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:51Z" fail="32" name="iterate" pass="11" skipped="0" statusUnknown="1" totalRun="44">
<testResult status="pass" testName="iterate-001"/>
<testResult status="pass" testName="iterate-002"/>
<testResult status="pass" testName="iterate-003"/>
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 1bb29f54d..d7ac55322 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-06-30T12:04:34Z" fail="19" name="sequence" pass="7" skipped="0" statusUnknown="1" totalRun="27">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:51Z" fail="19" name="sequence" pass="7" 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 667db0653..fa7b24a24 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-06-30T12:04:36Z" fail="44" name="sort" pass="35" skipped="0" statusUnknown="1" totalRun="80">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:53Z" fail="44" name="sort" pass="35" skipped="0" statusUnknown="1" 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 389810de5..8ed757536 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-06-30T12:04:27Z" fail="26" name="try" pass="11" skipped="5" statusUnknown="0" totalRun="42">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:48Z" fail="26" name="try" pass="11" skipped="5" statusUnknown="0" totalRun="42">
<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 206b9725c..5d97be330 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,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-06-30T12:06:44Z" fail="13" name="xsl-document" pass="12" skipped="0" statusUnknown="0" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:33:41Z" 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>
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 c1ac6bdb2..5756051ef 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-06-30T12:06:43Z" fail="12" name="regex" pass="33" skipped="0" statusUnknown="0" totalRun="45">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:33:41Z" 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 5149920a7..1178638e2 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-06-30T12:04:54Z" fail="24" name="boolean" pass="88" skipped="0" statusUnknown="0" totalRun="112">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:58Z" 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 a3fd262ba..5637e9e43 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-06-30T12:04:59Z" fail="47" name="date" pass="37" skipped="0" statusUnknown="1" totalRun="85">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:58Z" 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 8ce193297..8848d7a16 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-06-30T12:04:56Z" fail="17" name="node" pass="15" skipped="0" statusUnknown="0" totalRun="32">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:58Z" 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 ef5ac2e77..5642d7e25 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-06-30T12:04:56Z" fail="8" name="string" pass="128" skipped="0" statusUnknown="0" totalRun="136">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-02T12:31:58Z" 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 e96cb24a0..8683f794f 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,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<testResult dateTime="2025-06-30T12:07:05Z" desc="W3C XSLT 3.0 test suite results" fail="791" pass="1364" skipped="38" success="63.01%" totalRun="2225" xslt_processor="Xalan-J XSLT 3.0 development code">
+<testResult dateTime="2025-07-02T12:41:39Z" desc="W3C XSLT 3.0 test suite results" fail="794" pass="1366" skipped="38" success="63.1%" totalRun="2225" xslt_processor="Xalan-J XSLT 3.0 development code">
<attr>
<as fail="53" pass="51" skipped="4" success="50.46%" totalRun="109"/>
<avt fail="14" pass="21" skipped="0" success="60.0%" totalRun="35"/>
@@ -7,9 +7,9 @@
<select fail="7" pass="16" skipped="0" success="64.0%" totalRun="25"/>
</attr>
<decl>
- <attribute-set fail="7" pass="41" skipped="1" success="84.0%" totalRun="50"/>
+ <attribute-set fail="8" pass="41" skipped="1" success="84.0%" totalRun="50"/>
<character-map fail="12" pass="15" skipped="0" success="51.72%" totalRun="29"/>
- <function fail="36" pass="24" skipped="4" success="40.0%" totalRun="70"/>
+ <function fail="38" pass="26" skipped="4" success="42.86%" totalRun="70"/>
<variable fail="3" pass="16" skipped="0" success="80.0%" totalRun="20"/>
</decl>
<expr>
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xalan.apache.org
For additional commands, e-mail: commits-help@xalan.apache.org