You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@daffodil.apache.org by ja...@apache.org on 2018/12/12 17:57:31 UTC

[incubator-daffodil] branch master updated: Add tunables for textBidi and floating properties

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

jadams pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-daffodil.git


The following commit(s) were added to refs/heads/master by this push:
     new 9ae1b9e  Add tunables for textBidi and floating properties
9ae1b9e is described below

commit 9ae1b9eaa5e366bf26ea3830c9ad166f15bb83ca
Author: Josh Adams <ja...@tresys.com>
AuthorDate: Wed Dec 12 10:57:06 2018 -0500

    Add tunables for textBidi and floating properties
    
    Many schemas may not have these rather uncommon properties defined, but
    they are technically required and according to the DFDL spec missing
    properties should not be defaulted. As a stop gap solution tunables have
    been added for these properties that when enabled will cause an SDE if
    the properties are not defined. If they are not enabled an SDW will be
    shown about the missing property.
    
    DAFFODIL-1720
---
 .../org/apache/daffodil/dsom/ElementBase.scala     |   9 +
 .../apache/daffodil/dsom/TermEncodingMixin.scala   |  10 +-
 .../org/apache/daffodil/api/DaffodilTunables.scala |  18 +-
 .../scala/org/apache/daffodil/api/WarnID.scala     |   2 +
 .../resources/org/apache/daffodil/xsd/dafext.xsd   |   2 +
 .../daffodil/section00/general/tunables.tdml       | 343 ++++++++++++++++++++-
 .../daffodil/section00/general/TestGeneral.scala   |   9 +
 7 files changed, 387 insertions(+), 6 deletions(-)

diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ElementBase.scala b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ElementBase.scala
index 812d2bc..e318f06 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ElementBase.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ElementBase.scala
@@ -94,6 +94,7 @@ trait ElementBase
   requiredEvaluations(if (hasFractionDigits) fractionDigits)
   requiredEvaluations(erd.preSerialization)
   requiredEvaluations(checkForAlignmentAmbiguity)
+  requiredEvaluations(checkFloating)
 
   def name: String
 
@@ -1233,4 +1234,12 @@ trait ElementBase
     }
   }
 
