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 2023/10/22 14:02:39 UTC

[xalan-java] branch xalan-j_xslt3.0 updated: committing enhancements to xs:dateTime data type's implementation, and adding few new working test cases for xs:dateTime data type's arithmetic. also modifying the NOTICE.txt file, mentioning details of few implementation dependencies on this xalanj 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
in repository https://gitbox.apache.org/repos/asf/xalan-java.git


The following commit(s) were added to refs/heads/xalan-j_xslt3.0 by this push:
     new 996c6364 committing enhancements to xs:dateTime data type's implementation, and adding few new working test cases for xs:dateTime data type's arithmetic. also modifying the NOTICE.txt file, mentioning details of few implementation dependencies on this xalanj dev repos branch.
     new b05bbf24 Merge pull request #108 from mukulga/xalan-j_xslt3.0_mukul
996c6364 is described below

commit 996c6364ca7304b9e7ee7d6a47f309ebeb018d98
Author: Mukul Gandhi <ga...@gmail.com>
AuthorDate: Sun Oct 22 19:09:40 2023 +0530

    committing enhancements to xs:dateTime data type's implementation, and adding few new working test cases for xs:dateTime data type's arithmetic. also modifying the NOTICE.txt file, mentioning details of few implementation dependencies on this xalanj dev repos branch.
---
 ...org.eclipse.wst.xml.xpath2.processor_1.2.1.html | 258 +++++++++++++++++++++
 NOTICE.txt                                         |  14 +-
 src/org/apache/xpath/compiler/XPathParser.java     |   7 +-
 .../xalan/xpath3/XsDateTimeArithmeticTests.java    |  93 ++++++++
 tests/org/apache/xalan/xslt3/Xsl3TestSuite1.java   |   3 +-
 tests/xs_dateTime_arithmetic/gold/test1.out        |   5 +
 tests/xs_dateTime_arithmetic/gold/test2.out        |   5 +
 tests/xs_dateTime_arithmetic/gold/test3.out        |   5 +
 tests/xs_dateTime_arithmetic/gold/test4.out        |   4 +
 tests/xs_dateTime_arithmetic/test1.xsl             |  82 +++++++
 tests/xs_dateTime_arithmetic/test1_a.xml           |   6 +
 tests/xs_dateTime_arithmetic/test2.xsl             |  84 +++++++
 tests/xs_dateTime_arithmetic/test3.xsl             |  82 +++++++
 tests/xs_dateTime_arithmetic/test4.xsl             |  58 +++++
 14 files changed, 701 insertions(+), 5 deletions(-)

diff --git a/LICENSE.org.eclipse.wst.xml.xpath2.processor_1.2.1.html b/LICENSE.org.eclipse.wst.xml.xpath2.processor_1.2.1.html
new file mode 100644
index 00000000..832a9d44
--- /dev/null
+++ b/LICENSE.org.eclipse.wst.xml.xpath2.processor_1.2.1.html
@@ -0,0 +1,258 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+
+
+
+
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+  body {
+    size: 8.5in 11.0in;
+    margin: 0.25in 0.5in 0.25in 0.5in;
+    tab-interval: 0.5in;
+    }
+  p {  	
+    margin-left: auto;
+    margin-top:  0.5em;
+    margin-bottom: 0.5em;
+    }
+  p.list {
+  	margin-left: 0.5in;
+    margin-top:  0.05em;
+    margin-bottom: 0.05em;
+    }
+  </style>
+
+</head><body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>"Contribution" means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>"Contributor" means any person or entity that distributes
+the Program.</p>
+
+<p>"Licensed Patents" mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>"Program" means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>"Recipient" means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and
+indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses")
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+</body></html>
\ No newline at end of file
diff --git a/NOTICE.txt b/NOTICE.txt
index 5c9ce77c..7711900b 100644
--- a/NOTICE.txt
+++ b/NOTICE.txt
@@ -67,7 +67,16 @@
      - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
      - voluntary contributions made by Paul Eng on behalf of the 
        Apache Software Foundation that were originally developed at iClick, Inc.,
