This is an automated email from the ASF dual-hosted git repository.
mbeckerle 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 861df2ae6 Added tests of decimalSigned to show that it fails in a few
cases.
861df2ae6 is described below
commit 861df2ae60a83fc83a68777aefc4366efc888bbd
Author: Michael Beckerle <[email protected]>
AuthorDate: Mon Nov 18 12:13:54 2024 -0500
Added tests of decimalSigned to show that it fails in a few cases.
Tests show that parse of negative representations (from packed decimal
reps) does not detect the error when decimalSigned="no".
Test aalso show that unparse of negative values into binary, packed, and
bcd all are broken.
This doesn't fix the issue. Just adds tests to illustrate the
failing cases.
DAFFODIL-2957
---
.../section13/decimal/TestDecimalSigned.tdml | 157 +++++++++++++++++++++
.../section13/decimal/TestDecimalSigned.scala | 60 ++++++++
2 files changed, 217 insertions(+)
diff --git
a/daffodil-test/src/test/resources/org/apache/daffodil/section13/decimal/TestDecimalSigned.tdml
b/daffodil-test/src/test/resources/org/apache/daffodil/section13/decimal/TestDecimalSigned.tdml
new file mode 100644
index 000000000..2c077e397
--- /dev/null
+++
b/daffodil-test/src/test/resources/org/apache/daffodil/section13/decimal/TestDecimalSigned.tdml
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<testSuite
+ description="For type xs:decimal this tests interactions of
decimalSigned='no'
+ with negative values being unparsed and parsed."
+ xmlns="http://www.ibm.com/xmlns/dfdl/testData"
+ xmlns:tdml="http://www.ibm.com/xmlns/dfdl/testData"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:ex="http://example.com"
+ defaultRoundTrip="none">
+
+ <tdml:defineSchema name="s" xmlns="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="unqualified"
useDefaultNamespace="false">
+ <include
schemaLocation="/org/apache/daffodil/xsd/DFDLGeneralFormat.dfdl.xsd"/>
+
+ <dfdl:format ref="ex:GeneralFormat"
+ representation="binary"
+ lengthKind="explicit"
+ binaryDecimalVirtualPoint="2"
+ binaryPackedSignCodes="C D F C"/>
+
+ <element name="r1" type="xs:decimal" dfdl:decimalSigned="no"
dfdl:length="2" dfdl:binaryNumberRep="binary"/>
+
+ <!-- BCD is never signed, so cannot represent a negative value -->
+ <element name="r2" type="xs:decimal" dfdl:decimalSigned="yes"
dfdl:length="2" dfdl:binaryNumberRep="bcd"/>
+
+ <element name="r3" type="xs:decimal" dfdl:decimalSigned="no"
dfdl:length="2" dfdl:binaryNumberRep="packed"/>
+
+ <element name="r4" type="xs:decimal" dfdl:decimalSigned="no"
dfdl:length="2" dfdl:binaryNumberRep="ibm4690Packed"/>
+
+
+ </tdml:defineSchema>
+
+ <parserTestCase name="parseTestDecimalSigned_no_binary" root="r1" model="s"
+ description="decimalSigned='no' works for parsing with
binaryNumberRep='binary'" >
+ <document>
+ <!-- same bytes as -123 as big-endian twos complement 2-bytes -->
+ <documentPart type="byte">FF85</documentPart>
+ </document>
+ <infoset>
+ <dfdlInfoset>
+ <ex:r1>654.13</ex:r1>
+ </dfdlInfoset>
+ </infoset>
+ </parserTestCase>
+
+ <unparserTestCase name="unparseTestDecimalSigned_no_binary" root="r1"
model="s"
+ description="negative values cannot unparse as decimal when
decimalSigned is 'no'" >
+ <infoset>
+ <dfdlInfoset>
+ <ex:r1>-1.23</ex:r1>
+ </dfdlInfoset>
+ <!-- representation of this as 2s complement would be 0xFF85 -->
+ </infoset>
+ <errors>
+ <error>Unparse Error</error>
+ <error>unsigned</error>
+ </errors>
+ </unparserTestCase>
+
+ <parserTestCase name="parseTestdecimalSigned_no_bcd" root="r2" model="s"
+ description="negative values cannot parse as decimal BCD" >
+ <document>
+ <documentPart type="byte">D123</documentPart><!-- unparses as packed -->
+ </document>
+ <errors>
+ <error>Parse Error</error>
+ <error>13</error>
+ </errors>
+ </parserTestCase>
+
+ <unparserTestCase name="unparseTestdecimalSigned_no_bcd" root="r2" model="s"
+ description="negative values cannot unparse as decimal
BCD" >
+ <infoset>
+ <dfdlInfoset>
+ <ex:r2>-1.23</ex:r2>
+ </dfdlInfoset>
+ </infoset>
+ <!-- This should unparse error. Instead it unparses as D123, where that D
is a sign digit.
+ This is not allowed in BCD which is unsigned only -->
+ <document>
+ <documentPart type="byte">0123</documentPart><!-- unparses as packed -->
+ </document>
+ </unparserTestCase>
+
+ <parserTestCase name="parseTestDecimalSigned_no_packed" root="r3" model="s"
+ description="negative packed representation should fail to parse as
decimal when decimalSigned='no'">
+ <document>
+ <documentPart type="byte">
+ 123D
+ </documentPart>
+ </document>
+ <errors>
+ <error>Parse Error</error>
+ <error>unsigned</error>
+ </errors>
+ </parserTestCase>
+
+ <unparserTestCase name="unparseTestDecimalSigned_no_packed" model="s"
+ description="negative values cannot unparse as decimal
when decimalSigned is 'no'" >
+ <infoset>
+ <dfdlInfoset>
+ <ex:r3>-1.23</ex:r3>
+ </dfdlInfoset>
+ </infoset>
+ <errors>
+ <error>Unparse Error</error>
+ <error>unsigned</error>
+ </errors>
+ </unparserTestCase>
+
+ <parserTestCase name="parseTestDecimalSigned_no_ibm4690Packed" root="r4"
model="s"
+ description="negative packed representation should fail to
parse as decimal when decimalSigned='no'">
+ <document>
+ <documentPart type="byte">
+ D123
+ </documentPart>
+ </document>
+ <errors>
+ <error>Parse Error</error>
+ <error>unsigned</error>
+ </errors>
+ </parserTestCase>
+
+ <unparserTestCase name="unparseTestDecimalSigned_no_ibm4690Packed" model="s"
+ description="negative values cannot unparse as decimal
when decimalSigned is 'no'" >
+ <infoset>
+ <dfdlInfoset>
+ <ex:r4>-1.23</ex:r4>
+ </dfdlInfoset>
+ </infoset>
+ <errors>
+ <error>Unparse Error</error>
+ <error>unsigned</error>
+ </errors>
+ </unparserTestCase>
+
+
+</testSuite>
diff --git
a/daffodil-test/src/test/scala/org/apache/daffodil/section13/decimal/TestDecimalSigned.scala
b/daffodil-test/src/test/scala/org/apache/daffodil/section13/decimal/TestDecimalSigned.scala
new file mode 100644
index 000000000..c9ada291c
--- /dev/null
+++
b/daffodil-test/src/test/scala/org/apache/daffodil/section13/decimal/TestDecimalSigned.scala
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.daffodil.section13.decimal
+
+import org.apache.daffodil.tdml.Runner
+
+import org.junit.AfterClass
+import org.junit.Test
+
+object TestDecimalSigned {
+ val testDir = "/org/apache/daffodil/section13/decimal/"
+ val runner: Runner = Runner(testDir, "TestDecimalSigned.tdml")
+
+ @AfterClass def shutDown(): Unit = {
+ runner.reset
+ }
+}
+class TestDecimalSigned {
+ import TestDecimalSigned._
+
+ @Test def parseTestDecimalSigned_no_binary(): Unit =
+ runner.runOneTest("parseTestDecimalSigned_no_binary")
+ @Test def parseTestdecimalSigned_no_bcd(): Unit =
+ runner.runOneTest("parseTestdecimalSigned_no_bcd")
+
+// DAFFODIL-2957 - the tests below all failing
+// Abort with usage error. Should be unparse error.
+// @Test def unparseTestDecimalSigned_no_binary(): Unit =
+// runner.runOneTest("unparseTestDecimalSigned_no_binary")
+// error not detected
+// @Test def unparseTestdecimalSigned_no_bcd(): Unit =
+// runner.runOneTest("unparseTestdecimalSigned_no_bcd")
+// error not detected
+// @Test def parseTestDecimalSigned_no_packed(): Unit =
+// runner.runOneTest("parseTestDecimalSigned_no_packed")
+// error not detected
+// @Test def unparseTestDecimalSigned_no_packed(): Unit =
+// runner.runOneTest("unparseTestDecimalSigned_no_packed")
+// error not detected
+// @Test def parseTestDecimalSigned_no_ibm4690Packed(): Unit =
+// runner.runOneTest("parseTestDecimalSigned_no_ibm4690Packed")
+// error not detected
+// @Test def unparseTestDecimalSigned_no_ibm4690Packed(): Unit =
+// runner.runOneTest("unparseTestDecimalSigned_no_ibm4690Packed")
+}