+  private lazy val optionFloating = findPropertyOption("floating")
+
+  private def checkFloating = (optionFloating.isDefined, tunable.requireFloatingProperty) match {
+    case (false, false) => SDW(WarnID.FloatingError, "Property 'dfdl:floating' is required but not defined.")
+    case (false, true) => floating
+    case (_, _) => this.subset((floating eq YesNo.No), "Property value floating='yes' is not supported.")
+  }
+
 }
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/TermEncodingMixin.scala b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/TermEncodingMixin.scala
index 34e3890..bf95200 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/TermEncodingMixin.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/TermEncodingMixin.scala
@@ -36,10 +36,10 @@ trait TermEncodingMixin extends KnownEncodingMixin { self: Term =>
 
   private lazy val optionTextBidi = findPropertyOption("textBidi")
 
-  private def checkTextBidi = {
-    this.subset(
-      !optionTextBidi.isDefined || (optionTextBidi.isDefined && (textBidi eq YesNo.No)),
-      "Property value textBidi='yes' is not supported.")
+  private def checkTextBidi = (optionTextBidi.isDefined, self.tunable.requireTextBidiProperty) match {
+    case (false, false) => SDW(WarnID.TextBidiError, "Property 'dfdl:textBidi' is required but not defined.")
+    case (false, true) => textBidi
+    case (_, _) => this.subset((textBidi eq YesNo.No), "Property value textBidi='yes' is not supported.")
   }
 
   protected final lazy val defaultEncodingErrorPolicy = {
@@ -47,6 +47,8 @@ trait TermEncodingMixin extends KnownEncodingMixin { self: Term =>
       if (self.tunable.requireEncodingErrorPolicyProperty) {
         encodingErrorPolicy
       } else {
+        if (!optionEncodingErrorPolicy.isDefined)
+          SDW(WarnID.EncodingErrorPolicyError, "Property 'dfdl:encodingErrorPolicy' is required but not defined, using 'replace' by default.")
         optionEncodingErrorPolicy.getOrElse(EncodingErrorPolicy.Replace)
       }
     if (policy == EncodingErrorPolicy.Error) {
diff --git a/daffodil-lib/src/main/scala/org/apache/daffodil/api/DaffodilTunables.scala b/daffodil-lib/src/main/scala/org/apache/daffodil/api/DaffodilTunables.scala
index 87bb0ba..258e892 100644
--- a/daffodil-lib/src/main/scala/org/apache/daffodil/api/DaffodilTunables.scala
+++ b/daffodil-lib/src/main/scala/org/apache/daffodil/api/DaffodilTunables.scala
@@ -73,12 +73,26 @@ case class DaffodilTunables(
   val requireBitOrderProperty: Boolean = false,
   //
   // If true, require that the encodingErrorPolicy property is specified. If
-  // false, use a default value not defined in a schema
+  // false, use a default value not defined in a schema and warn about missing property
   //
   // Looks to be compile-time as it gets 'tunable' from Term.
   //
   val requireEncodingErrorPolicyProperty: Boolean = false,
   //
+  // If true, require that the encodingErrorPolicy property is specified. If
+  // false, warn about missing property
+  //
+  // Looks to be compile-time as it gets 'tunable' from Term.
+  //
+  val requireTextBidiProperty: Boolean = false,
+  //
+  // If true, require that the encodingErrorPolicy property is specified. If
+  // false, warn about missing property
+  //
+  // Looks to be compile-time as it gets 'tunable' from Term.
+  //
+  val requireFloatingProperty: Boolean = false,
+  //
   // Whether to compile a schema to support parsing, unparsing, both, or to use
   // the daf:parseUnparsePolicy from the root node. None means to use the
   // policy from the schema, otherwise use whatever the value is
@@ -215,6 +229,8 @@ case class DaffodilTunables(
       }
       case "requirebitorderproperty" => this.copy(requireBitOrderProperty = java.lang.Boolean.valueOf(value))
       case "requireencodingerrorpolicyproperty" => this.copy(requireEncodingErrorPolicyProperty = java.lang.Boolean.valueOf(value))
+      case "requiretextbidiproperty" => this.copy(requireTextBidiProperty = java.lang.Boolean.valueOf(value))
+      case "requirefloatingproperty" => this.copy(requireFloatingProperty = java.lang.Boolean.valueOf(value))
       case "maxskiplengthinbytes" => this.copy(maxSkipLengthInBytes = java.lang.Long.valueOf(value))
       case "maxbinarydecimalvirtualpoint" => this.copy(maxBinaryDecimalVirtualPoint = java.lang.Integer.valueOf(value))
       case "minbinarydecimalvirtualpoint" => this.copy(minBinaryDecimalVirtualPoint = java.lang.Integer.valueOf(value))
diff --git a/daffodil-lib/src/main/scala/org/apache/daffodil/api/WarnID.scala b/daffodil-lib/src/main/scala/org/apache/daffodil/api/WarnID.scala
index 5b73475..2129a3b 100644
--- a/daffodil-lib/src/main/scala/org/apache/daffodil/api/WarnID.scala
+++ b/daffodil-lib/src/main/scala/org/apache/daffodil/api/WarnID.scala
@@ -60,6 +60,8 @@ object WarnID extends PropsEnum[WarnID] {
    */
   case object DeprecatedPropertySeparatorPolicy extends WarnID; forceConstruction(DeprecatedPropertySeparatorPolicy)
   case object EncodingErrorPolicyError extends WarnID; forceConstruction(EncodingErrorPolicyError)
+  case object TextBidiError extends WarnID; forceConstruction(TextBidiError)
+  case object FloatingError extends WarnID; forceConstruction(FloatingError)
   case object EscapeSchemeRefUndefined extends WarnID; forceConstruction(EscapeSchemeRefUndefined)
   case object FacetExplicitLengthOutOfRange extends WarnID; forceConstruction(FacetExplicitLengthOutOfRange)
   case object InconsistentLengthKind extends WarnID; forceConstruction(InconsistentLengthKind)
diff --git a/daffodil-propgen/src/main/resources/org/apache/daffodil/xsd/dafext.xsd b/daffodil-propgen/src/main/resources/org/apache/daffodil/xsd/dafext.xsd
index 1e9050c..df6b8e5 100644
--- a/daffodil-propgen/src/main/resources/org/apache/daffodil/xsd/dafext.xsd
+++ b/daffodil-propgen/src/main/resources/org/apache/daffodil/xsd/dafext.xsd
@@ -85,6 +85,8 @@
       <xsd:sequence>
         <xsd:element name="requireBitOrderProperty" minOccurs="0" type="xsd:boolean" />
         <xsd:element name="requireEncodingErrorPolicyProperty" minOccurs="0" type="xsd:boolean" />
+        <xsd:element name="requireTextBidiProperty" minOccurs="0" type="xsd:boolean" />
+        <xsd:element name="requireFloatingProperty" minOccurs="0" type="xsd:boolean" />
         <xsd:element name="maxFieldContentLengthInBytes" minOccurs="0" type="xsd:int" />
         <xsd:element name="maxOccursBounds" minOccurs="0" type="xsd:int" />
         <xsd:element name="maxSkipLengthInBytes" minOccurs="0" type="xsd:int" />
diff --git a/daffodil-test/src/test/resources/org/apache/daffodil/section00/general/tunables.tdml b/daffodil-test/src/test/resources/org/apache/daffodil/section00/general/tunables.tdml
index 79f87dc..46848c0 100644
--- a/daffodil-test/src/test/resources/org/apache/daffodil/section00/general/tunables.tdml
+++ b/daffodil-test/src/test/resources/org/apache/daffodil/section00/general/tunables.tdml
@@ -50,6 +50,48 @@
 		</daf:tunables>
 	</tdml:defineConfig>
 
+	<tdml:defineConfig name="cfg_requireTextBidiPropertyTrue">
+		<daf:tunables xmlns="http://www.w3.org/2001/XMLSchema"
+			xmlns:xs="http://www.w3.org/2001/XMLSchema">
+			<daf:requireTextBidiProperty>true</daf:requireTextBidiProperty>
+		</daf:tunables>
+	</tdml:defineConfig>
+
+	<tdml:defineConfig name="cfg_requireTextBidiPropertyFalse">
+		<daf:tunables xmlns="http://www.w3.org/2001/XMLSchema"
+			xmlns:xs="http://www.w3.org/2001/XMLSchema">
+			<daf:requireTextBidiProperty>false</daf:requireTextBidiProperty>
+		</daf:tunables>
+	</tdml:defineConfig>
+
+	<tdml:defineConfig name="cfg_requireFloatingPropertyTrue">
+		<daf:tunables xmlns="http://www.w3.org/2001/XMLSchema"
+			xmlns:xs="http://www.w3.org/2001/XMLSchema">
+			<daf:requireFloatingProperty>true</daf:requireFloatingProperty>
+		</daf:tunables>
+	</tdml:defineConfig>
+
+	<tdml:defineConfig name="cfg_requireFloatingPropertyFalse">
+		<daf:tunables xmlns="http://www.w3.org/2001/XMLSchema"
+			xmlns:xs="http://www.w3.org/2001/XMLSchema">
+			<daf:requireFloatingProperty>false</daf:requireFloatingProperty>
+		</daf:tunables>
+	</tdml:defineConfig>
+
+	<tdml:defineConfig name="cfg_requireEncodingErrorPolicyPropertyTrue">
+		<daf:tunables xmlns="http://www.w3.org/2001/XMLSchema"
+			xmlns:xs="http://www.w3.org/2001/XMLSchema">
+			<daf:requireEncodingErrorPolicyProperty>true</daf:requireEncodingErrorPolicyProperty>
+		</daf:tunables>
+	</tdml:defineConfig>
+
+	<tdml:defineConfig name="cfg_requireEncodingErrorPolicyPropertyFalse">
+		<daf:tunables xmlns="http://www.w3.org/2001/XMLSchema"
+			xmlns:xs="http://www.w3.org/2001/XMLSchema">
+			<daf:requireEncodingErrorPolicyProperty>false</daf:requireEncodingErrorPolicyProperty>
+		</daf:tunables>
+	</tdml:defineConfig>
+
 	<tdml:defineSchema name="unqualifiedPathStep" elementFormDefault="unqualified">
 		<xs:include schemaLocation="org/apache/daffodil/xsd/DFDLGeneralFormat.dfdl.xsd" />
 
@@ -218,6 +260,305 @@
 			<tdml:error>char</tdml:error>
 		</tdml:errors>
 
-	</tdml:parserTestCase>
+  </tdml:parserTestCase>
+
+	<tdml:defineSchema name="missingTextBidi">
+		<xs:include schemaLocation="org/apache/daffodil/xsd/DFDLGeneralFormat.dfdl.xsd" />
+
+    <dfdl:format lengthKind="implicit" leadingSkip="0" sequenceKind="ordered" representation="text"
+      trailingSkip="0" encoding="US-ASCII" alignment="1" alignmentUnits="bytes" initiator=""
+      terminator="" separator="" ignoreCase="no" occursCountKind="implicit" lengthUnits="bytes"
+      initiatedContent="no" textPadKind="none" truncateSpecifiedLengthString="no" textTrimKind="none"
+      escapeSchemeRef="" encodingErrorPolicy="replace"/>
+
+		<xs:element name="root">
+			<xs:complexType>
+				<xs:sequence>
+					<xs:element name="char" type="xs:string" maxOccurs="unbounded" dfdl:lengthKind="explicit" dfdl:length="1" />
+				</xs:sequence>
+			</xs:complexType>
+		</xs:element>
+  </tdml:defineSchema>
+
+	<tdml:parserTestCase
+		name="requireTextBidiTrue" root="root"
+		model="missingTextBidi" description="Tunables - maxOccursBounds"
+		config="cfg_requireTextBidiPropertyTrue">
+
+		<tdml:document>
+			<tdml:documentPart type="text">1234</tdml:documentPart>
+		</tdml:document>
+
+    <tdml:errors>
+      <tdml:error>Property</tdml:error>
+      <tdml:error>textBidi</tdml:error>
+      <tdml:error>is not defined</tdml:error>
+    </tdml:errors>
+
+  </tdml:parserTestCase>
+
+	<tdml:parserTestCase
+		name="requireTextBidiFalse" root="root"
+		model="missingTextBidi" description="Tunables - maxOccursBounds"
+		config="cfg_requireTextBidiPropertyFalse">
+
+		<tdml:document>
+			<tdml:documentPart type="text">1234</tdml:documentPart>
+		</tdml:document>
+
+    <tdml:warnings>
+      <tdml:warning>dfdl:textBidi</tdml:warning>
+      <tdml:warning>required but not defined</tdml:warning>
+    </tdml:warnings>
+
+		<tdml:infoset>
+			<tdml:dfdlInfoset>
+        <ex:root>
+          <ex:char>1</ex:char>
+          <ex:char>2</ex:char>
+          <ex:char>3</ex:char>
+          <ex:char>4</ex:char>
+        </ex:root>
+      </tdml:dfdlInfoset>
+    </tdml:infoset>
+
+  </tdml:parserTestCase>
+
+	<tdml:defineSchema name="textBidiYes">
+		<xs:include schemaLocation="org/apache/daffodil/xsd/DFDLGeneralFormat.dfdl.xsd" />
+
+    <dfdl:format lengthKind="implicit" leadingSkip="0" sequenceKind="ordered" representation="text"
+      trailingSkip="0" encoding="US-ASCII" alignment="1" alignmentUnits="bytes" initiator=""
+      terminator="" separator="" ignoreCase="no" occursCountKind="implicit" lengthUnits="bytes"
+      initiatedContent="no" textPadKind="none" truncateSpecifiedLengthString="no" textTrimKind="none"
+      escapeSchemeRef="" encodingErrorPolicy="replace" textBidi="yes"/>
+
+		<xs:element name="root">
+			<xs:complexType>
+				<xs:sequence>
+					<xs:element name="char" type="xs:string" maxOccurs="unbounded" dfdl:lengthKind="explicit" dfdl:length="1" />
+				</xs:sequence>
+			</xs:complexType>
+		</xs:element>
+  </tdml:defineSchema>
+
+	<tdml:parserTestCase
+		name="textBidiYes" root="root"
+		model="textBidiYes" description="Tunables - maxOccursBounds"
+		config="cfg_requireTextBidiPropertyFalse">
+
+		<tdml:document>
+			<tdml:documentPart type="text">1234</tdml:documentPart>
+		</tdml:document>
+
+    <tdml:errors>
+      <tdml:error>textBidi='yes'</tdml:error>
+      <tdml:error>is not supported</tdml:error>
+    </tdml:errors>
+
+  </tdml:parserTestCase>
+
+	<tdml:defineSchema name="missingFloating">
+		<xs:include schemaLocation="org/apache/daffodil/xsd/DFDLGeneralFormat.dfdl.xsd" />
+
+    <dfdl:format lengthKind="implicit" leadingSkip="0" sequenceKind="ordered" representation="text"
+      trailingSkip="0" encoding="US-ASCII" alignment="1" alignmentUnits="bytes" initiator=""
+      terminator="" separator="" ignoreCase="no" occursCountKind="implicit" lengthUnits="bytes"
+      initiatedContent="no" textPadKind="none" truncateSpecifiedLengthString="no" textTrimKind="none"
+      escapeSchemeRef="" encodingErrorPolicy="replace" textBidi="no"/>
+
+		<xs:element name="root">
+			<xs:complexType>
+				<xs:sequence>
+					<xs:element name="char" type="xs:string" maxOccurs="unbounded" dfdl:lengthKind="explicit" dfdl:length="1" />
+				</xs:sequence>
+			</xs:complexType>
+		</xs:element>
+  </tdml:defineSchema>
+
+	<tdml:parserTestCase
+		name="requireFloatingTrue" root="root"
+		model="missingFloating" description="Tunables - maxOccursBounds"
+		config="cfg_requireFloatingPropertyTrue">
+
+		<tdml:document>
+			<tdml:documentPart type="text">1234</tdml:documentPart>
+		</tdml:document>
+
+    <tdml:errors>
+      <tdml:error>Property</tdml:error>
+      <tdml:error>floating</tdml:error>
+      <tdml:error>is not defined</tdml:error>
+    </tdml:errors>
+
+  </tdml:parserTestCase>
+
+	<tdml:parserTestCase
+		name="requireFloatingFalse" root="root"
+		model="missingFloating" description="Tunables - maxOccursBounds"
+		config="cfg_requireFloatingPropertyFalse">
+
+		<tdml:document>
+			<tdml:documentPart type="text">1234</tdml:documentPart>
+		</tdml:document>
+
+    <tdml:warnings>
+      <tdml:warning>dfdl:floating</tdml:warning>
+      <tdml:warning>required but not defined</tdml:warning>
+    </tdml:warnings>
+
+		<tdml:infoset>
+			<tdml:dfdlInfoset>
+        <ex:root>
+          <ex:char>1</ex:char>
+          <ex:char>2</ex:char>
+          <ex:char>3</ex:char>
+          <ex:char>4</ex:char>
+        </ex:root>
+      </tdml:dfdlInfoset>
+    </tdml:infoset>
+
+  </tdml:parserTestCase>
+
+	<tdml:defineSchema name="floatingYes">
+		<xs:include schemaLocation="org/apache/daffodil/xsd/DFDLGeneralFormat.dfdl.xsd" />
+
+    <dfdl:format lengthKind="implicit" leadingSkip="0" sequenceKind="ordered" representation="text"
+      trailingSkip="0" encoding="US-ASCII" alignment="1" alignmentUnits="bytes" initiator=""
+      terminator="" separator="" ignoreCase="no" occursCountKind="implicit" lengthUnits="bytes"
+      initiatedContent="no" textPadKind="none" truncateSpecifiedLengthString="no" textTrimKind="none"
+      escapeSchemeRef="" encodingErrorPolicy="replace" textBidi="no" floating="yes"/>
+
+		<xs:element name="root">
+			<xs:complexType>
+				<xs:sequence>
+					<xs:element name="char" type="xs:string" maxOccurs="unbounded" dfdl:lengthKind="explicit" dfdl:length="1" />
+				</xs:sequence>
+			</xs:complexType>
+		</xs:element>
+  </tdml:defineSchema>
+
+	<tdml:parserTestCase
+		name="floatingYes" root="root"
+		model="floatingYes" description="Tunables - maxOccursBounds"
+		config="cfg_requireFloatingPropertyFalse">
+
+		<tdml:document>
+			<tdml:documentPart type="text">1234</tdml:documentPart>
+		</tdml:document>
+
+    <tdml:errors>
+      <tdml:error>floating='yes'</tdml:error>
+      <tdml:error>is not supported</tdml:error>
+    </tdml:errors>
+
+  </tdml:parserTestCase>
+
+	<tdml:defineSchema name="encodingErrorPolicyError">
+		<xs:include schemaLocation="org/apache/daffodil/xsd/DFDLGeneralFormat.dfdl.xsd" />
+
+    <dfdl:format lengthKind="implicit" leadingSkip="0" sequenceKind="ordered" representation="text"
+      trailingSkip="0" encoding="US-ASCII" alignment="1" alignmentUnits="bytes" initiator=""
+      terminator="" separator="" ignoreCase="no" occursCountKind="implicit" lengthUnits="bytes"
+      initiatedContent="no" textPadKind="none" truncateSpecifiedLengthString="no" textTrimKind="none"
+      escapeSchemeRef="" encodingErrorPolicy="error" textBidi="no"/>
+
+		<xs:element name="root">
+			<xs:complexType>
+				<xs:sequence>
+					<xs:element name="char" type="xs:string" maxOccurs="unbounded" dfdl:lengthKind="explicit" dfdl:length="1" />
+				</xs:sequence>
+			</xs:complexType>
+		</xs:element>
+  </tdml:defineSchema>
+
+	<tdml:parserTestCase
+		name="encodingErrorPolicyError" root="root"
+		model="encodingErrorPolicyError" description="Tunables - maxOccursBounds"
+		config="cfg_requireEncodingErrorPolicyPropertyFalse">
+
+		<tdml:document>
+			<tdml:documentPart type="text">1234</tdml:documentPart>
+		</tdml:document>
+
+    <tdml:warnings>
+      <tdml:warning>dfdl:encodingErrorPolicy="error"</tdml:warning>
+      <tdml:warning>is not yet implemented</tdml:warning>
+      <tdml:warning>'replace' value will be used</tdml:warning>
+    </tdml:warnings>
+
+		<tdml:infoset>
+			<tdml:dfdlInfoset>
+        <ex:root>
+          <ex:char>1</ex:char>
+          <ex:char>2</ex:char>
+          <ex:char>3</ex:char>
+          <ex:char>4</ex:char>
+        </ex:root>
+      </tdml:dfdlInfoset>
+    </tdml:infoset>
+
+  </tdml:parserTestCase>
+
+	<tdml:defineSchema name="missingEncodingErrorPolicy">
+		<xs:include schemaLocation="org/apache/daffodil/xsd/DFDLGeneralFormat.dfdl.xsd" />
+
+    <dfdl:format lengthKind="implicit" leadingSkip="0" sequenceKind="ordered" representation="text"
+      trailingSkip="0" encoding="US-ASCII" alignment="1" alignmentUnits="bytes" initiator=""
+      terminator="" separator="" ignoreCase="no" occursCountKind="implicit" lengthUnits="bytes"
+      initiatedContent="no" textPadKind="none" truncateSpecifiedLengthString="no" textTrimKind="none"
+      escapeSchemeRef="" textBidi="no"/>
+
+		<xs:element name="root">
+			<xs:complexType>
+				<xs:sequence>
+					<xs:element name="char" type="xs:string" maxOccurs="unbounded" dfdl:lengthKind="explicit" dfdl:length="1" />
+				</xs:sequence>
+			</xs:complexType>
+		</xs:element>
+  </tdml:defineSchema>
+
+	<tdml:parserTestCase
+		name="requireEncodingErrorPolicyTrue" root="root"
+		model="missingEncodingErrorPolicy" description="Tunables - maxOccursBounds"
+		config="cfg_requireEncodingErrorPolicyPropertyTrue">
+
+		<tdml:document>
+			<tdml:documentPart type="text">1234</tdml:documentPart>
+		</tdml:document>
+
+    <tdml:errors>
+      <tdml:error>encodingErrorPolicy</tdml:error>
+      <tdml:error>is not defined</tdml:error>
+    </tdml:errors>
+
+  </tdml:parserTestCase>
+
+	<tdml:parserTestCase
+		name="requireEncodingErrorPolicyFalse" root="root"
+		model="missingEncodingErrorPolicy" description="Tunables - maxOccursBounds"
+		config="cfg_requireEncodingErrorPolicyPropertyFalse">
+
+		<tdml:document>
+			<tdml:documentPart type="text">1234</tdml:documentPart>
+		</tdml:document>
+
+    <tdml:warnings>
+      <tdml:warning>dfdl:encodingErrorPolicy</tdml:warning>
+      <tdml:warning>required but not defined</tdml:warning>
+    </tdml:warnings>
+
+		<tdml:infoset>
+			<tdml:dfdlInfoset>
+        <ex:root>
+          <ex:char>1</ex:char>
+          <ex:char>2</ex:char>
+          <ex:char>3</ex:char>
+          <ex:char>4</ex:char>
+        </ex:root>
+      </tdml:dfdlInfoset>
+    </tdml:infoset>
+
+  </tdml:parserTestCase>
 
 </tdml:testSuite>
diff --git a/daffodil-test/src/test/scala/org/apache/daffodil/section00/general/TestGeneral.scala b/daffodil-test/src/test/scala/org/apache/daffodil/section00/general/TestGeneral.scala
index 41e6465..a3c9fea 100644
--- a/daffodil-test/src/test/scala/org/apache/daffodil/section00/general/TestGeneral.scala
+++ b/daffodil-test/src/test/scala/org/apache/daffodil/section00/general/TestGeneral.scala
@@ -101,5 +101,14 @@ class TestGeneral {
   @Test def test_unqualifiedPathStepPolicy_defaultNamespace_test_02() { tunables_runner.runOneTest("unqualifiedPathStepPolicy_defaultNamespace_test_02") }
   
   @Test def test_maxOccursBoundsExceeded() { tunables_runner.runOneTest("maxOccursBoundsExceeded") }
+  @Test def test_textBidiYes() { tunables_runner.runOneTest("textBidiYes") }
+  @Test def test_requireTextBidiTrue() { tunables_runner.runOneTest("requireTextBidiTrue") }
+  @Test def test_requireTextBidiFalse() { tunables_runner.runOneTest("requireTextBidiFalse") }
+  @Test def test_floatingYes() { tunables_runner.runOneTest("floatingYes") }
+  @Test def test_requireFloatingTrue() { tunables_runner.runOneTest("requireFloatingTrue") }
+  @Test def test_requireFloatingFalse() { tunables_runner.runOneTest("requireFloatingFalse") }
+  @Test def test_encodingErrorPolicyError() { tunables_runner.runOneTest("encodingErrorPolicyError") }
+  @Test def test_requireEncodingErrorPolicyTrue() { tunables_runner.runOneTest("requireEncodingErrorPolicyTrue") }
+  @Test def test_requireEncodingErrorPolicyFalse() { tunables_runner.runOneTest("requireEncodingErrorPolicyFalse") }
 
 }