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

jadams 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 d26c634d0 Do not show counterintuitive placement for 
testKind=expression
d26c634d0 is described below

commit d26c634d03a3dfda8844c56cacf662cd1317375a
Author: Josh Adams <[email protected]>
AuthorDate: Thu Aug 22 17:07:47 2024 -0400

    Do not show counterintuitive placement for testKind=expression
    
    The counterintuitive placement warning should only be displayed for
    asserts/disciminators that have testKind=expression.
    
    DAFFODIL-2912
---
 .../apache/daffodil/core/dsom/SequenceGroup.scala  |   8 +-
 .../section07/discriminators/discriminator.tdml    | 102 ++++++++++++++++++---
 .../discriminators/TestDiscriminators.scala        |  14 ++-
 3 files changed, 105 insertions(+), 19 deletions(-)

diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/core/dsom/SequenceGroup.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/core/dsom/SequenceGroup.scala
index 42a9893aa..5defef394 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/core/dsom/SequenceGroup.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/core/dsom/SequenceGroup.scala
@@ -33,6 +33,7 @@ import 
org.apache.daffodil.lib.schema.annotation.props.SeparatorSuppressionPolic
 import org.apache.daffodil.lib.schema.annotation.props.gen.OccursCountKind
 import org.apache.daffodil.lib.schema.annotation.props.gen.SeparatorPosition
 import org.apache.daffodil.lib.schema.annotation.props.gen.SequenceKind
+import org.apache.daffodil.lib.schema.annotation.props.gen.TestKind
 import org.apache.daffodil.lib.xml.RefQName
 import org.apache.daffodil.lib.xml.XMLUtils
 import org.apache.daffodil.runtime1.layers.LayerRuntimeData
