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

jinterrante 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 3e42378d8 Make minor codegen-c improvements
3e42378d8 is described below

commit 3e42378d8203aca8f9731edb4971492e62c81c13
Author: John Interrante <[email protected]>
AuthorDate: Mon Mar 20 14:31:58 2023 -0700

    Make minor codegen-c improvements
    
    Remove elementFormDefault="qualified" from padtest & variablelen DFDL
    schemas since using it in DFDL is not a best practice.  Improve
    comments for padtest & variablelen TDML tests and move C examples to a
    better location.
    
    DAFFODIL-2804
    
    build.sbt: Lose unnecessary "c" directory and move C examples one
    directory higher up.
    
    Main.scala: Add a comment and remove a blank line.
    
    TestCLIGenerate.scala: Lose "C" from TestCLIGenerateC.scala and
    improve some tests' names.
    
    c/files/Makefile: Remove a blank commented line.
    
    c/examples/**: Lose unnecessary "c" directory and move C examples one
    directory higher up.  Regenerate example C code from padtest &
    variablelen schemas after modifying them (see below).
    
    infosets/{padtest,variablelen}.*.dat.xml: Add namespace and prefix to
    infosets' root element (best practice for DFDL schemas).
    
    (padtest,variablelen}.dfdl.xsd: Remove elementFormDefault="qualified",
    add targetNamespace, and remove xs: prefix (best practice for DFDL
    schemas).
    
    {padtest,variablelen}.tdml: Make comments clearer and rename a test
    from "expression_17C" to "expression_17_error".
    
    DaffodilCTDMLDFDLProcessor.scala: Simplify output message capture and
    passing from simulation to parse/unparse results.
    
    TestVariableLen.scala: Rename a test from "expression_17C" to
    "expression_17_error".
    
    Rat.scala: Update exclusion of new location of C examples.
---
 build.sbt                                          |   2 +-
 .../main/scala/org/apache/daffodil/cli/Main.scala  |   2 +-
 ...estCLIGenerateC.scala => TestCLIGenerate.scala} |  10 +-
 .../org/apache/daffodil/codegen/c/files/Makefile   |   1 -
 .../{c => }/examples/NestedUnion/generated_code.c  |   0
 .../{c => }/examples/NestedUnion/generated_code.h  |   0
 .../test/{c => }/examples/ex_nums/generated_code.c |   0
 .../test/{c => }/examples/ex_nums/generated_code.h |   0
 .../test/{c => }/examples/padtest/generated_code.c |   4 +-
 .../test/{c => }/examples/padtest/generated_code.h |   0
 .../{c => }/examples/variablelen/generated_code.c  |   4 +-
 .../{c => }/examples/variablelen/generated_code.h  |   0
 .../daffodil/codegen/c/infosets/padtest.00.dat.xml |   4 +-
 .../daffodil/codegen/c/infosets/padtest.01.dat.xml |   4 +-
 .../daffodil/codegen/c/infosets/padtest.16.dat.xml |   4 +-
 .../daffodil/codegen/c/infosets/padtest.17.dat.xml |   4 +-
 .../codegen/c/infosets/variablelen.00.dat.xml      |   4 +-
 .../codegen/c/infosets/variablelen.01.dat.xml      |   4 +-
 .../codegen/c/infosets/variablelen.16.dat.xml      |   4 +-
 .../codegen/c/infosets/variablelen.17.dat.xml      |   4 +-
 .../c/infosets/variablelen.expression.dat.xml      |   4 +-
 .../codegen/c/infosets/variablelen.fixed.dat.xml   |   4 +-
 .../c/infosets/variablelen.implicit.dat.xml        |   4 +-
 .../codegen/c/infosets/variablelen.parsed.dat.xml  |   4 +-
 .../c/infosets/variablelen.stopValue.dat.xml       |   4 +-
 .../org/apache/daffodil/codegen/c/padtest.dfdl.xsd |  68 ++++-----
 .../org/apache/daffodil/codegen/c/padtest.tdml     |  78 +++++-----
 .../apache/daffodil/codegen/c/variablelen.dfdl.xsd | 126 ++++++++--------
 .../org/apache/daffodil/codegen/c/variablelen.tdml | 159 ++++++++++++---------
 .../tdml/DaffodilCTDMLDFDLProcessor.scala          |  26 ++--
 .../daffodil/codegen/c/TestVariableLen.scala       |   2 +-
 project/Rat.scala                                  |   4 +-
 32 files changed, 285 insertions(+), 253 deletions(-)

diff --git a/build.sbt b/build.sbt
index 31ce43dbb..5b0f7c36f 100644
--- a/build.sbt
+++ b/build.sbt
@@ -465,7 +465,7 @@ lazy val genCExamplesSettings = Seq(
         .withOutputStrategy(Some(LoggedOutput(forkCaptureLogger)))
         .withBootJars(cp.files.toVector)
       val mainClass = 
"org.apache.daffodil.codegen.c.DaffodilCExamplesGenerator"
-      val outdir = (codeGenC / Test / sourceDirectory).value / "c" / "examples"
+      val outdir = (codeGenC / Test / sourceDirectory).value / "examples"
       val args = Seq(mainClass, outdir.toString)
       val ret = Fork.java(forkOpts, args)
       forkCaptureLogger.stderr.foreach { stream.log.error(_) }
diff --git a/daffodil-cli/src/main/scala/org/apache/daffodil/cli/Main.scala 
b/daffodil-cli/src/main/scala/org/apache/daffodil/cli/Main.scala
index cb2508089..ee5139f2b 100644
--- a/daffodil-cli/src/main/scala/org/apache/daffodil/cli/Main.scala
+++ b/daffodil-cli/src/main/scala/org/apache/daffodil/cli/Main.scala
@@ -1654,9 +1654,9 @@ class Main(
 
       // Get our generate options from whichever language we're generating
       case Some(conf.generate) => {
+        // Determine which language we've generating
         val generateOpts = conf.generate.subcommand match {
           case Some(conf.generate.c) => conf.generate.c
-
           // Required to avoid "match may not be exhaustive", but should never 
happen
           case _ => Assert.impossible()
         }
diff --git 
a/daffodil-cli/src/test/scala/org/apache/daffodil/cli/cliTest/TestCLIGenerateC.scala
 
b/daffodil-cli/src/test/scala/org/apache/daffodil/cli/cliTest/TestCLIGenerate.scala
similarity index 95%
rename from 
daffodil-cli/src/test/scala/org/apache/daffodil/cli/cliTest/TestCLIGenerateC.scala
rename to 
daffodil-cli/src/test/scala/org/apache/daffodil/cli/cliTest/TestCLIGenerate.scala
index 27c803da3..a781c26af 100644
--- 
a/daffodil-cli/src/test/scala/org/apache/daffodil/cli/cliTest/TestCLIGenerateC.scala
+++ 
b/daffodil-cli/src/test/scala/org/apache/daffodil/cli/cliTest/TestCLIGenerate.scala
@@ -26,12 +26,12 @@ import org.junit.Assert.assertTrue
 import org.junit.Test
 
 /**
- * Checks that we can run the "daffodil generate c" subcommand with
+ * Checks that we can run the "daffodil generate" subcommand with
  * various options and get expected outputs.
  */
