This is an automated email from the ASF dual-hosted git repository.

olabusayo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/daffodil.git


The following commit(s) were added to refs/heads/main by this push:
     new d79efe1c6 Fix always lenient calendar parsing/unparsing
d79efe1c6 is described below

commit d79efe1c6f38a80394ec306af1358c8b41c01a2c
Author: olabusayoT <[email protected]>
AuthorDate: Fri Nov 1 18:20:27 2024 -0400

    Fix always lenient calendar parsing/unparsing
    
    - we used to override the leniency regardless of what the calendar check 
policy was, now this ticket fixes that by setting it based on the isLenient 
value of calendar.
    - uncomment previously failing tests
    - make newly failing tests lax
    - add additional test
    
    DAFFODIL-2951, DAFFODIL-1042
---
 .../runtime1/processors/EvCalendarLanguage.scala   |  2 +-
 .../section05/simple_types/SimpleTypes.tdml        | 32 +++++++++++++++++-----
 .../section23/dfdl_functions/Functions.tdml        | 10 +++----
 .../section05/simple_types/TestSimpleTypes.scala   | 19 +++++++++----
 4 files changed, 45 insertions(+), 18 deletions(-)

diff --git 
a/daffodil-runtime1/src/main/scala/org/apache/daffodil/runtime1/processors/EvCalendarLanguage.scala
 
b/daffodil-runtime1/src/main/scala/org/apache/daffodil/runtime1/processors/EvCalendarLanguage.scala
index 5eac44c55..635cf1dd7 100644
--- 
a/daffodil-runtime1/src/main/scala/org/apache/daffodil/runtime1/processors/EvCalendarLanguage.scala
+++ 
b/daffodil-runtime1/src/main/scala/org/apache/daffodil/runtime1/processors/EvCalendarLanguage.scala
@@ -120,7 +120,7 @@ class DateTimeFormatterEv(
       override def initialValue = {
         val formatter = new SimpleDateFormat(pattern, locale)
         formatter.setCalendar(calendar)
-        formatter.setLenient(true) // TODO: should this use 
calendarCheckPolicy?
+        formatter.setLenient(calendar.isLenient)
         formatter
       }
     }
diff --git 
a/daffodil-test/src/test/resources/org/apache/daffodil/section05/simple_types/SimpleTypes.tdml
 
b/daffodil-test/src/test/resources/org/apache/daffodil/section05/simple_types/SimpleTypes.tdml
index 91ad8fb28..bdfc5210c 100644
--- 
a/daffodil-test/src/test/resources/org/apache/daffodil/section05/simple_types/SimpleTypes.tdml
+++ 
b/daffodil-test/src/test/resources/org/apache/daffodil/section05/simple_types/SimpleTypes.tdml
@@ -325,7 +325,7 @@
     <xs:element name="dateTimeBinBCD2" type="xs:dateTime" 
dfdl:calendarPattern="MMddyyyyhhmmss" dfdl:calendarPatternKind="explicit"
       dfdl:lengthKind="implicit" dfdl:lengthUnits="bytes" 
dfdl:binaryCalendarRep="bcd"/>
     <xs:element name="dateTimeBinBCD3" type="xs:dateTime" 
dfdl:calendarPattern="MMddyyyyhhmmss" dfdl:calendarPatternKind="explicit"
-      dfdl:lengthKind="explicit" dfdl:length="{ 7 }" dfdl:lengthUnits="bytes" 
dfdl:binaryCalendarRep="bcd"/>
+      dfdl:lengthKind="explicit" dfdl:length="{ 7 }" dfdl:lengthUnits="bytes" 
dfdl:binaryCalendarRep="bcd" dfdl:calendarCheckPolicy="lax"/>
 
     <xs:element name="dateTimeBinBCD4">
       <xs:complexType>
@@ -5102,7 +5102,7 @@
                 dfdl:textCalendarJustification="right" 
dfdl:textCalendarPadCharacter="d" dfdl:lengthKind="delimited" />
 
     <xs:element name="date12" type="ex:explicDate" dfdl:calendarPattern="dd MM 
yyyy, HH:mm:ss"/>
-    <xs:element name="date13" type="ex:explicDate" 
dfdl:calendarPattern="MM-dd-yyyy G"/>
+    <xs:element name="date13" type="ex:explicDate" 
dfdl:calendarPattern="MM-dd-yyyy G" dfdl:calendarCheckPolicy="lax"/>
     <xs:element name="date14" type="ex:explicDate" dfdl:calendarPattern="Q 
yyyy"/>
     <xs:element name="date15" type="ex:explicDate" dfdl:calendarPattern="D 