-       software copyright (c) 1999.    
+       software copyright (c) 1999.
+       
+   =========================================================================   
+   Eclipse Web Tools Platform Project (https://projects.eclipse.org/projects/webtools)
+   
+   Few of the algorithms for XPath expressions implementation and XML Schema  
+   data types implementation, for the XPath 3.1 processor have been borrowed 
+   from Eclipse Foundation's Web Tools Platform (WTP)'s XPath 2.0 processor.
+   
+   See - LICENSE.org.eclipse.wst.xml.xpath2.processor_1.2.1.html           
 
    =========================================================================   
    Apache xml-commons xml-apis (redistribution of xml-apis.jar)
@@ -81,5 +90,6 @@
    Portions of this software were originally based on the following:
      - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
      - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
-     - software copyright (c) 2000 World Wide Web Consortium, http://www.w3.org
+     - software copyright (c) 2000 World Wide Web Consortium, http://www.w3.org 
+         
 
diff --git a/src/org/apache/xpath/compiler/XPathParser.java b/src/org/apache/xpath/compiler/XPathParser.java
index 456a4060..ba437860 100644
--- a/src/org/apache/xpath/compiler/XPathParser.java
+++ b/src/org/apache/xpath/compiler/XPathParser.java
@@ -3785,6 +3785,9 @@ public class XPathParser
             case Keywords.XS_DATE :
                xpathSequenceTypeExpr.setSequenceType(SequenceTypeSupport.XS_DATE);
                break;
+            case Keywords.XS_DATETIME :
+                xpathSequenceTypeExpr.setSequenceType(SequenceTypeSupport.XS_DATETIME);
+                break;
             case Keywords.XS_DURATION :
                xpathSequenceTypeExpr.setSequenceType(SequenceTypeSupport.XS_DURATION);
                break;
@@ -3804,8 +3807,8 @@ public class XPathParser
                 xpathSequenceTypeExpr.setSequenceType(SequenceTypeSupport.XS_UNTYPED);
                 break;
             default :
-               throw new javax.xml.transform.TransformerException("XPST0051 An XML Schema type 'xs:" + m_token + "' is not "
-                                                                                        + "recognized, within the provided sequence type expression.");        
+               throw new javax.xml.transform.TransformerException("XPST0051 : An XML Schema type 'xs:" + m_token + "' is not "
+                                                                                          + "recognized, within the provided sequence type expression.");        
          }
          
          nextToken();
diff --git a/tests/org/apache/xalan/xpath3/XsDateTimeArithmeticTests.java b/tests/org/apache/xalan/xpath3/XsDateTimeArithmeticTests.java
new file mode 100644
index 00000000..2be287a1
--- /dev/null
+++ b/tests/org/apache/xalan/xpath3/XsDateTimeArithmeticTests.java
@@ -0,0 +1,93 @@
+/*
+ * 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.xalan.xpath3;
+
+import org.apache.xalan.util.XslTransformTestsUtil;
+import org.apache.xalan.xslt3.XSLConstants;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * XPath 3.1 xs:dateTime data type's arithmetic 
+ * test cases.
+ * 
+ * @author Mukul Gandhi <mu...@apache.org>
+ * 
+ * @xsl.usage advanced
+ */
+public class XsDateTimeArithmeticTests extends XslTransformTestsUtil {        
+    
+    private static final String XSL_TRANSFORM_INPUT_DIRPATH = XSLConstants.XSL_TRANSFORM_INPUT_DIRPATH_PREFIX 
+    		                                                                                               + "xs_dateTime_arithmetic/";
+    
+    private static final String XSL_TRANSFORM_GOLD_DIRPATH = XSLConstants.XSL_TRANSFORM_GOLD_DIRPATH_PREFIX 
+    		                                                                                               + "xs_dateTime_arithmetic/gold/";
+
+    @BeforeClass
+    public static void setUpBeforeClass() throws Exception {
+        // no op
+    }
+
+    @AfterClass
+    public static void tearDownAfterClass() throws Exception {        
+        xmlDocumentBuilderFactory = null;
+        xmlDocumentBuilder = null;
+        xslTransformerFactory = null;
+    }
+
+    @Test
+    public void xsDateTimeTest1() {
+        String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test1.xsl"; 
+        String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test1.xsl";
+        
+        String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test1.out";                
+        
+        runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+    }
+    
+    @Test
+    public void xsDateTimeTest2() {
+        String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test1_a.xml"; 
+        String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test2.xsl";
+        
+        String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test2.out";                
+        
+        runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+    }
+    
+    @Test
+    public void xsDateTimeTest3() {
+        String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test3.xsl"; 
+        String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test3.xsl";
+        
+        String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test3.out";                
+        
+        runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+    }
+    
+    @Test
+    public void xsDateTimeTest4() {
+        String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test1_a.xml"; 
+        String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test4.xsl";
+        
+        String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test4.out";                
+        
+        runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+    }
+
+}
diff --git a/tests/org/apache/xalan/xslt3/Xsl3TestSuite1.java b/tests/org/apache/xalan/xslt3/Xsl3TestSuite1.java
index 5a25540f..e36678a3 100644
--- a/tests/org/apache/xalan/xslt3/Xsl3TestSuite1.java
+++ b/tests/org/apache/xalan/xslt3/Xsl3TestSuite1.java
@@ -24,6 +24,7 @@ import org.apache.xalan.xpath3.InlineFunctionItemExprTests;
 import org.apache.xalan.xpath3.StringTests;
 import org.apache.xalan.xpath3.ValueComparisonTests;
 import org.apache.xalan.xpath3.XsConstructorFunctionTests;
