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(