yyyy"/>
     <xs:element name="date16" type="ex:explicDate" dfdl:calendarPattern="F MM 
yyyy"/>
@@ -5145,7 +5145,9 @@
         </xs:sequence>
       </xs:complexType>
     </xs:element>
-    
+
+    <xs:element name="date35" type="xs:date" dfdl:calendarCheckPolicy="strict" 
dfdl:calendarPatternKind="explicit" dfdl:calendarPattern="MMM dd yyyy" 
dfdl:lengthKind="explicit" dfdl:length="12" />
+
     <xs:simpleType name="explicDate" dfdl:calendarPatternKind="explicit" 
dfdl:lengthKind="delimited">
       <xs:restriction base="xs:date"/>
     </xs:simpleType>
@@ -5216,7 +5218,7 @@
       </xs:complexType>
     </xs:element>
 
-    <xs:element name="dateTimeImp" type="xs:dateTime" 
dfdl:calendarPatternKind="implicit" dfdl:lengthKind="delimited" />
+    <xs:element name="dateTimeImp" type="xs:dateTime" 
dfdl:calendarPatternKind="implicit" dfdl:lengthKind="delimited" 
dfdl:calendarCheckPolicy="lax"/>
     <xs:element name="dateTime01" type="xs:dateTime" 
dfdl:calendarPatternKind="explicit" dfdl:calendarPattern="'It is 'hh:mmaa' on 
the 'dd'st of 'MMM', year 'yyyy"
                 dfdl:lengthKind="explicit" dfdl:length="44" 
                 dfdl:textPadKind="padChar" dfdl:textTrimKind="padChar"/>
@@ -6283,7 +6285,19 @@
 
     <tdml:document><![CDATA[2001-03-35]]></tdml:document>
     <tdml:errors>
-      <tdml:error/>
+      <tdml:error>Unable to parse</tdml:error>
+      <tdml:error>2001-03-35</tdml:error>
+      <tdml:error>valid range</tdml:error>
+    </tdml:errors>
+  </tdml:parserTestCase>
+
+  <tdml:parserTestCase name="dateStrictCheckPolicy02" root="date35"
+    model="dateTimeSchema" description="Section 13 Simple Types - 
calendarCheckPolicy - DFDL-13-139R">
+
+    <tdml:document><![CDATA[Mar. 31 2001]]></tdml:document>
+    <tdml:errors>
+      <tdml:error>Unable to parse</tdml:error>
+      <tdml:error>Mar. 31 2001</tdml:error>
     </tdml:errors>
   </tdml:parserTestCase>
 
@@ -6299,7 +6313,9 @@
 
     <tdml:document><![CDATA[13:99:50-0800]]></tdml:document>
     <tdml:errors>
-      <tdml:error/>
+      <tdml:error>Unable to parse</tdml:error>
+      <tdml:error>13:99:50-0800</tdml:error>
+      <tdml:error>valid range</tdml:error>
     </tdml:errors>
   </tdml:parserTestCase>
 
@@ -6315,7 +6331,9 @@
 
     <tdml:document><![CDATA[13:30:70GMT]]></tdml:document>
     <tdml:errors>
-      <tdml:error>Failed to parse '13:30:70GMT'</tdml:error>
+      <tdml:error>Unable to parse</tdml:error>
+      <tdml:error>13:30:70GMT</tdml:error>
+      <tdml:error>valid range</tdml:error>
     </tdml:errors>
   </tdml:parserTestCase>
 
diff --git 
a/daffodil-test/src/test/resources/org/apache/daffodil/section23/dfdl_functions/Functions.tdml
 
b/daffodil-test/src/test/resources/org/apache/daffodil/section23/dfdl_functions/Functions.tdml
index e3f7e13be..2ec4baded 100644
--- 
a/daffodil-test/src/test/resources/org/apache/daffodil/section23/dfdl_functions/Functions.tdml
+++ 
b/daffodil-test/src/test/resources/org/apache/daffodil/section23/dfdl_functions/Functions.tdml
@@ -702,7 +702,7 @@
     <xs:element name="e_yearfromdatetime2">
       <xs:complexType>
         <xs:sequence>
-          <xs:element name="date" type="xs:dateTime" 
dfdl:lengthKind="delimited" />
+          <xs:element name="date" type="xs:dateTime" 
dfdl:lengthKind="delimited" dfdl:calendarCheckPolicy="lax"/>
           <xs:element name="year" type="xs:int" dfdl:inputValueCalc="{ 
fn:year-from-dateTime(../ex:date) }"/>
         </xs:sequence>
       </xs:complexType>
@@ -819,7 +819,7 @@
     <xs:element name="e_yearfromdate2">
       <xs:complexType>
         <xs:sequence>