+import org.apache.xalan.xpath3.XsDateTimeArithmeticTests;
 import org.apache.xalan.xpath3.XsDateTimeTests;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
@@ -41,7 +42,7 @@ import org.junit.runners.Suite.SuiteClasses;
                 XslFunctionTests.class, HigherOrderFunctionTests.class, XsDateTimeTests.class,
                 ValueComparisonTests.class, InlineFunctionItemExprTests.class, 
                 FnForEachTests.class, XsConstructorFunctionTests.class,
-                FnAbsTests.class, StringTests.class })
+                FnAbsTests.class, StringTests.class, XsDateTimeArithmeticTests.class })
 public class Xsl3TestSuite1 {
 
 }
diff --git a/tests/xs_dateTime_arithmetic/gold/test1.out b/tests/xs_dateTime_arithmetic/gold/test1.out
new file mode 100644
index 00000000..72e904e5
--- /dev/null
+++ b/tests/xs_dateTime_arithmetic/gold/test1.out
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?><result>
+  <one>2008-08-05T10:00:00</one>
+  <two>2012-10-05T10:00:00</two>
+  <three>2010-08-05T10:00:00</three>
+</result>
diff --git a/tests/xs_dateTime_arithmetic/gold/test2.out b/tests/xs_dateTime_arithmetic/gold/test2.out
new file mode 100644
index 00000000..72e904e5
--- /dev/null
+++ b/tests/xs_dateTime_arithmetic/gold/test2.out
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?><result>
+  <one>2008-08-05T10:00:00</one>
+  <two>2012-10-05T10:00:00</two>
+  <three>2010-08-05T10:00:00</three>
+</result>
diff --git a/tests/xs_dateTime_arithmetic/gold/test3.out b/tests/xs_dateTime_arithmetic/gold/test3.out
new file mode 100644
index 00000000..605806ea
--- /dev/null
+++ b/tests/xs_dateTime_arithmetic/gold/test3.out
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?><result>
+  <one>2007-10-15T10:00:00</one>
+  <two>2007-10-05T15:00:00</two>
+  <three>2007-10-05T15:15:00</three>
+</result>
diff --git a/tests/xs_dateTime_arithmetic/gold/test4.out b/tests/xs_dateTime_arithmetic/gold/test4.out
new file mode 100644
index 00000000..c85c873f
--- /dev/null
+++ b/tests/xs_dateTime_arithmetic/gold/test4.out
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?><result>
+  <one>2006-12-05T10:00:00</one>
+  <two>2008-03-05T10:00:00</two>
+</result>
diff --git a/tests/xs_dateTime_arithmetic/test1.xsl b/tests/xs_dateTime_arithmetic/test1.xsl
new file mode 100644
index 00000000..a8afce62
--- /dev/null
+++ b/tests/xs_dateTime_arithmetic/test1.xsl
@@ -0,0 +1,82 @@
+<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="xs fn0"
+                version="3.0">
+                
+  <!-- Author: mukulg@apache.org -->
+  
+  <!-- This XSLT stylesheet, tests xs:dateTime data type's
+       arithmetic, and illustrates stylesheet codebase
+       modularity via xsl:function instruction.  
+  -->                
+                
+  <xsl:output method="xml" indent="yes"/>
+
+  <xsl:template match="/">     
+    <result>
+       <one>
+          <xsl:value-of select="fn0:addMonthsToDateTime(xs:dateTime('2007-10-05T10:00:00'), 10)"/>
+       </one>
+       <two>
+          <xsl:value-of select="fn0:addYearsToDateTime(xs:dateTime('2007-10-05T10:00:00'), 5)"/>
+       </two>
+       <three>
+          <xsl:value-of select="fn0:addYearsAndMonthsToDateTime(xs:dateTime('2007-10-05T10:00:00'), 2, 10)"/>
+       </three>
+    </result>
+  </xsl:template>
+  
+  <!-- Add integer number of months to an xs:dateTime value. -->
+  <xsl:function name="fn0:addMonthsToDateTime" as="xs:dateTime">
+     <xsl:param name="xsDateTime" as="xs:dateTime"/>
+     <xsl:param name="noOfMonths" as="xs:integer"/>
+    
+     <xsl:variable name="yearMonthDurationStr" select="'P' || string($noOfMonths) || 'M'"/>
+     <xsl:sequence select="$xsDateTime + xs:yearMonthDuration($yearMonthDurationStr)"/>    
+  </xsl:function>
+  
+  <!-- Add integer number of years to an xs:dateTime value. -->
+  <xsl:function name="fn0:addYearsToDateTime" as="xs:dateTime">
+     <xsl:param name="xsDateTime" as="xs:dateTime"/>
+     <xsl:param name="noOfYears" as="xs:integer"/>
+      
+     <xsl:variable name="yearMonthDurationStr" select="'P' || string($noOfYears) || 'Y'"/>
+     <xsl:sequence select="$xsDateTime + xs:yearMonthDuration($yearMonthDurationStr)"/>    
+  </xsl:function>
+  
+  <!-- Add xs:yearMonthDuration value to an xs:dateTime value. This function
+       first constructs an xs:yearMonthDuration value from the years and months
+       argument values passed as integers to this function, which is 
+       subsequently added to an xs:dateTime value. 
+  -->
+  <xsl:function name="fn0:addYearsAndMonthsToDateTime" as="xs:dateTime">
+     <xsl:param name="xsDateTime" as="xs:dateTime"/>
+     <xsl:param name="noOfYears" as="xs:integer"/>
+     <xsl:param name="noOfMonths" as="xs:integer"/>
+        
+     <xsl:variable name="yearMonthDurationStr" select="'P' || string($noOfYears) 
+                                                                || 'Y' || string($noOfMonths) 
+                                                                || 'M'"/>
+     <xsl:sequence select="$xsDateTime + xs:yearMonthDuration($yearMonthDurationStr)"/>    
+  </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>                
\ No newline at end of file
diff --git a/tests/xs_dateTime_arithmetic/test1_a.xml b/tests/xs_dateTime_arithmetic/test1_a.xml
new file mode 100644
index 00000000..c169650e
--- /dev/null
+++ b/tests/xs_dateTime_arithmetic/test1_a.xml
@@ -0,0 +1,6 @@
+<info>
+  <dateTime1>2007-10-05T10:00:00</dateTime1>  
+  <year1>2</year1>
+  <year2>5</year2>
+  <month1>10</month1>
+</info>
\ No newline at end of file
diff --git a/tests/xs_dateTime_arithmetic/test2.xsl b/tests/xs_dateTime_arithmetic/test2.xsl
new file mode 100644
index 00000000..07812484
--- /dev/null
+++ b/tests/xs_dateTime_arithmetic/test2.xsl
@@ -0,0 +1,84 @@
+<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="xs fn0"
+                version="3.0">
+                
+  <!-- Author: mukulg@apache.org -->
+  
+  <!-- use with test1_a.xml -->
+  
+  <!-- This XSLT stylesheet, tests xs:dateTime data type's
+       arithmetic, and illustrates stylesheet codebase
+       modularity via xsl:function instruction.  
+  -->               
+                
+  <xsl:output method="xml" indent="yes"/>
+
+  <xsl:template match="/info">     
+    <result>
+       <one>
+          <xsl:value-of select="fn0:addMonthsToDateTime(xs:dateTime(dateTime1), month1)"/>
+       </one>
+       <two>
+          <xsl:value-of select="fn0:addYearsToDateTime(xs:dateTime(dateTime1), year2)"/>
+       </two>
+       <three>
+          <xsl:value-of select="fn0:addYearsAndMonthsToDateTime(xs:dateTime(dateTime1), year1, month1)"/>
+       </three>
+    </result>
+  </xsl:template>
+  
+  <!-- Add integer number of months to an xs:dateTime value. -->
+  <xsl:function name="fn0:addMonthsToDateTime" as="xs:dateTime">
+     <xsl:param name="xsDateTime" as="xs:dateTime"/>
+     <xsl:param name="noOfMonths" as="xs:integer"/>
+    
+     <xsl:variable name="yearMonthDurationStr" select="'P' || string($noOfMonths) || 'M'"/>
+     <xsl:sequence select="$xsDateTime + xs:yearMonthDuration($yearMonthDurationStr)"/>    
+  </xsl:function>
+  
+  <!-- Add integer number of years to an xs:dateTime value. -->
+  <xsl:function name="fn0:addYearsToDateTime" as="xs:dateTime">
+     <xsl:param name="xsDateTime" as="xs:dateTime"/>
+     <xsl:param name="noOfYears" as="xs:integer"/>
+      
+     <xsl:variable name="yearMonthDurationStr" select="'P' || string($noOfYears) || 'Y'"/>
+     <xsl:sequence select="$xsDateTime + xs:yearMonthDuration($yearMonthDurationStr)"/>    
+  </xsl:function>
+  
+  <!-- Add xs:yearMonthDuration value to an xs:dateTime value. This function
+       first constructs an xs:yearMonthDuration value from the years and months
+       argument values passed as integers to this function, which is 
+       subsequently added to an xs:dateTime value. 
+  -->
+  <xsl:function name="fn0:addYearsAndMonthsToDateTime" as="xs:dateTime">
+     <xsl:param name="xsDateTime" as="xs:dateTime"/>
+     <xsl:param name="noOfYears" as="xs:integer"/>
+     <xsl:param name="noOfMonths" as="xs:integer"/>
+        
+     <xsl:variable name="yearMonthDurationStr" select="'P' || string($noOfYears) 
+                                                                 || 'Y' || string($noOfMonths) 
+                                                                              || 'M'"/>
+     <xsl:sequence select="$xsDateTime + xs:yearMonthDuration($yearMonthDurationStr)"/>    
+  </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>                
\ No newline at end of file
diff --git a/tests/xs_dateTime_arithmetic/test3.xsl b/tests/xs_dateTime_arithmetic/test3.xsl
new file mode 100644
index 00000000..3c858cb5
--- /dev/null
+++ b/tests/xs_dateTime_arithmetic/test3.xsl
@@ -0,0 +1,82 @@
+<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="xs fn0"
+                version="3.0">
+                
+  <!-- Author: mukulg@apache.org -->
+  
+  <!-- This XSLT stylesheet, tests xs:dateTime data type's
+       arithmetic, and illustrates stylesheet codebase
+       modularity via xsl:function instruction.  
+  -->                 
+                
+  <xsl:output method="xml" indent="yes"/>
+
+  <xsl:template match="/">     
+    <result>
+      <one>
+         <xsl:value-of select="fn0:addDaysToDateTime(xs:dateTime('2007-10-05T10:00:00'), 10)"/>
+      </one>
+      <two>
+         <xsl:value-of select="fn0:addHoursToDateTime(xs:dateTime('2007-10-05T10:00:00'), 5)"/>
+      </two>
+      <three>
+         <xsl:value-of select="fn0:addHoursAndMinsToDateTime(xs:dateTime('2007-10-05T10:00:00'), 5, 15)"/>
+      </three>
+    </result>
+  </xsl:template>
+  
+  <!-- Add integer number of days to an xs:dateTime value. -->
+  <xsl:function name="fn0:addDaysToDateTime" as="xs:dateTime">
+     <xsl:param name="xsDateTime" as="xs:dateTime"/>
+     <xsl:param name="noOfDays" as="xs:integer"/>
+    
+     <xsl:variable name="dayTimeDurationStr" select="'P' || string($noOfDays) || 'D'"/>
+     <xsl:sequence select="$xsDateTime + xs:dayTimeDuration($dayTimeDurationStr)"/>    
+  </xsl:function>
+  
+  <!-- Add integer number of hours to an xs:dateTime value. -->
+  <xsl:function name="fn0:addHoursToDateTime" as="xs:dateTime">
+     <xsl:param name="xsDateTime" as="xs:dateTime"/>
+     <xsl:param name="noOfHours" as="xs:integer"/>
+      
+     <xsl:variable name="dayTimeDurationStr" select="'P' || 'T' || string($noOfHours) || 'H'"/>
+     <xsl:sequence select="$xsDateTime + xs:dayTimeDuration($dayTimeDurationStr)"/>    
+  </xsl:function>
+  
+  <!-- Add xs:dayTimeDuration value to an xs:dateTime value. This function
+       first constructs an xs:dayTimeDuration value from the hours and minutes
+       argument values passed as integers to this function, which is 
+       subsequently added to an xs:dateTime value. 
+  -->
+  <xsl:function name="fn0:addHoursAndMinsToDateTime" as="xs:dateTime">
+     <xsl:param name="xsDateTime" as="xs:dateTime"/>
+     <xsl:param name="noOfHours" as="xs:integer"/>
+     <xsl:param name="noOfMins" as="xs:integer"/>
+        
+     <xsl:variable name="dayTimeDurationStr" select="'P' || 'T' || string($noOfHours) 
+                                                                       || 'H' || string($noOfMins) 
+                                                                                     || 'M'"/>
+     <xsl:sequence select="$xsDateTime + xs:dayTimeDuration($dayTimeDurationStr)"/>    
+  </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>                
\ No newline at end of file
diff --git a/tests/xs_dateTime_arithmetic/test4.xsl b/tests/xs_dateTime_arithmetic/test4.xsl
new file mode 100644
index 00000000..e6d06b48
--- /dev/null
+++ b/tests/xs_dateTime_arithmetic/test4.xsl
@@ -0,0 +1,58 @@
+<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="xs fn0"
+                version="3.0">
+                
+  <!-- Author: mukulg@apache.org -->
+  
+  <!-- use with test1_a.xml -->
+  
+  <!-- This XSLT stylesheet, tests xs:dateTime data type's
+       arithmetic, and illustrates stylesheet codebase
+       modularity via xsl:function instruction.  
+  -->                
+                
+  <xsl:output method="xml" indent="yes"/>
+
+  <xsl:template match="/info">     
+    <result>
+      <one>
+         <xsl:value-of select="fn0:subtractMonthsFromDateTime(xs:dateTime(dateTime1), month1)"/>
+      </one>
+      <two>
+         <!-- Add 15 months of duration value, to result of a function call. -->
+         <xsl:value-of select="fn0:subtractMonthsFromDateTime(xs:dateTime(dateTime1), month1) + 
+                                                                                           xs:yearMonthDuration('P15M')"/>
+      </two>
+    </result>
+  </xsl:template>
+  
+  <!-- Subtract integer number of months from an xs:dateTime value. -->
+  <xsl:function name="fn0:subtractMonthsFromDateTime" as="xs:dateTime">
+     <xsl:param name="xsDateTime" as="xs:dateTime"/>
+     <xsl:param name="noOfMonths" as="xs:integer"/>
+    
+     <xsl:variable name="yearMonthDurationStr" select="'P' || string($noOfMonths) || 'M'"/>
+     <xsl:sequence select="$xsDateTime - xs:yearMonthDuration($yearMonthDurationStr)"/>    
+  </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>                
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xalan.apache.org
For additional commands, e-mail: commits-help@xalan.apache.org