@@ -164,9 +165,12 @@ abstract class SequenceGroupTermBase(xml: Node, 
lexicalParent: SchemaComponent,
   protected final lazy val checkIfNonEmptyAndDiscrimsOrAsserts: Unit = {
     val msg = "Counterintuitive placement detected. Wrap the discriminator or 
assert " +
       "in an empty sequence to evaluate before the contents."
-    if (groupMembers.nonEmpty && discriminatorStatements.nonEmpty)
+    // Only show warning if the testKind=expression, see DFDL spec Section 9.5 
Evaluation Order for Statement Annotations
+    if (
+      groupMembers.nonEmpty && discriminatorStatements.exists(_.testKind == 
TestKind.Expression)
+    )
       SDW(WarnID.DiscouragedDiscriminatorPlacement, msg)
-    if (groupMembers.nonEmpty && assertStatements.nonEmpty)
+    if (groupMembers.nonEmpty && assertStatements.exists(_.testKind == 
TestKind.Expression))
       SDW(WarnID.DiscouragedAssertPlacement, msg)
   }
 
diff --git 
a/daffodil-test/src/test/resources/org/apache/daffodil/section07/discriminators/discriminator.tdml
 
b/daffodil-test/src/test/resources/org/apache/daffodil/section07/discriminators/discriminator.tdml
index b95a0934c..ff985f255 100644
--- 
a/daffodil-test/src/test/resources/org/apache/daffodil/section07/discriminators/discriminator.tdml
+++ 
b/daffodil-test/src/test/resources/org/apache/daffodil/section07/discriminators/discriminator.tdml
@@ -32,7 +32,7 @@
     <xs:include 
schemaLocation="/org/apache/daffodil/xsd/DFDLGeneralFormat.dfdl.xsd"/>
     <dfdl:format ref="ex:GeneralFormat" />
 
-    <xs:element name="root-discrim" dfdl:lengthKind="implicit" >
+    <xs:element name="root-discrim-pattern" dfdl:lengthKind="implicit" >
       <xs:complexType>
         <xs:sequence dfdl:separator="," dfdl:separatorPosition="infix">
           <xs:annotation>
@@ -48,14 +48,46 @@
       </xs:complexType>
     </xs:element>
 
-    <xs:element name="root-assert" dfdl:lengthKind="implicit" >
+    <xs:element name="root-discrim-expression" dfdl:lengthKind="implicit" >
+      <xs:complexType>
+        <xs:sequence dfdl:separator="," dfdl:separatorPosition="infix">
+          <xs:annotation>
+            <xs:appinfo source="http://www.ogf.org/dfdl/";>
+              <dfdl:discriminator testKind="expression"
+                                  test="{ fn:true() }"
+                                  message="discriminator failed" />
+            </xs:appinfo>
+          </xs:annotation>
+          <xs:element ref="ex:description" dfdl:lengthKind="delimited"/>
+          <xs:element ref="ex:quantity" dfdl:lengthKind="delimited"/>
+        </xs:sequence>
+      </xs:complexType>
+    </xs:element>
+
+    <xs:element name="root-assert-pattern" dfdl:lengthKind="implicit" >
       <xs:complexType>
         <xs:sequence dfdl:separator="," dfdl:separatorPosition="infix">
           <xs:annotation>
             <xs:appinfo source="http://www.ogf.org/dfdl/";>
               <dfdl:assert testKind="pattern"
-                                  testPattern="\p{L}{3}"
-                                  message="assert failed for pattern 
'\p{L}{3}'" />
+                           testPattern="\p{L}{3}"
+                           message="assert failed for pattern '\p{L}{3}'" />
+            </xs:appinfo>
+          </xs:annotation>
+          <xs:element ref="ex:description" dfdl:lengthKind="delimited"/>
+          <xs:element ref="ex:quantity" dfdl:lengthKind="delimited"/>
+        </xs:sequence>
+      </xs:complexType>
+    </xs:element>
+
+    <xs:element name="root-assert-expression" dfdl:lengthKind="implicit" >
+      <xs:complexType>
+        <xs:sequence dfdl:separator="," dfdl:separatorPosition="infix">
+          <xs:annotation>
+            <xs:appinfo source="http://www.ogf.org/dfdl/";>
+              <dfdl:assert testKind="expression"
+                           test="{ fn:true() }"
+                           message="assert failed" />
             </xs:appinfo>
           </xs:annotation>
           <xs:element ref="ex:description" dfdl:lengthKind="delimited"/>
@@ -69,21 +101,41 @@
   </tdml:defineSchema>
 
   <!--
-  Test name: discrimPlacementSDW
-  Schema: discrimPlacement, root root-discrim
+  Test name: discrimPlacementPatternSDW
+  Schema: discrimPlacement, root root-discrim-pattern
+  Purpose: This test demonstrates that no SDW occurs for testKind=pattern
+  -->
+
+  <tdml:parserTestCase name="discrimPlacementPatternSDW"
+                       root="root-discrim-pattern" 
model="discrimAssertPlacement"
+                       description="This test demonstrates that no SDW occurs 
for testKind=pattern">
+    <tdml:document>Hat,2</tdml:document>
+    <tdml:infoset>
+      <tdml:dfdlInfoset>
+        <root-discrim-pattern>
+          <description>Hat</description>
+          <quantity>2</quantity>
+        </root-discrim-pattern>
+      </tdml:dfdlInfoset>
+    </tdml:infoset>
+  </tdml:parserTestCase>
+
+  <!--
+  Test name: discrimPlacementExpressionSDW
+  Schema: discrimPlacement, root root-discrim-expression
   Purpose: This test demonstrates the SDW resulting from discouraged 
discriminator placement
   -->
 
-  <tdml:parserTestCase name="discrimPlacementSDW"
-                       root="root-discrim" model="discrimAssertPlacement"
+  <tdml:parserTestCase name="discrimPlacementExpressionSDW"
+                       root="root-discrim-expression" 
model="discrimAssertPlacement"
                        description="This test demonstrates the SDW resulting 
from discouraged discriminator placement">
     <tdml:document>Hat,2</tdml:document>
     <tdml:infoset>
       <tdml:dfdlInfoset>
-        <root-discrim>
+        <root-discrim-expression>
           <description>Hat</description>
           <quantity>2</quantity>
-        </root-discrim>
+        </root-discrim-expression>
       </tdml:dfdlInfoset>
     </tdml:infoset>
     <tdml:warnings>
@@ -93,21 +145,41 @@
   </tdml:parserTestCase>
 
   <!--
-  Test name: assertPlacementSDW
+  Test name: assertPlacementPatternSDW
+  Schema: discrimAssertPlacement, root root-assert-pattern
+  Purpose: This test demonstrates that no SDW occurs for testKind=pattern
+  -->
+
+  <tdml:parserTestCase name="assertPlacementPatternSDW"
+                       root="root-assert-pattern" 
model="discrimAssertPlacement"
+                       description="This test demonstrates no SDW occurs for 
testKind=pattern">
+    <tdml:document>Hat,2</tdml:document>
+    <tdml:infoset>
+      <tdml:dfdlInfoset>
+        <root-assert-pattern>
+          <description>Hat</description>
+          <quantity>2</quantity>
+        </root-assert-pattern>
+      </tdml:dfdlInfoset>
+    </tdml:infoset>
+  </tdml:parserTestCase>
+
+  <!--
+  Test name: assertPlacementExpressionSDW
   Schema: discrimAssertPlacement, root root-assert
   Purpose: This test demonstrates the SDW resulting from discouraged assert 
placement
   -->
 
-  <tdml:parserTestCase name="assertPlacementSDW"
-                       root="root-assert" model="discrimAssertPlacement"
+  <tdml:parserTestCase name="assertPlacementExpressionSDW"
+                       root="root-assert-expression" 
model="discrimAssertPlacement"
                        description="This test demonstrates the SDW resulting 
from discouraged assert placement">
     <tdml:document>Hat,2</tdml:document>
     <tdml:infoset>
       <tdml:dfdlInfoset>
-        <root-assert>
+        <root-assert-expression>
           <description>Hat</description>
           <quantity>2</quantity>
-        </root-assert>
+        </root-assert-expression>
       </tdml:dfdlInfoset>
     </tdml:infoset>
     <tdml:warnings>
diff --git 
a/daffodil-test/src/test/scala/org/apache/daffodil/section07/discriminators/TestDiscriminators.scala
 
b/daffodil-test/src/test/scala/org/apache/daffodil/section07/discriminators/TestDiscriminators.scala
index 2aba5f5da..5b1196b71 100644
--- 
a/daffodil-test/src/test/scala/org/apache/daffodil/section07/discriminators/TestDiscriminators.scala
+++ 
b/daffodil-test/src/test/scala/org/apache/daffodil/section07/discriminators/TestDiscriminators.scala
@@ -111,8 +111,18 @@ class TestDiscriminators {
     runner2.runOneTest("multipleDiscriminators5")
   }
 
-  @Test def test_discrimPlacementSDW(): Unit = { 
runner.runOneTest("discrimPlacementSDW") }
-  @Test def test_assertPlacementSDW(): Unit = { 
runner.runOneTest("assertPlacementSDW") }
+  @Test def test_discrimPlacementExpressionSDW(): Unit = {
+    runner.runOneTest("discrimPlacementExpressionSDW")
+  }
+  @Test def test_discrimPlacementPatternSDW(): Unit = {
+    runner.runOneTest("discrimPlacementPatternSDW")
+  }
+  @Test def test_assertPlacementExpressionSDW(): Unit = {
+    runner.runOneTest("assertPlacementExpressionSDW")
+  }
+  @Test def test_assertPlacementPatternSDW(): Unit = {
+    runner.runOneTest("assertPlacementPatternSDW")
+  }
 
   @Test def test_nameDOB_test1(): Unit = { runner3.runOneTest("nameDOB_test1") 
}
   @Test def test_nameDOB_test_bad_date_first_row(): Unit = {

Reply via email to