-          <xs:element name="date" type="xs:date" dfdl:lengthKind="delimited" />
+          <xs:element name="date" type="xs:date" dfdl:lengthKind="delimited" 
dfdl:calendarCheckPolicy="lax" />
           <xs:element name="year" type="xs:int" dfdl:inputValueCalc="{ 
fn:year-from-date(../ex:date) }"/>
         </xs:sequence>
       </xs:complexType>
@@ -904,7 +904,7 @@
     <xs:element name="e_xfromtime1">
       <xs:complexType>
         <xs:sequence>
-          <xs:element name="time" type="xs:time" dfdl:lengthKind="delimited" />
+          <xs:element name="time" type="xs:time" dfdl:lengthKind="delimited" 
dfdl:calendarCheckPolicy="lax"/>
           <xs:element name="hours" type="xs:int" dfdl:inputValueCalc="{ 
fn:hours-from-time(../ex:time) }"/>
           <xs:element name="minutes" type="xs:int" dfdl:inputValueCalc="{ 
fn:minutes-from-time(../ex:time) }"/>
           <xs:element name="seconds" type="xs:decimal" dfdl:inputValueCalc="{ 
fn:seconds-from-time(../ex:time) }"/>
@@ -913,11 +913,11 @@
       </xs:complexType>
     </xs:element>
 
-    <xs:element name="e_xfromtime2">
+    <xs:element name="e_xfromtime2" dfdl:calendarCheckPolicy="lax">
       <xs:complexType>
         <xs:sequence>
           <xs:element name="time" type="xs:time" dfdl:lengthKind="delimited" 
dfdl:calendarPatternKind="explicit"
-            dfdl:calendarPattern="HH:mm:ss.SSSz"  />
+            dfdl:calendarPattern="HH:mm:ss.SSSz" 
dfdl:calendarCheckPolicy="lax" />
           <xs:element name="hours" type="xs:int" dfdl:inputValueCalc="{ 
fn:hours-from-time(../ex:time) }"/>
           <xs:element name="minutes" type="xs:int" dfdl:inputValueCalc="{ 
fn:minutes-from-time(../ex:time) }"/>
           <xs:element name="seconds" type="xs:decimal" dfdl:inputValueCalc="{ 
fn:seconds-from-time(../ex:time) }"/>
diff --git 
a/daffodil-test/src/test/scala/org/apache/daffodil/section05/simple_types/TestSimpleTypes.scala
 
b/daffodil-test/src/test/scala/org/apache/daffodil/section05/simple_types/TestSimpleTypes.scala
index 126a11df4..b68d50fe4 100644
--- 
a/daffodil-test/src/test/scala/org/apache/daffodil/section05/simple_types/TestSimpleTypes.scala
+++ 
b/daffodil-test/src/test/scala/org/apache/daffodil/section05/simple_types/TestSimpleTypes.scala
@@ -398,11 +398,20 @@ class TestSimpleTypes {
   @Test def test_dateLaxCheckPolicy04(): Unit = { 
runner.runOneTest("dateLaxCheckPolicy04") }
   @Test def test_dateLaxCheckPolicy05(): Unit = { 
runner.runOneTest("dateLaxCheckPolicy05") }
 
-  // DFDL-1042 - not very strict
-  // @Test def test_dateStrictCheckPolicy01() { 
runner.runOneTest("dateStrictCheckPolicy01") }
-  // @Test def test_timeStrictCheckPolicy01() { 
runner.runOneTest("timeStrictCheckPolicy01") }
-  // @Test def test_timeStrictCheckPolicy02() { 
runner.runOneTest("timeStrictCheckPolicy02") }
-  // @Test def test_timeFormatting5() { runner.runOneTest("timeFormatting5") }
+  // DFDL-1042/DFDL-2951
+  @Test def test_dateStrictCheckPolicy01(): Unit = {
+    runner.runOneTest("dateStrictCheckPolicy01")
+  }
+  @Test def test_dateStrictCheckPolicy02(): Unit = {
+    runner.runOneTest("dateStrictCheckPolicy02")
+  }
+  @Test def test_timeStrictCheckPolicy01(): Unit = {
+    runner.runOneTest("timeStrictCheckPolicy01")
+  }
+  @Test def test_timeStrictCheckPolicy02(): Unit = {
+    runner.runOneTest("timeStrictCheckPolicy02")
+  }
+  @Test def test_timeFormatting5(): Unit = { 
runner.runOneTest("timeFormatting5") }
 
   @Test def test_Long1(): Unit = { runner.runOneTest("Long1") }
   @Test def test_BigInteger1(): Unit = { runner.runOneTest("BigInteger1") }

Reply via email to