-class TestCLIGenerateC {
+class TestCLIGenerate {
 
-  @Test def test_CLI_Generate_schema(): Unit = {
+  @Test def test_CLI_Generate_C(): Unit = {
     val schema = path(
       
"daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/ex_nums.dfdl.xsd",
     )
@@ -42,7 +42,7 @@ class TestCLIGenerateC {
     }
   }
 
-  @Test def test_CLI_Generate_noC_error(): Unit = {
+  @Test def test_CLI_Generate_noLang_error(): Unit = {
     val schema = path(
       
"daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/ex_nums.dfdl.xsd",
     )
@@ -54,7 +54,7 @@ class TestCLIGenerateC {
     }
   }
 
-  @Test def test_CLI_Generate_otherThanC_error(): Unit = {
+  @Test def test_CLI_Generate_unknownLang_error(): Unit = {
     val schema = path(
       
"daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/ex_nums.dfdl.xsd",
     )
diff --git 
a/daffodil-codegen-c/src/main/resources/org/apache/daffodil/codegen/c/files/Makefile
 
b/daffodil-codegen-c/src/main/resources/org/apache/daffodil/codegen/c/files/Makefile
index c8efabe74..d2191d8ad 100644
--- 
a/daffodil-codegen-c/src/main/resources/org/apache/daffodil/codegen/c/files/Makefile
+++ 
b/daffodil-codegen-c/src/main/resources/org/apache/daffodil/codegen/c/files/Makefile
@@ -1,4 +1,3 @@
-#
 # 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.
diff --git 
a/daffodil-codegen-c/src/test/c/examples/NestedUnion/generated_code.c 
b/daffodil-codegen-c/src/test/examples/NestedUnion/generated_code.c
similarity index 100%
rename from daffodil-codegen-c/src/test/c/examples/NestedUnion/generated_code.c
rename to daffodil-codegen-c/src/test/examples/NestedUnion/generated_code.c
diff --git 
a/daffodil-codegen-c/src/test/c/examples/NestedUnion/generated_code.h 
b/daffodil-codegen-c/src/test/examples/NestedUnion/generated_code.h
similarity index 100%
rename from daffodil-codegen-c/src/test/c/examples/NestedUnion/generated_code.h
rename to daffodil-codegen-c/src/test/examples/NestedUnion/generated_code.h
diff --git a/daffodil-codegen-c/src/test/c/examples/ex_nums/generated_code.c 
b/daffodil-codegen-c/src/test/examples/ex_nums/generated_code.c
similarity index 100%
rename from daffodil-codegen-c/src/test/c/examples/ex_nums/generated_code.c
rename to daffodil-codegen-c/src/test/examples/ex_nums/generated_code.c
diff --git a/daffodil-codegen-c/src/test/c/examples/ex_nums/generated_code.h 
b/daffodil-codegen-c/src/test/examples/ex_nums/generated_code.h
similarity index 100%
rename from daffodil-codegen-c/src/test/c/examples/ex_nums/generated_code.h
rename to daffodil-codegen-c/src/test/examples/ex_nums/generated_code.h
diff --git a/daffodil-codegen-c/src/test/c/examples/padtest/generated_code.c 
b/daffodil-codegen-c/src/test/examples/padtest/generated_code.c
similarity index 98%
rename from daffodil-codegen-c/src/test/c/examples/padtest/generated_code.c
rename to daffodil-codegen-c/src/test/examples/padtest/generated_code.c
index adef89f14..62d41b30e 100644
--- a/daffodil-codegen-c/src/test/c/examples/padtest/generated_code.c
+++ b/daffodil-codegen-c/src/test/examples/padtest/generated_code.c
@@ -76,9 +76,9 @@ static const ERD *const padtest__childrenERDs[2] = {
 
 static const ERD padtest_ERD = {
     {
-        NULL, // namedQName.prefix
+        "pad", // namedQName.prefix
         "padtest", // namedQName.local
-        NULL, // namedQName.ns
+        "urn:padtest", // namedQName.ns
     },
     COMPLEX, // typeCode
     2, // numChildren
diff --git a/daffodil-codegen-c/src/test/c/examples/padtest/generated_code.h 
b/daffodil-codegen-c/src/test/examples/padtest/generated_code.h
similarity index 100%
rename from daffodil-codegen-c/src/test/c/examples/padtest/generated_code.h
rename to daffodil-codegen-c/src/test/examples/padtest/generated_code.h
diff --git 
a/daffodil-codegen-c/src/test/c/examples/variablelen/generated_code.c 
b/daffodil-codegen-c/src/test/examples/variablelen/generated_code.c
similarity index 99%
rename from daffodil-codegen-c/src/test/c/examples/variablelen/generated_code.c
rename to daffodil-codegen-c/src/test/examples/variablelen/generated_code.c
index 4f6ef63d0..94a5273fb 100644
--- a/daffodil-codegen-c/src/test/c/examples/variablelen/generated_code.c
+++ b/daffodil-codegen-c/src/test/examples/variablelen/generated_code.c
@@ -129,9 +129,9 @@ static const ERD *const expressionElement__childrenERDs[4] 
= {
 
 static const ERD expressionElement_ERD = {
     {
-        NULL, // namedQName.prefix
+        "vl", // namedQName.prefix
         "expressionElement", // namedQName.local
-        NULL, // namedQName.ns
+        "urn:variablelen", // namedQName.ns
     },
     COMPLEX, // typeCode
     4, // numChildren
diff --git 
a/daffodil-codegen-c/src/test/c/examples/variablelen/generated_code.h 
b/daffodil-codegen-c/src/test/examples/variablelen/generated_code.h
similarity index 100%
rename from daffodil-codegen-c/src/test/c/examples/variablelen/generated_code.h
rename to daffodil-codegen-c/src/test/examples/variablelen/generated_code.h
diff --git 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/padtest.00.dat.xml
 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/padtest.00.dat.xml
index 8598df10d..d33833dfd 100644
--- 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/padtest.00.dat.xml
+++ 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/padtest.00.dat.xml
@@ -16,9 +16,9 @@
   limitations under the License.
 -->
 
-<padtest>
+<pad:padtest xmlns:pad="urn:padtest">
   <padhexbinary>
     <opaque></opaque>
   </padhexbinary>
   <after>1</after>
-</padtest>
+</pad:padtest>
diff --git 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/padtest.01.dat.xml
 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/padtest.01.dat.xml
index a189676ae..ed32cb337 100644
--- 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/padtest.01.dat.xml
+++ 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/padtest.01.dat.xml
@@ -16,9 +16,9 @@
   limitations under the License.
 -->
 
-<padtest>
+<pad:padtest xmlns:pad="urn:padtest">
   <padhexbinary>
     <opaque>31</opaque>
   </padhexbinary>
   <after>2</after>
-</padtest>
+</pad:padtest>
diff --git 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/padtest.16.dat.xml
 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/padtest.16.dat.xml
index e7d94fa86..48950d4d7 100644
--- 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/padtest.16.dat.xml
+++ 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/padtest.16.dat.xml
@@ -16,9 +16,9 @@
   limitations under the License.
 -->
 
-<padtest>
+<pad:padtest xmlns:pad="urn:padtest">
   <padhexbinary>
     <opaque>31323334353637383930414243444546</opaque>
   </padhexbinary>
   <after>17</after>
-</padtest>
+</pad:padtest>
diff --git 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/padtest.17.dat.xml
 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/padtest.17.dat.xml
index a8500e968..4b6abbc30 100644
--- 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/padtest.17.dat.xml
+++ 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/padtest.17.dat.xml
@@ -16,9 +16,9 @@
   limitations under the License.
 -->
 
-<padtest>
+<pad:padtest xmlns:pad="urn:padtest">
   <padhexbinary>
     <opaque>3132333435363738393041424344454647</opaque>
   </padhexbinary>
   <after>18</after>
-</padtest>
+</pad:padtest>
diff --git 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.00.dat.xml
 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.00.dat.xml
index 966cf9218..cfc37f3b7 100644
--- 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.00.dat.xml
+++ 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.00.dat.xml
@@ -16,9 +16,9 @@
   limitations under the License.
 -->
 
-<expressionElement>
+<vl:expressionElement xmlns:vl="urn:variablelen">
   <before>0</before>
   <variablelen_size>0</variablelen_size>
   <after>1</after>
   <after>2</after>
-</expressionElement>
+</vl:expressionElement>
diff --git 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.01.dat.xml
 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.01.dat.xml
index 3a9881c94..71481b771 100644
--- 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.01.dat.xml
+++ 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.01.dat.xml
@@ -16,10 +16,10 @@
   limitations under the License.
 -->
 
-<expressionElement>
+<vl:expressionElement xmlns:vl="urn:variablelen">
   <before>0</before>
   <variablelen_size>1</variablelen_size>
   <variablelen>1</variablelen>
   <after>1</after>
   <after>2</after>
-</expressionElement>
+</vl:expressionElement>
diff --git 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.16.dat.xml
 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.16.dat.xml
index 672733076..bf5673313 100644
--- 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.16.dat.xml
+++ 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.16.dat.xml
@@ -16,7 +16,7 @@
   limitations under the License.
 -->
 
-<expressionElement>
+<vl:expressionElement xmlns:vl="urn:variablelen">
   <before>0</before>
   <variablelen_size>16</variablelen_size>
   <variablelen>1</variablelen>
@@ -37,4 +37,4 @@
   <variablelen>16</variablelen>
   <after>1</after>
   <after>2</after>
-</expressionElement>
+</vl:expressionElement>
diff --git 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.17.dat.xml
 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.17.dat.xml
index ef0478683..39fcd679b 100644
--- 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.17.dat.xml
+++ 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.17.dat.xml
@@ -16,7 +16,7 @@
   limitations under the License.
 -->
 
-<expressionElement>
+<vl:expressionElement xmlns:vl="urn:variablelen">
   <before>0</before>
   <variablelen_size>17</variablelen_size>
   <variablelen>1</variablelen>
@@ -38,4 +38,4 @@
   <variablelen>17</variablelen>
   <after>1</after>
   <after>2</after>
-</expressionElement>
+</vl:expressionElement>
diff --git 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.expression.dat.xml
 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.expression.dat.xml
index 3b012cf54..8220e26f0 100644
--- 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.expression.dat.xml
+++ 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.expression.dat.xml
@@ -16,11 +16,11 @@
   limitations under the License.
 -->
 
-<expressionElement>
+<vl:expressionElement xmlns:vl="urn:variablelen">
   <before>0</before>
   <variablelen_size>2</variablelen_size>
   <variablelen>1</variablelen>
   <variablelen>2</variablelen>
   <after>1</after>
   <after>2</after>
-</expressionElement>
+</vl:expressionElement>
diff --git 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.fixed.dat.xml
 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.fixed.dat.xml
index f342f7ff9..775ed375d 100644
--- 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.fixed.dat.xml
+++ 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.fixed.dat.xml
@@ -16,11 +16,11 @@
   limitations under the License.
 -->
 
-<fixedElement>
+<vl:fixedElement xmlns:vl="urn:variablelen">
   <before>0</before>
   <variablelen_size>2</variablelen_size>
   <variablelen>1</variablelen>
   <variablelen>2</variablelen>
   <after>1</after>
   <after>2</after>
-</fixedElement>
+</vl:fixedElement>
diff --git 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.implicit.dat.xml
 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.implicit.dat.xml
index 8f7d3fc10..914a4df1d 100644
--- 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.implicit.dat.xml
+++ 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.implicit.dat.xml
@@ -16,9 +16,9 @@
   limitations under the License.
 -->
 
-<implicitElement>
+<vl:implicitElement xmlns:vl="urn:variablelen">
   <before>0</before>
   <variablelen_size>2</variablelen_size>
   <variablelen>1</variablelen>
   <variablelen>2</variablelen>
-</implicitElement>
+</vl:implicitElement>
diff --git 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.parsed.dat.xml
 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.parsed.dat.xml
index f340a6448..bd0f27b07 100644
--- 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.parsed.dat.xml
+++ 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.parsed.dat.xml
@@ -16,9 +16,9 @@
   limitations under the License.
 -->
 
-<parsedElement>
+<vl:parsedElement xmlns:vl="urn:variablelen">
   <before>0</before>
   <variablelen_size>2</variablelen_size>
   <variablelen>1</variablelen>
   <variablelen>2</variablelen>
-</parsedElement>
+</vl:parsedElement>
diff --git 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.stopValue.dat.xml
 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.stopValue.dat.xml
index 8ef475641..fd37f8041 100644
--- 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.stopValue.dat.xml
+++ 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/infosets/variablelen.stopValue.dat.xml
@@ -16,11 +16,11 @@
   limitations under the License.
 -->
 
-<stopValueElement>
+<vl:stopValueElement xmlns:vl="urn:variablelen">
   <before>0</before>
   <variablelen_size>2</variablelen_size>
   <variablelen>1</variablelen>
   <variablelen>2</variablelen>
   <after>1</after>
   <after>2</after>
-</stopValueElement>
+</vl:stopValueElement>
diff --git 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/padtest.dfdl.xsd
 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/padtest.dfdl.xsd
index d9963b3c4..fcd18daad 100644
--- 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/padtest.dfdl.xsd
+++ 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/padtest.dfdl.xsd
@@ -16,53 +16,55 @@
   limitations under the License.
 -->
 
-<xs:schema
- elementFormDefault="qualified"
- xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/";
- xmlns:xs="http://www.w3.org/2001/XMLSchema";>
+<schema
+  targetNamespace="urn:padtest"
+  xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/";
+  xmlns:pad="urn:padtest"
+  xmlns:xs="http://www.w3.org/2001/XMLSchema";
+  xmlns="http://www.w3.org/2001/XMLSchema";>
 
-  <!-- Binary data format bindings -->
+  <!-- Binary representation properties -->
 
-  <xs:include 
schemaLocation="org/apache/daffodil/xsd/DFDLGeneralFormat.dfdl.xsd"/>
-  <xs:annotation>
-    <xs:appinfo source="http://www.ogf.org/dfdl/";>
+  <include 
schemaLocation="org/apache/daffodil/xsd/DFDLGeneralFormat.dfdl.xsd"/>
+  <annotation>
+    <appinfo source="http://www.ogf.org/dfdl/";>
       <dfdl:format
-        ref="GeneralFormat"
         binaryBooleanFalseRep="0"
         binaryBooleanTrueRep="1"
         fillByte="%NUL;"
         prefixIncludesPrefixLength="no"
+        ref="pad:GeneralFormat"
         representation="binary"/>
-    </xs:appinfo>
-  </xs:annotation>
+    </appinfo>
+  </annotation>
 
-  <!-- Types for testing -->
+  <!-- Root element (padtest) -->
 
-  <xs:simpleType name="length">
-    <xs:restriction base="xs:unsignedInt"/>
-  </xs:simpleType>
+  <element name="padtest" type="pad:padtest"/>
 
-  <xs:complexType name="padhexbinary">
-    <xs:sequence>
+  <!-- Types (length, padhexbinary, padtest -->
+
+  <simpleType name="length">
+    <restriction base="xs:unsignedInt"/>
+  </simpleType>
+
+  <complexType name="padhexbinary">
+    <sequence>
       <!-- Store variable-length opaque bytes -->
-      <xs:element name="opaque" type="xs:hexBinary"
+      <element name="opaque" type="xs:hexBinary"
                   dfdl:lengthKind="prefixed"
                   dfdl:lengthUnits="bytes"
-                  dfdl:prefixLengthType="length"/>
+                  dfdl:prefixLengthType="pad:length"/>
       <!-- Pad "padhexbinary" to a multiple of 4 bytes -->
-      <xs:sequence dfdl:alignment="4" dfdl:alignmentUnits="bytes"/>
-    </xs:sequence>
-  </xs:complexType>
-
-  <xs:complexType name="padtest">
-    <xs:sequence>
-      <xs:element name="padhexbinary" type="padhexbinary"/>
-      <xs:element name="after" type="xs:unsignedInt"/>
-    </xs:sequence>
-  </xs:complexType>
-
-  <!-- Root elements for testing -->
+      <sequence dfdl:alignment="4" dfdl:alignmentUnits="bytes"/>
+    </sequence>
+  </complexType>
 
-  <xs:element name="padtest" type="padtest"/>
+  <complexType name="padtest">
+    <sequence>
+      <element name="padhexbinary" type="pad:padhexbinary"/>
+      <element name="after" type="xs:unsignedInt"/>
+    </sequence>
+  </complexType>
 
-</xs:schema>
+</schema>
diff --git 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/padtest.tdml
 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/padtest.tdml
index 37278b5f4..cf1175278 100644
--- 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/padtest.tdml
+++ 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/padtest.tdml
@@ -16,54 +16,32 @@
   limitations under the License.
 -->
 
+<!--
+    Run all tests with each backend
+    daffodil test -i -I daffodil padtest.tdml
+    daffodil test -i -I daffodilC padtest.tdml
+
+    Or you can debug specific steps in isolation, see below.
+
+    Generate and compile C files
+    daffodil generate c -s padtest.dfdl.xsd && make -C c
+-->
 <tdml:testSuite
   defaultRoundTrip="onePass"
-  description="TDML tests for padtest.dfdl.xsd"
-  xmlns:daf="urn:ogf:dfdl:2013:imp:daffodil.apache.org:2018:ext"
-  xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/";
   xmlns:tdml="http://www.ibm.com/xmlns/dfdl/testData";>
 
-  <!--
-      Run all tests:
-
-      daffodil test -i -I daffodil padtest.tdml
-      daffodil test -i -I daffodilC padtest.tdml
-
-      Or you can debug specific steps in isolation:
+  <!-- Test several sizes of the padtest (0, 1, 16, 17) -->
 
-      mkdir c
+  <!--
       daffodil parse -s padtest.dfdl.xsd -o c/padtest.00.dat.xml 
data/padtest.00.dat
       daffodil unparse -s padtest.dfdl.xsd -o c/padtest.00.dat 
infosets/padtest.00.dat.xml
 
-      daffodil parse -s padtest.dfdl.xsd -o c/padtest.01.dat.xml 
data/padtest.01.dat
-      daffodil unparse -s padtest.dfdl.xsd -o c/padtest.01.dat 
infosets/padtest.01.dat.xml
-
-      daffodil parse -s padtest.dfdl.xsd -o c/padtest.16.dat.xml 
data/padtest.16.dat
-      daffodil unparse -s padtest.dfdl.xsd -o c/padtest.16.dat 
infosets/padtest.16.dat.xml
-
-      daffodil parse -s padtest.dfdl.xsd -o c/padtest.17.dat.xml 
data/padtest.17.dat
-      daffodil unparse -s padtest.dfdl.xsd -o c/padtest.17.dat 
infosets/padtest.17.dat.xml
-
-      daffodil generate c -s padtest.dfdl.xsd && cd c && make
       c/daffodil parse -o c/padtest.00.dat.xml data/padtest.00.dat
       c/daffodil unparse -o c/padtest.00.dat infosets/padtest.00.dat.xml
-
-      c/daffodil parse -o c/padtest.01.dat.xml data/padtest.01.dat
-      c/daffodil unparse -o c/padtest.01.dat infosets/padtest.01.dat.xml
-
-      c/daffodil parse -o c/padtest.16.dat.xml data/padtest.16.dat
-      c/daffodil unparse -o c/padtest.16.dat infosets/padtest.16.dat.xml
-
-      c/daffodil parse -o c/padtest.17.dat.xml data/padtest.17.dat
-      c/daffodil unparse -o c/padtest.17.dat infosets/padtest.17.dat.xml
   -->
-
-  <!-- Test several sizes of the padtest (0, 1, 16, 17) -->
-
   <tdml:parserTestCase
     model="padtest.dfdl.xsd"
-    name="padtest_00"
-    root="padtest">
+    name="padtest_00">
     <tdml:document>
       <tdml:documentPart type="file">data/padtest.00.dat</tdml:documentPart>
     </tdml:document>
@@ -72,10 +50,16 @@
     </tdml:infoset>
   </tdml:parserTestCase>
 
+  <!--
+      daffodil parse -s padtest.dfdl.xsd -o c/padtest.01.dat.xml 
data/padtest.01.dat
+      daffodil unparse -s padtest.dfdl.xsd -o c/padtest.01.dat 
infosets/padtest.01.dat.xml
+
+      c/daffodil parse -o c/padtest.01.dat.xml data/padtest.01.dat
+      c/daffodil unparse -o c/padtest.01.dat infosets/padtest.01.dat.xml
+  -->
   <tdml:parserTestCase
     model="padtest.dfdl.xsd"
-    name="padtest_01"
-    root="padtest">
+    name="padtest_01">
     <tdml:document>
       <tdml:documentPart type="file">data/padtest.01.dat</tdml:documentPart>
     </tdml:document>
@@ -84,10 +68,16 @@
     </tdml:infoset>
   </tdml:parserTestCase>
 
+  <!--
+      daffodil parse -s padtest.dfdl.xsd -o c/padtest.16.dat.xml 
data/padtest.16.dat
+      daffodil unparse -s padtest.dfdl.xsd -o c/padtest.16.dat 
infosets/padtest.16.dat.xml
+
+      c/daffodil parse -o c/padtest.16.dat.xml data/padtest.16.dat
+      c/daffodil unparse -o c/padtest.16.dat infosets/padtest.16.dat.xml
+  -->
   <tdml:parserTestCase
     model="padtest.dfdl.xsd"
-    name="padtest_16"
-    root="padtest">
+    name="padtest_16">
     <tdml:document>
       <tdml:documentPart type="file">data/padtest.16.dat</tdml:documentPart>
     </tdml:document>
@@ -96,10 +86,16 @@
     </tdml:infoset>
   </tdml:parserTestCase>
 
+  <!--
+      daffodil parse -s padtest.dfdl.xsd -o c/padtest.17.dat.xml 
data/padtest.17.dat
+      daffodil unparse -s padtest.dfdl.xsd -o c/padtest.17.dat 
infosets/padtest.17.dat.xml
+
+      c/daffodil parse -o c/padtest.17.dat.xml data/padtest.17.dat
+      c/daffodil unparse -o c/padtest.17.dat infosets/padtest.17.dat.xml
+  -->
   <tdml:parserTestCase
     model="padtest.dfdl.xsd"
-    name="padtest_17"
-    root="padtest">
+    name="padtest_17">
     <tdml:document>
       <tdml:documentPart type="file">data/padtest.17.dat</tdml:documentPart>
     </tdml:document>
diff --git 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/variablelen.dfdl.xsd
 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/variablelen.dfdl.xsd
index f0ea92617..45496ec6a 100644
--- 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/variablelen.dfdl.xsd
+++ 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/variablelen.dfdl.xsd
@@ -16,106 +16,110 @@
   limitations under the License.
 -->
 
-<xs:schema
- elementFormDefault="qualified"
- xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/";
- xmlns:xs="http://www.w3.org/2001/XMLSchema";>
+<schema
+  targetNamespace="urn:variablelen"
+  xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/";
+  xmlns:vl="urn:variablelen"
+  xmlns:xs="http://www.w3.org/2001/XMLSchema";
+  xmlns="http://www.w3.org/2001/XMLSchema";>
 
-  <!-- Binary data format bindings -->
+  <!-- Binary representation properties -->
 
-  <xs:include 
schemaLocation="org/apache/daffodil/xsd/DFDLGeneralFormat.dfdl.xsd"/>
-  <xs:annotation>
-    <xs:appinfo source="http://www.ogf.org/dfdl/";>
+  <include 
schemaLocation="org/apache/daffodil/xsd/DFDLGeneralFormat.dfdl.xsd"/>
+  <annotation>
+    <appinfo source="http://www.ogf.org/dfdl/";>
       <dfdl:format
-        ref="GeneralFormat"
         binaryBooleanFalseRep="0"
         binaryBooleanTrueRep="1"
         fillByte="%NUL;"
         prefixIncludesPrefixLength="no"
+        ref="vl:GeneralFormat"
         representation="binary"/>
-    </xs:appinfo>
-  </xs:annotation>
+    </appinfo>
+  </annotation>
 
-  <!-- Types for testing -->
+  <!-- Root elements (fixedElement, implicitElement, parsedElement,
+       expressionElement, stopValueElement) -->
+
+  <element name="fixedElement" type="vl:fixedType"/>
+  <element name="implicitElement" type="vl:implicitType"/>
+  <element name="parsedElement" type="vl:parsedType"/>
+  <element name="expressionElement" type="vl:expressionType"/>
+  <!-- Daffodil doesn't support stopValue (DAFFODIL-501) -->
+  <element name="stopValueElement" type="vl:stopValueType"/>
+
+  <!-- Types (fixedType, implicitType, parsedType, expressionType,
+       stopValueType) -->
 
   <!-- Unsuitable since variable length array must allow 0 to 16 numbers -->
-  <xs:complexType name="fixedType">
-    <xs:sequence>
-      <xs:element name="before" type="xs:unsignedInt" />
-      <xs:element name="variablelen_size" type="xs:unsignedInt" />
-      <xs:element name="variablelen" type="xs:unsignedInt"
+  <complexType name="fixedType">
+    <sequence>
+      <element name="before" type="xs:unsignedInt" />
+      <element name="variablelen_size" type="xs:unsignedInt" />
+      <element name="variablelen" type="xs:unsignedInt"
                   minOccurs="2" maxOccurs="2"
                   dfdl:occursCountKind="fixed" />
       <!-- Yes, can have "after" element after "fixed" array -->
-      <xs:element name="after" type="xs:unsignedInt"
+      <element name="after" type="xs:unsignedInt"
                   minOccurs="2" maxOccurs="2"
                   dfdl:occursCountKind="fixed" />
-    </xs:sequence>
-  </xs:complexType>
+    </sequence>
+  </complexType>
 
   <!-- Unsuitable since "implicit" works only at end of binary data -->
-  <xs:complexType name="implicitType">
-    <xs:sequence>
-      <xs:element name="before" type="xs:unsignedInt" />
-      <xs:element name="variablelen_size" type="xs:unsignedInt" />
-      <xs:element name="variablelen" type="xs:unsignedInt"
+  <complexType name="implicitType">
+    <sequence>
+      <element name="before" type="xs:unsignedInt" />
+      <element name="variablelen_size" type="xs:unsignedInt" />
+      <element name="variablelen" type="xs:unsignedInt"
                   minOccurs="0" maxOccurs="16"
                   dfdl:occursCountKind="implicit" />
       <!-- No, cannot have "after" element after "implicit" array -->
-    </xs:sequence>
-  </xs:complexType>
+    </sequence>
+  </complexType>
 
   <!-- Unsuitable since "parsed" works only at end of binary data -->
-  <xs:complexType name="parsedType">
-    <xs:sequence>
-      <xs:element name="before" type="xs:unsignedInt" />
-      <xs:element name="variablelen_size" type="xs:unsignedInt" />
-      <xs:element name="variablelen" type="xs:unsignedInt"
+  <complexType name="parsedType">
+    <sequence>
+      <element name="before" type="xs:unsignedInt" />
+      <element name="variablelen_size" type="xs:unsignedInt" />
+      <element name="variablelen" type="xs:unsignedInt"
                   minOccurs="0" maxOccurs="16"
                   dfdl:occursCountKind="parsed" />
       <!-- No, cannot have "after" element after "parsed" array -->
-    </xs:sequence>
-  </xs:complexType>
+    </sequence>
+  </complexType>
 
-  <!-- Suitable, although need to support variable length arrays in C -->
-  <xs:complexType name="expressionType">
-    <xs:sequence>
-      <xs:element name="before" type="xs:unsignedInt" />
-      <xs:element name="variablelen_size" type="xs:unsignedInt" />
-      <xs:element name="variablelen" type="xs:unsignedInt"
+  <!-- Suitable, although need codegen support for variable length arrays -->
+  <complexType name="expressionType">
+    <sequence>
+      <element name="before" type="xs:unsignedInt" />
+      <element name="variablelen_size" type="xs:unsignedInt" />
+      <element name="variablelen" type="xs:unsignedInt"
                   minOccurs="0" maxOccurs="16"
                   dfdl:occursCountKind="expression"
                   dfdl:occursCount="{ ../variablelen_size }" />
       <!-- Yes, can have "after" element after "expression" array -->
-      <xs:element name="after" type="xs:unsignedInt"
+      <element name="after" type="xs:unsignedInt"
                   minOccurs="2" maxOccurs="2"
                   dfdl:occursCountKind="fixed" />
-    </xs:sequence>
-  </xs:complexType>
+    </sequence>
+  </complexType>
 
   <!-- Unsuitable since "stopValue" adds extra data -->
-  <xs:complexType name="stopValueType">
-    <xs:sequence>
-      <xs:element name="before" type="xs:unsignedInt" />
-      <xs:element name="variablelen_size" type="xs:unsignedInt" />
-      <xs:element name="variablelen" type="xs:unsignedInt"
+  <complexType name="stopValueType">
+    <sequence>
+      <element name="before" type="xs:unsignedInt" />
+      <element name="variablelen_size" type="xs:unsignedInt" />
+      <element name="variablelen" type="xs:unsignedInt"
                   minOccurs="0" maxOccurs="16"
                   dfdl:occursCountKind="stopValue"
                   dfdl:occursStopValue="0" />
       <!-- Yes, can have "after" element after "stopValue" array -->
-      <xs:element name="after" type="xs:unsignedInt"
+      <element name="after" type="xs:unsignedInt"
                   minOccurs="2" maxOccurs="2"
                   dfdl:occursCountKind="fixed" />
-    </xs:sequence>
-  </xs:complexType>
-
-  <!-- Root elements for testing -->
-
-  <xs:element name="fixedElement" type="fixedType"/>
-  <xs:element name="implicitElement" type="implicitType"/>
-  <xs:element name="parsedElement" type="parsedType"/>
-  <xs:element name="expressionElement" type="expressionType"/>
-  <!-- Daffodil doesn't support stopValue (DAFFODIL-501) -->
-  <xs:element name="stopValueElement" type="stopValueType"/>
+    </sequence>
+  </complexType>
 
-</xs:schema>
+</schema>
diff --git 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/variablelen.tdml
 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/variablelen.tdml
index d5d9aa7ee..3cb4bc44e 100644
--- 
a/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/variablelen.tdml
+++ 
b/daffodil-codegen-c/src/test/resources/org/apache/daffodil/codegen/c/variablelen.tdml
@@ -16,78 +16,31 @@
   limitations under the License.
 -->
 
+<!--
+    Run all tests with each backend
+    daffodil test -i -I daffodil variablelen.tdml
+    daffodil test -i -I daffodilC variablelen.tdml
+
+    Or you can debug specific backends in isolation, see below.
+-->
 <tdml:testSuite
   defaultRoundTrip="onePass"
-  description="TDML tests for variablelen.dfdl.xsd"
-  xmlns:daf="urn:ogf:dfdl:2013:imp:daffodil.apache.org:2018:ext"
-  xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/";
   xmlns:tdml="http://www.ibm.com/xmlns/dfdl/testData";>
 
   <!--
-      Run all tests:
-
-      daffodil test -i -I daffodil variablelen.tdml
-      daffodil test -i -I daffodilC variablelen.tdml
+      Daffodil backend can parse fixedElement
 
-      Or you can debug specific steps in isolation:
-
-      mkdir c
       daffodil parse -r fixedElement -s variablelen.dfdl.xsd -o 
c/variablelen.fixed.dat.xml data/variablelen.fixed.dat
       daffodil unparse -r fixedElement -s variablelen.dfdl.xsd -o 
c/variablelen.fixed.dat infosets/variablelen.fixed.dat.xml
 
-      daffodil parse -r implicitElement -s variablelen.dfdl.xsd -o 
c/variablelen.implicit.dat.xml data/variablelen.implicit.dat
-      daffodil unparse -r implicitElement -s variablelen.dfdl.xsd -o 
c/variablelen.implicit.dat infosets/variablelen.implicit.dat.xml
+      Codegen backends can parse fixedElement too
 
-      daffodil parse -r parsedElement -s variablelen.dfdl.xsd -o 
c/variablelen.parsed.dat.xml data/variablelen.parsed.dat
-      daffodil unparse -r parsedElement -s variablelen.dfdl.xsd -o 
c/variablelen.parsed.dat infosets/variablelen.parsed.dat.xml
-
-      daffodil parse -r expressionElement -s variablelen.dfdl.xsd -o 
c/variablelen.expression.dat.xml data/variablelen.expression.dat
-      daffodil unparse -r expressionElement -s variablelen.dfdl.xsd -o 
c/variablelen.expression.dat infosets/variablelen.expression.dat.xml
+      daffodil generate c -r fixedElement -s variablelen.dfdl.xsd && make -C c
 
-      daffodil parse -r expressionElement -s variablelen.dfdl.xsd -o 
c/variablelen.00.dat.xml data/variablelen.00.dat
-      daffodil unparse -r expressionElement -s variablelen.dfdl.xsd -o 
c/variablelen.00.dat infosets/variablelen.00.dat.xml
-      daffodil parse -r expressionElement -s variablelen.dfdl.xsd -o 
c/variablelen.01.dat.xml data/variablelen.01.dat
-      daffodil unparse -r expressionElement -s variablelen.dfdl.xsd -o 
c/variablelen.01.dat infosets/variablelen.01.dat.xml
-      daffodil parse -r expressionElement -s variablelen.dfdl.xsd -o 
c/variablelen.16.dat.xml data/variablelen.16.dat
-      daffodil unparse -r expressionElement -s variablelen.dfdl.xsd -o 
c/variablelen.16.dat infosets/variablelen.16.dat.xml
-      daffodil parse -r expressionElement -s variablelen.dfdl.xsd -o 
c/variablelen.17.dat.xml data/variablelen.17.dat
-      daffodil unparse -r expressionElement -s variablelen.dfdl.xsd -o 
c/variablelen.17.dat infosets/variablelen.17.dat.xml
-
-      daffodil parse -r stopValueElement -s variablelen.dfdl.xsd -o 
c/variablelen.stopValue.dat.xml data/variablelen.stopValue.dat
-      daffodil unparse -r stopValueElement -s variablelen.dfdl.xsd -o 
c/variablelen.stopValue.dat infosets/variablelen.stopValue.dat.xml
-
-      daffodil generate c -r fixedElement -s variablelen.dfdl.xsd && cd c && 
make
       c/daffodil parse -o c/variablelen.fixed.dat.xml 
data/variablelen.fixed.dat
       c/daffodil unparse -o c/variablelen.fixed.dat 
infosets/variablelen.fixed.dat.xml
-
-      daffodil generate c -r implicitElement -s variablelen.dfdl.xsd && cd c 
&& make
-      c/daffodil parse -o c/variablelen.implicit.dat.xml 
data/variablelen.implicit.dat
-      c/daffodil unparse -o c/variablelen.implicit.dat 
infosets/variablelen.implicit.dat.xml
-
-      daffodil generate c -r parsedElement -s variablelen.dfdl.xsd && cd c && 
make
-      c/daffodil parse -o c/variablelen.parsed.dat.xml 
data/variablelen.parsed.dat
-      c/daffodil unparse -o c/variablelen.parsed.dat 
infosets/variablelen.parsed.dat.xml
-
-      daffodil generate c -r expressionElement -s variablelen.dfdl.xsd && cd c 
&& make
-      c/daffodil parse -o c/variablelen.expression.dat.xml 
data/variablelen.expression.dat
-      c/daffodil unparse -o c/variablelen.expression.dat 
infosets/variablelen.expression.dat.xml
-
-      c/daffodil parse -o c/variablelen.00.dat.xml data/variablelen.00.dat
-      c/daffodil unparse -o c/variablelen.00.dat 
infosets/variablelen.00.dat.xml
-      c/daffodil parse -o c/variablelen.01.dat.xml data/variablelen.01.dat
-      c/daffodil unparse -o c/variablelen.01.dat 
infosets/variablelen.01.dat.xml
-      c/daffodil parse -o c/variablelen.16.dat.xml data/variablelen.16.dat
-      c/daffodil unparse -o c/variablelen.16.dat 
infosets/variablelen.16.dat.xml
-      c/daffodil parse -o c/variablelen.17.dat.xml data/variablelen.17.dat
-      c/daffodil unparse -o c/variablelen.17.dat 
infosets/variablelen.17.dat.xml
-
-      daffodil generate c -r stopValueElement -s variablelen.dfdl.xsd && cd c 
&& make
-      c/daffodil parse -o c/variablelen.stopValue.dat.xml 
data/variablelen.stopValue.dat
-      c/daffodil unparse -o c/variablelen.stopValue.dat 
infosets/variablelen.stopValue.dat.xml
   -->
-
   <tdml:parserTestCase
-    implementations="daffodil daffodilC"
     model="variablelen.dfdl.xsd"
     name="fixed"
     root="fixedElement">
@@ -99,6 +52,19 @@
     </tdml:infoset>
   </tdml:parserTestCase>
 
+  <!--
+      Daffodil backend can parse implicitElement
+
+      daffodil parse -r implicitElement -s variablelen.dfdl.xsd -o 
c/variablelen.implicit.dat.xml data/variablelen.implicit.dat
+      daffodil unparse -r implicitElement -s variablelen.dfdl.xsd -o 
c/variablelen.implicit.dat infosets/variablelen.implicit.dat.xml
+
+      Codegen backends cannot parse implicitElement
+
+      daffodil generate c -r implicitElement -s variablelen.dfdl.xsd && make 
-C c
+
+      c/daffodil parse -o c/variablelen.implicit.dat.xml 
data/variablelen.implicit.dat
+      c/daffodil unparse -o c/variablelen.implicit.dat 
infosets/variablelen.implicit.dat.xml
+  -->
   <tdml:parserTestCase
     implementations="daffodil"
     model="variablelen.dfdl.xsd"
@@ -112,6 +78,19 @@
     </tdml:infoset>
   </tdml:parserTestCase>
 
+  <!--
+      Daffodil backend can parse parsedElement
+
+      daffodil parse -r parsedElement -s variablelen.dfdl.xsd -o 
c/variablelen.parsed.dat.xml data/variablelen.parsed.dat
+      daffodil unparse -r parsedElement -s variablelen.dfdl.xsd -o 
c/variablelen.parsed.dat infosets/variablelen.parsed.dat.xml
+
+      Codegen backends cannot parse parsedElement
+
+      daffodil generate c -r parsedElement -s variablelen.dfdl.xsd && make -C c
+
+      c/daffodil parse -o c/variablelen.parsed.dat.xml 
data/variablelen.parsed.dat
+      c/daffodil unparse -o c/variablelen.parsed.dat 
infosets/variablelen.parsed.dat.xml
+  -->
   <tdml:parserTestCase
     implementations="daffodil"
     model="variablelen.dfdl.xsd"
@@ -125,8 +104,20 @@
     </tdml:infoset>
   </tdml:parserTestCase>
 
+  <!--
+      Daffodil backend can parse expressionElement
+
+      daffodil parse -r expressionElement -s variablelen.dfdl.xsd -o 
c/variablelen.expression.dat.xml data/variablelen.expression.dat
+      daffodil unparse -r expressionElement -s variablelen.dfdl.xsd -o 
c/variablelen.expression.dat infosets/variablelen.expression.dat.xml
+
+      Codegen backends can parse expressionElement too
+
+      daffodil generate c -r expressionElement -s variablelen.dfdl.xsd && make 
-C c
+
+      c/daffodil parse -o c/variablelen.expression.dat.xml 
data/variablelen.expression.dat
+      c/daffodil unparse -o c/variablelen.expression.dat 
infosets/variablelen.expression.dat.xml
+  -->
   <tdml:parserTestCase
-    implementations="daffodil daffodilC"
     model="variablelen.dfdl.xsd"
     name="expression"
     root="expressionElement">
@@ -140,8 +131,14 @@
 
   <!-- Test several sizes of the variable length array (0, 1, 16, 17) -->
 
+  <!--
+      daffodil parse -r expressionElement -s variablelen.dfdl.xsd -o 
c/variablelen.00.dat.xml data/variablelen.00.dat
+      daffodil unparse -r expressionElement -s variablelen.dfdl.xsd -o 
c/variablelen.00.dat infosets/variablelen.00.dat.xml
+
+      c/daffodil parse -o c/variablelen.00.dat.xml data/variablelen.00.dat
+      c/daffodil unparse -o c/variablelen.00.dat 
infosets/variablelen.00.dat.xml
+  -->
   <tdml:parserTestCase
-    implementations="daffodil daffodilC"
     model="variablelen.dfdl.xsd"
     name="expression_00"
     root="expressionElement">
@@ -153,8 +150,14 @@
     </tdml:infoset>
   </tdml:parserTestCase>
 
+  <!--
+      daffodil parse -r expressionElement -s variablelen.dfdl.xsd -o 
c/variablelen.01.dat.xml data/variablelen.01.dat
+      daffodil unparse -r expressionElement -s variablelen.dfdl.xsd -o 
c/variablelen.01.dat infosets/variablelen.01.dat.xml
+
+      c/daffodil parse -o c/variablelen.01.dat.xml data/variablelen.01.dat
+      c/daffodil unparse -o c/variablelen.01.dat 
infosets/variablelen.01.dat.xml
+  -->
   <tdml:parserTestCase
-    implementations="daffodil daffodilC"
     model="variablelen.dfdl.xsd"
     name="expression_01"
     root="expressionElement">
@@ -166,8 +169,14 @@
     </tdml:infoset>
   </tdml:parserTestCase>
 
+  <!--
+      daffodil parse -r expressionElement -s variablelen.dfdl.xsd -o 
c/variablelen.16.dat.xml data/variablelen.16.dat
+      daffodil unparse -r expressionElement -s variablelen.dfdl.xsd -o 
c/variablelen.16.dat infosets/variablelen.16.dat.xml
+
+      c/daffodil parse -o c/variablelen.16.dat.xml data/variablelen.16.dat
+      c/daffodil unparse -o c/variablelen.16.dat 
infosets/variablelen.16.dat.xml
+  -->
   <tdml:parserTestCase
-    implementations="daffodil daffodilC"
     model="variablelen.dfdl.xsd"
     name="expression_16"
     root="expressionElement">
@@ -179,6 +188,12 @@
     </tdml:infoset>
   </tdml:parserTestCase>
 
+  <!--
+      Daffodil backend can parse expressionElement > 16
+
+      daffodil parse -r expressionElement -s variablelen.dfdl.xsd -o 
c/variablelen.17.dat.xml data/variablelen.17.dat
+      daffodil unparse -r expressionElement -s variablelen.dfdl.xsd -o 
c/variablelen.17.dat infosets/variablelen.17.dat.xml
+  -->
   <tdml:parserTestCase
     implementations="daffodil"
     model="variablelen.dfdl.xsd"
@@ -192,12 +207,16 @@
     </tdml:infoset>
   </tdml:parserTestCase>
 
-  <!-- Can't test 17C since daffodilC supports only static memory arrays  -->
+  <!--
+      Codegen backends cannot parse expressionElement > 16 since they cannot 
resize arrays
 
+      c/daffodil parse -o c/variablelen.17.dat.xml data/variablelen.17.dat
+      c/daffodil unparse -o c/variablelen.17.dat 
infosets/variablelen.17.dat.xml
+  -->
   <tdml:parserTestCase
     implementations="daffodilC"
     model="variablelen.dfdl.xsd"
-    name="expression_17C"
+    name="expression_17_error"
     root="expressionElement">
     <tdml:document>
       <tdml:documentPart 
type="file">data/variablelen.17.dat</tdml:documentPart>
@@ -209,10 +228,20 @@
     </tdml:errors>
   </tdml:parserTestCase>
 
-  <!-- Can't test stopValue since Daffodil doesn't support stopValue 
(DAFFODIL-501) -->
+  <!--
+      Daffodil backend cannot parse stopValueElement since stopValue isn't 
supported yet (DAFFODIL-501)
+
+      daffodil parse -r stopValueElement -s variablelen.dfdl.xsd -o 
c/variablelen.stopValue.dat.xml data/variablelen.stopValue.dat
+      daffodil unparse -r stopValueElement -s variablelen.dfdl.xsd -o 
c/variablelen.stopValue.dat infosets/variablelen.stopValue.dat.xml
+
+      Codegen backends cannot parse stopValueElement either
+
+      daffodil generate c -r stopValueElement -s variablelen.dfdl.xsd && make 
-C c
 
+      c/daffodil parse -o c/variablelen.stopValue.dat.xml 
data/variablelen.stopValue.dat
+      c/daffodil unparse -o c/variablelen.stopValue.dat 
infosets/variablelen.stopValue.dat.xml
+  -->
   <tdml:parserTestCase
-    implementations="daffodil daffodilC"
     model="variablelen.dfdl.xsd"
     name="stopValue"
     root="stopValueElement">
diff --git 
a/daffodil-tdml-processor/src/main/scala/org/apache/daffodil/processor/tdml/DaffodilCTDMLDFDLProcessor.scala
 
b/daffodil-tdml-processor/src/main/scala/org/apache/daffodil/processor/tdml/DaffodilCTDMLDFDLProcessor.scala
index 1765e45a9..83562c1fa 100644
--- 
a/daffodil-tdml-processor/src/main/scala/org/apache/daffodil/processor/tdml/DaffodilCTDMLDFDLProcessor.scala
+++ 
b/daffodil-tdml-processor/src/main/scala/org/apache/daffodil/processor/tdml/DaffodilCTDMLDFDLProcessor.scala
@@ -45,7 +45,6 @@ import org.apache.daffodil.tdml.processor.TDMLParseResult
 import org.apache.daffodil.tdml.processor.TDMLUnparseResult
 
 import org.xml.sax.SAXParseException
-import os.CommandResult
 
 /**
   * A factory called by the TDML runner to create a TDMLDFDL processor.
@@ -161,12 +160,12 @@ final class DaffodilCTDMLDFDLProcessor(executable: 
os.Path) extends TDMLDFDLProc
         val result = os
           .proc(executable, "-o", outfile, "parse", infile)
           .call(cwd = tempDir, stderr = os.Pipe)
-        new DaffodilCTDMLParseResult(result, lengthLimitInBits, outfile, 
Success)
+        val messages = if (result.chunks.nonEmpty) result.toString() else ""
+        new DaffodilCTDMLParseResult(lengthLimitInBits, outfile, Success, 
messages)
       } catch {
         case e: os.SubprocessException =>
-          val result = e.result
           val parseError = new ParseError(Nope, Nope, Maybe(e), Nope)
-          new DaffodilCTDMLParseResult(result, lengthLimitInBits, outfile, 
Failure(parseError))
+          new DaffodilCTDMLParseResult(lengthLimitInBits, outfile, 
Failure(parseError))
       } finally {
         os.remove.all(tempDir)
       }
@@ -197,13 +196,13 @@ final class DaffodilCTDMLDFDLProcessor(executable: 
os.Path) extends TDMLDFDLProc
           .call(cwd = tempDir, stderr = os.Pipe)
         os.read.stream(outfile).writeBytesTo(output)
         val finalBitPos0b = os.size(outfile) * 8
-        new DaffodilCTDMLUnparseResult(result, finalBitPos0b, Success)
+        val messages = if (result.chunks.nonEmpty) result.toString() else ""
+        new DaffodilCTDMLUnparseResult(finalBitPos0b, Success, messages)
       } catch {
         case e: os.SubprocessException =>
-          val result = e.result
           val finalBitPos0b = os.size(outfile) * 8
           val unparseError = new UnparseError(Nope, Nope, Maybe(e), Nope)
-          new DaffodilCTDMLUnparseResult(result, finalBitPos0b, 
Failure(unparseError))
+          new DaffodilCTDMLUnparseResult(finalBitPos0b, Failure(unparseError))
       } finally {
         os.remove.all(tempDir)
       }
@@ -212,7 +211,10 @@ final class DaffodilCTDMLDFDLProcessor(executable: 
os.Path) extends TDMLDFDLProc
   }
 
   // Complete a round trip from data to infoset and back to data
-  def unparse(parseResult: TDMLParseResult, outStream: OutputStream): 
TDMLUnparseResult = {
+  override def unparse(
+    parseResult: TDMLParseResult,
+    outStream: OutputStream,
+  ): TDMLUnparseResult = {
     val infosetXML = parseResult.getResult
     val res = unparse(infosetXML, outStream)
     res
@@ -223,15 +225,15 @@ final class DaffodilCTDMLDFDLProcessor(executable: 
os.Path) extends TDMLDFDLProc
  * A TDML parse result which captures the result of running the executable
  */
 final class DaffodilCTDMLParseResult(
-  result: CommandResult,
   finalBitPos0b: Long,
   outfile: os.Path,
   processorResult: ProcessorResult,
+  messages: String = "",
 ) extends TDMLParseResult {
 
   private var diagnostics: Seq[Diagnostic] = processorResult match {
     case Success =>
-      if (result.chunks.nonEmpty) 
List(DaffodilCTDMLMessages(result.toString())) else Nil
+      if (messages.nonEmpty) List(DaffodilCTDMLMessages(messages)) else Nil
     case Failure(cause) => List(cause)
   }
 
@@ -286,14 +288,14 @@ object DaffodilCTDMLDataLocation {
  * A TDML unparse result which captures the result of running the executable
  */
 final class DaffodilCTDMLUnparseResult(
-  result: CommandResult,
   override val finalBitPos0b: Long,
   processorResult: ProcessorResult,
+  messages: String = "",
 ) extends TDMLUnparseResult {
 
   private val diagnostics: Seq[Diagnostic] = processorResult match {
     case Success =>
-      if (result.chunks.nonEmpty) 
List(DaffodilCTDMLMessages(result.toString())) else Nil
+      if (messages.nonEmpty) List(DaffodilCTDMLMessages(messages)) else Nil
     case Failure(cause) => List(cause)
   }
 
diff --git 
a/daffodil-test/src/test/scala/org/apache/daffodil/codegen/c/TestVariableLen.scala
 
b/daffodil-test/src/test/scala/org/apache/daffodil/codegen/c/TestVariableLen.scala
index 9526f30ac..eb5fc2041 100644
--- 
a/daffodil-test/src/test/scala/org/apache/daffodil/codegen/c/TestVariableLen.scala
+++ 
b/daffodil-test/src/test/scala/org/apache/daffodil/codegen/c/TestVariableLen.scala
@@ -52,6 +52,6 @@ class TestVariableLen {
   @Test def c_expression_00(): Unit = { runnerC.runOneTest("expression_00") }
   @Test def c_expression_01(): Unit = { runnerC.runOneTest("expression_01") }
   @Test def c_expression_16(): Unit = { runnerC.runOneTest("expression_16") }
-  @Test def c_expression_17(): Unit = { runnerC.runOneTest("expression_17C") }
+  @Test def c_expression_17_error(): Unit = { 
runnerC.runOneTest("expression_17_error") }
   @Test def c_stopValue(): Unit = { runnerC.runOneTest("stopValue") }
 }
diff --git a/project/Rat.scala b/project/Rat.scala
index fee63b1dc..e03e4985f 100644
--- a/project/Rat.scala
+++ b/project/Rat.scala
@@ -39,8 +39,8 @@ object Rat {
     file("daffodil-cli/src/windows/banner.bmp"),
     file("daffodil-cli/src/windows/dialog.bmp"),
 
-    // generated_code.[ch] examples
-    file("daffodil-codegen-c/src/test/c/examples"),
+    // generated code examples
+    file("daffodil-codegen-c/src/test/examples"),
 
     // Apache Rat thinks these files are binary since the file name contains 
".lib"
     file(

Reply via email to