You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@daffodil.apache.org by ef...@apache.org on 2018/06/04 19:48:03 UTC

[incubator-daffodil] branch master updated: Adding property binaryCalendarRep with values "binarySeconds" and "binaryMilliseconds"

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

efinnegan 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 b3c1849  Adding property binaryCalendarRep with values "binarySeconds" and "binaryMilliseconds"
b3c1849 is described below

commit b3c184995d251021edd65d559bd3726d553c1f8f
Author: Beth Fahl <ef...@tresys.com>
AuthorDate: Wed May 16 15:48:58 2018 -0400

    Adding property binaryCalendarRep with values "binarySeconds" and "binaryMilliseconds"
    
    Adds parsing and unparsing capability for binary representation of xs:dateTime
    with binaryCalendarRep of "binarySeconds" and "binaryMilliseconds", using the
    binaryCalendarEpoch property. Added various checks for restrictions on valid input
    and both positive and negative tests.
    
    Also removed some unnecessary parameters from parsers and unparsers of calendars
    with text representation
    
    DAFFODIL-99
---
 .../daffodil/grammar/ElementBaseGrammarMixin.scala |  26 ++
 .../grammar/primitives/PrimitivesDateTime.scala    |  88 ++++--
 .../unparsers/ConvertBinaryCalendarUnparser.scala  |  84 +++++
 .../unparsers/ConvertTextCalendarUnparser.scala    |  16 +-
 .../processors/parsers/PrimitivesDateTime1.scala   |  65 ++--
 .../ibm-contributed/dpacalbin100_01.dfdl.xsd       |   5 +-
 .../org/apache/daffodil/IBMTests2.scala            |   2 -
 .../test/scala/org/apache/daffodil/IBMTests.scala  |   3 +
 .../section05/simple_types/SimpleTypes.tdml        | 337 ++++++++++++++++++++-
 .../simple_types/TestSimpleTypesDebug.scala        |   2 +
 .../section05/simple_types/TestSimpleTypes.scala   |  21 ++
 11 files changed, 585 insertions(+), 64 deletions(-)

diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/grammar/ElementBaseGrammarMixin.scala b/daffodil-core/src/main/scala/org/apache/daffodil/grammar/ElementBaseGrammarMixin.scala
index 899fba0..76c4be2 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/grammar/ElementBaseGrammarMixin.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/grammar/ElementBaseGrammarMixin.scala
@@ -48,6 +48,7 @@ import org.apache.daffodil.grammar.primitives.CaptureContentLengthStart
 import org.apache.daffodil.grammar.primitives.CaptureValueLengthEnd
 import org.apache.daffodil.grammar.primitives.CaptureValueLengthStart
 import org.apache.daffodil.grammar.primitives.ComplexNilOrContent
+import org.apache.daffodil.grammar.primitives.ConvertBinaryDateTimeSecMilliPrim
 import org.apache.daffodil.grammar.primitives.ConvertTextBooleanPrim
 import org.apache.daffodil.grammar.primitives.ConvertTextBytePrim
 import org.apache.daffodil.grammar.primitives.ConvertTextCombinator
@@ -115,6 +116,7 @@ import org.apache.daffodil.grammar.primitives.ZonedTextIntPrim
 import org.apache.daffodil.processors.TextJustificationType
 import org.apache.daffodil.schema.annotation.props.Found
 import org.apache.daffodil.schema.annotation.props.NotFound
+import org.apache.daffodil.schema.annotation.props.gen.BinaryCalendarRep
 import org.apache.daffodil.schema.annotation.props.gen.BinaryFloatRep
 import org.apache.daffodil.schema.annotation.props.gen.BinaryNumberRep
 import org.apache.daffodil.schema.annotation.props.gen.LengthKind
@@ -462,6 +464,11 @@ trait ElementBaseGrammarMixin
     case PrimType.Short | PrimType.UnsignedShort => 16
     case PrimType.Float | PrimType.Int | PrimType.UnsignedInt | PrimType.Boolean => 32
     case PrimType.Double | PrimType.Long | PrimType.UnsignedLong => 64
+    case PrimType.DateTime => binaryCalendarRep match {
+      case BinaryCalendarRep.BinarySeconds => 32
+      case BinaryCalendarRep.BinaryMilliseconds => 64
+      case _ => schemaDefinitionError("Size of binary data '" + primType.name + "' with binaryCalendarRep='" + binaryCalendarRep + "' cannot be determined implicitly.")
+    }
     case _ => schemaDefinitionError("Size of binary data '" + primType.name + "' cannot be determined implicitly.")
   }
 
@@ -775,6 +782,25 @@ trait ElementBaseGrammarMixin
       }
 
       case PrimType.Boolean => { new BinaryBoolean(this) }
+
+      case PrimType.DateTime | PrimType.Date | PrimType.Time => {
+        (primType, binaryCalendarRep) match {
+          case (PrimType.DateTime, BinaryCalendarRep.BinarySeconds) => (lengthUnits, binaryNumberKnownLengthInBits) match {
+            case (LengthUnits.Bytes, 32) => new ConvertBinaryDateTimeSecMilliPrim(this, binaryNumberKnownLengthInBits)
+            case (_, 32)  => SDE("lengthUnits must be 'bytes' when binaryCalendarRep='binarySeconds'")
+            case (_, n) => SDE("binary xs:dateTime must be 32 bits when binaryCalendarRep='binarySeconds'. Length in bits was %s.", n)
+          }
+          case (_, BinaryCalendarRep.BinarySeconds) => SDE("binaryCalendarRep='binarySeconds' is not allowed with type %s", primType.name)
+          case (PrimType.DateTime, BinaryCalendarRep.BinaryMilliseconds) => (lengthUnits, binaryNumberKnownLengthInBits) match {
+            case (LengthUnits.Bytes, 64) => new ConvertBinaryDateTimeSecMilliPrim(this, binaryNumberKnownLengthInBits)
+            case (_, 64)  => SDE("lengthUnits must be 'bytes' when binaryCalendarRep='binaryMilliseconds'")
+            case (_, n) => SDE("binary xs:dateTime must be 64 bits when binaryCalendarRep='binaryMilliseconds'. Length in bits was %s.", n)
+          }
+          case (_, BinaryCalendarRep.BinaryMilliseconds) => SDE("binaryCalendarRep='binaryMilliseconds' is not allowed with type %s", primType.name)
+          case _ => notYetImplemented("Type %s when representation='binary' and binaryCalendarRep=%s", primType.name, binaryCalendarRep.toString)
+        }
+      }
+
       case _ => notYetImplemented("Type %s when representation='binary'", primType.name)
     }
     res
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/grammar/primitives/PrimitivesDateTime.scala b/daffodil-core/src/main/scala/org/apache/daffodil/grammar/primitives/PrimitivesDateTime.scala
index 47e24d3..e6f275e 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/grammar/primitives/PrimitivesDateTime.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/grammar/primitives/PrimitivesDateTime.scala
@@ -17,29 +17,38 @@
 
 package org.apache.daffodil.grammar.primitives
 
+import java.text.ParsePosition
+import com.ibm.icu.text.SimpleDateFormat
 import com.ibm.icu.util.Calendar
 import com.ibm.icu.util.TimeZone
+import com.ibm.icu.util.ULocale
 import org.apache.daffodil.dsom.ElementBase
 import org.apache.daffodil.grammar.Terminal
 import org.apache.daffodil.schema.annotation.props.gen.CalendarCheckPolicy
 import org.apache.daffodil.schema.annotation.props.gen.CalendarFirstDayOfWeek
 import org.apache.daffodil.schema.annotation.props.gen.CalendarPatternKind
+import org.apache.daffodil.processors.unparsers.ConvertBinaryCalendarSecMilliUnparser
 import org.apache.daffodil.processors.unparsers.ConvertTextCalendarUnparser
 import com.ibm.icu.util.Calendar
 import com.ibm.icu.util.TimeZone
 import org.apache.daffodil.processors.CalendarEv
 import org.apache.daffodil.processors.CalendarLanguageEv
+import org.apache.daffodil.processors.parsers.ConvertBinaryCalendarSecMilliParser
 import org.apache.daffodil.processors.parsers.ConvertTextCalendarParser
 import org.apache.daffodil.processors.parsers.TextCalendarConstants
 import scala.Boolean
 
-abstract class ConvertTextCalendarPrimBase(e: ElementBase, guard: Boolean)
+abstract class ConvertCalendarPrimBase(e: ElementBase, guard: Boolean)
   extends Terminal(e, guard) {
 
   protected val xsdType = "dateTime"
   protected val prettyType = "DateTime"
 
   override def toString = "to(xs:" + xsdType + ")"
+}
+
+abstract class ConvertTextCalendarPrimBase(e: ElementBase, guard: Boolean)
+  extends ConvertCalendarPrimBase(e, guard) {
 
   protected def infosetPattern: String
   protected def implicitPattern: String
@@ -144,28 +153,13 @@ abstract class ConvertTextCalendarPrimBase(e: ElementBase, guard: Boolean)
     pattern,
     hasTZ,
     localeEv,
-    calendarEv,
-    infosetPattern,
-    firstDay,
-    calendarDaysInFirstWeek,
-    calendarCheckPolicy,
-    calendarTz,
-    TimeZone.GMT_ZONE)
+    calendarEv)
 
   override lazy val unparser = new ConvertTextCalendarUnparser(
     e.elementRuntimeData,
-    xsdType,
-    prettyType,
     pattern,
-    hasTZ,
     localeEv,
-    calendarEv,
-    infosetPattern,
-    firstDay,
-    calendarDaysInFirstWeek,
-    calendarCheckPolicy,
-    calendarTz,
-    TimeZone.GMT_ZONE)
+    calendarEv)
 }
 
 case class ConvertTextDatePrim(e: ElementBase) extends ConvertTextCalendarPrimBase(e, true) {
@@ -191,3 +185,61 @@ case class ConvertTextDateTimePrim(e: ElementBase) extends ConvertTextCalendarPr
   protected override val implicitPattern = "uuuu-MM-dd'T'HH:mm:ss"
   protected override val validFormatCharacters = "adDeEFGhHkKmMsSuwWvVyXxYzZ".toSeq
 }
+
+abstract class ConvertBinaryCalendarPrimBase(e: ElementBase, guard: Boolean, lengthInBits: Long)
+  extends ConvertCalendarPrimBase(e, guard) {
+
+}
+
+case class ConvertBinaryDateTimeSecMilliPrim(e: ElementBase, lengthInBits: Long) extends ConvertCalendarPrimBase(e, true) {
+  protected override val xsdType = "dateTime"
+  protected override val prettyType = "DateTime"
+
+  lazy val epochCalendar: Calendar = {
+    val cal = Calendar.getInstance
+    cal.clear()
+    cal.setLenient(false)
+
+    val sdfWithTZ = new SimpleDateFormat("uuuu-MM-dd'T'HH:mm:ssZZZZ", ULocale.ENGLISH)
+    var pos = new ParsePosition(0)
+    sdfWithTZ.parse(e.binaryCalendarEpoch, cal, pos)
+
+    if (pos.getIndex != e.binaryCalendarEpoch.length || pos.getErrorIndex >= 0) {
+      // binaryCalendarEpoch didn't match the first format with timezone, so try without
+      cal.clear()
+      pos = new ParsePosition(0)
+      val sdf = new SimpleDateFormat("uuuu-MM-dd'T'HH:mm:ss", ULocale.ENGLISH)
+      cal.setTimeZone(TimeZone.UNKNOWN_ZONE)
+      sdf.parse(e.binaryCalendarEpoch, cal, pos)
+
+      if (pos.getIndex != e.binaryCalendarEpoch.length || pos.getErrorIndex >= 0) {
+        SDE("Failed to parse binaryCalendarEpoch - Format must match the pattern 'uuuu-MM-dd'T'HH:mm:ss' or 'uuuu-MM-dd'T'HH:mm:ssZZZZ'")
+      }
+    }
+
+    try {
+      cal.getTime
+    } catch {
+      case e: IllegalArgumentException => {
+        SDE("Failed to parse binaryCalendarEpoch: %s.", e.getMessage())
+      }
+    }
+
+    cal
+  }
+
+  override lazy val parser = new ConvertBinaryCalendarSecMilliParser(
+    e.elementRuntimeData,
+    !epochCalendar.getTimeZone.equals(TimeZone.UNKNOWN_ZONE),
+    e.binaryCalendarRep,
+    epochCalendar,
+    lengthInBits.toInt)
+
+  override lazy val unparser =
+    new ConvertBinaryCalendarSecMilliUnparser(
+    e.elementRuntimeData,
+    e.binaryCalendarRep,
+    epochCalendar.getTimeInMillis,
+    lengthInBits.toInt,
+    !epochCalendar.getTimeZone.equals(TimeZone.UNKNOWN_ZONE))
+}
diff --git a/daffodil-runtime1-unparser/src/main/scala/org/apache/daffodil/processors/unparsers/ConvertBinaryCalendarUnparser.scala b/daffodil-runtime1-unparser/src/main/scala/org/apache/daffodil/processors/unparsers/ConvertBinaryCalendarUnparser.scala
new file mode 100644
index 0000000..f948c22
--- /dev/null
+++ b/daffodil-runtime1-unparser/src/main/scala/org/apache/daffodil/processors/unparsers/ConvertBinaryCalendarUnparser.scala
@@ -0,0 +1,84 @@
+/*
+ * 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.processors.unparsers
+
+import org.apache.daffodil.calendar.DFDLCalendar
+import org.apache.daffodil.exceptions.Assert
+import org.apache.daffodil.io.DataOutputStream
+import org.apache.daffodil.io.FormatInfo
+import org.apache.daffodil.processors.ElementRuntimeData
+import org.apache.daffodil.schema.annotation.props.gen.BinaryCalendarRep
+import org.apache.daffodil.util.Maybe.One
+import org.apache.daffodil.util.Misc
+
+import com.ibm.icu.util.Calendar
+
+case class ConvertBinaryCalendarSecMilliUnparser(
+  override val context: ElementRuntimeData,
+  binCalRep: BinaryCalendarRep,
+  epochTimeMillis: Long,
+  lengthInBits: Int,
+  hasTZ: Boolean)
+  extends PrimUnparser {
+
+  /**
+   * Primitive unparsers must override runtimeDependencies
+   */
+  override lazy val runtimeDependencies = Nil
+
+  protected def putNumber(dos: DataOutputStream, value: Long, nBits: Int, finfo: FormatInfo): Boolean = {
+    dos.putLong(value, nBits, finfo)
+  }
+
+  def unparse(state: UState): Unit = {
+
+    val node = state.currentInfosetNode.asSimple
+
+    val calValue = node.dataValue match {
+      case dc: DFDLCalendar => dc.calendar
+      case x => Assert.invariantFailed("ConvertTextCalendar received unsupported type. %s of type %s.".format(x, Misc.getNameFromClass(x)))
+    }
+
+    // Adjust the time based on time zone - if a time zone wasn't specified, Calendar will assume the default
+    // time zone for the user instead of TimeZone.UNKNOWN_ZONE so we need to adjust to get the correct time
+    // Note that setting the correct time zone for the calendar will not adjust the time.
+    val epochTime = if (!hasTZ) {
+      val tz = calValue.getTimeZone
+      val gmtOffset = calValue.get(Calendar.ZONE_OFFSET)
+      val dstOffset = if (tz.inDaylightTime(calValue.getTime)) tz.getDSTSavings else 0
+      epochTimeMillis - (gmtOffset + dstOffset)
+    } else {
+      epochTimeMillis
+    }
+
+    val diff: Long = binCalRep match {
+      case BinaryCalendarRep.BinarySeconds => (calValue.getTimeInMillis - epochTime) / 1000
+      case BinaryCalendarRep.BinaryMilliseconds => (calValue.getTimeInMillis - epochTime)
+      case _ => Assert.impossibleCase
+    }
+
+    val dos = state.dataOutputStream
+    val res = putNumber(dos, diff, lengthInBits, state)
+
+    if (!res) {
+      Assert.invariant(dos.maybeRelBitLimit0b.isDefined)
+      UnparseError(One(state.schemaFileLocation), One(state.currentLocation), "Insufficient space to unparse element %s, required %s bits, but only %s were available.",
+        context.dpathElementCompileInfo.namedQName.toPrettyString, lengthInBits, dos.maybeRelBitLimit0b.get)
+    }
+  }
+}
diff --git a/daffodil-runtime1-unparser/src/main/scala/org/apache/daffodil/processors/unparsers/ConvertTextCalendarUnparser.scala b/daffodil-runtime1-unparser/src/main/scala/org/apache/daffodil/processors/unparsers/ConvertTextCalendarUnparser.scala
index c25ea05..16d25f2 100644
--- a/daffodil-runtime1-unparser/src/main/scala/org/apache/daffodil/processors/unparsers/ConvertTextCalendarUnparser.scala
+++ b/daffodil-runtime1-unparser/src/main/scala/org/apache/daffodil/processors/unparsers/ConvertTextCalendarUnparser.scala
@@ -18,7 +18,6 @@
 package org.apache.daffodil.processors.unparsers
 
 import com.ibm.icu.util.Calendar
-import com.ibm.icu.util.TimeZone
 import com.ibm.icu.util.ULocale
 
 import org.apache.daffodil.calendar.DFDLCalendar
@@ -30,21 +29,10 @@ import org.apache.daffodil.util.Misc
 import org.apache.daffodil.processors.parsers.ConvertTextCalendarProcessorBase
 
 case class ConvertTextCalendarUnparser(erd: ElementRuntimeData,
-  xsdType: String,
-  prettyType: String,
   pattern: String,
-  hasTZ: Boolean,
   localeEv: CalendarLanguageEv,
-  calendarEv: CalendarEv,
-  infosetPattern: String,
-  firstDay: Int,
-  calendarDaysInFirstWeek: Int,
-  calendarCheckPolicy: Boolean,
-  calendarTz: Option[TimeZone],
-  tz: TimeZone)
-  extends ConvertTextCalendarProcessorBase(erd,
-    xsdType, prettyType, pattern, hasTZ, localeEv, calendarEv, infosetPattern, firstDay, calendarDaysInFirstWeek,
-    calendarCheckPolicy, calendarTz, tz)
+  calendarEv: CalendarEv)
+  extends ConvertTextCalendarProcessorBase(erd, pattern)
   with TextPrimUnparser {
 
   /**
diff --git a/daffodil-runtime1/src/main/scala/org/apache/daffodil/processors/parsers/PrimitivesDateTime1.scala b/daffodil-runtime1/src/main/scala/org/apache/daffodil/processors/parsers/PrimitivesDateTime1.scala
index cf7158d..b68eef7 100644
--- a/daffodil-runtime1/src/main/scala/org/apache/daffodil/processors/parsers/PrimitivesDateTime1.scala
+++ b/daffodil-runtime1/src/main/scala/org/apache/daffodil/processors/parsers/PrimitivesDateTime1.scala
@@ -20,7 +20,6 @@ package org.apache.daffodil.processors.parsers
 import java.text.ParsePosition
 import com.ibm.icu.text.SimpleDateFormat
 import com.ibm.icu.util.Calendar
-import com.ibm.icu.util.TimeZone
 import com.ibm.icu.util.ULocale
 import org.apache.daffodil.exceptions.Assert
 import org.apache.daffodil.calendar.DFDLDateTime
@@ -30,21 +29,11 @@ import org.apache.daffodil.processors.CalendarEv
 import org.apache.daffodil.processors.CalendarLanguageEv
 import org.apache.daffodil.processors.ElementRuntimeData
 import org.apache.daffodil.processors.Processor
+import org.apache.daffodil.schema.annotation.props.gen.BinaryCalendarRep
 
 abstract class ConvertTextCalendarProcessorBase(
   override val context: ElementRuntimeData,
-  xsdType: String,
-  prettyType: String,
-  pattern: String,
-  hasTZ: Boolean,
-  localeEv: CalendarLanguageEv,
-  calendarEv: CalendarEv,
-  infosetPattern: String,
-  firstDay: Int,
-  calendarDaysInFirstWeek: Int,
-  calendarCheckPolicy: Boolean,
-  calendarTz: Option[TimeZone],
-  tz: TimeZone) extends Processor {
+  pattern: String) extends Processor {
   // The dfdl:calendarLanguage property can be a runtime-valued expression.
   // Hence, locale and calendar, derived from it, can also be runtime-valued.
   //
@@ -99,16 +88,8 @@ case class ConvertTextCalendarParser(erd: ElementRuntimeData,
   pattern: String,
   hasTZ: Boolean,
   localeEv: CalendarLanguageEv,
-  calendarEv: CalendarEv,
-  infosetPattern: String,
-  firstDay: Int,
-  calendarDaysInFirstWeek: Int,
-  calendarCheckPolicy: Boolean,
-  calendarTz: Option[TimeZone],
-  tz: TimeZone)
-  extends ConvertTextCalendarProcessorBase(erd,
-    xsdType, prettyType, pattern, hasTZ, localeEv, calendarEv, infosetPattern, firstDay, calendarDaysInFirstWeek,
-    calendarCheckPolicy, calendarTz, tz)
+  calendarEv: CalendarEv)
+  extends ConvertTextCalendarProcessorBase(erd, pattern)
   with TextPrimParser {
 
   override lazy val runtimeDependencies = List(localeEv, calendarEv)
@@ -188,3 +169,41 @@ object TextCalendarConstants {
     }
   }
 }
+
+case class ConvertBinaryCalendarSecMilliParser(
+  override val context: ElementRuntimeData,
+  hasTZ: Boolean,
+  binCalRep: BinaryCalendarRep,
+  epochCal: Calendar,
+  lengthInBits: Int)
+  extends PrimParser {
+
+  override lazy val runtimeDependencies = Nil
+
+  def parse(start: PState): Unit = {
+
+    val dis = start.dataInputStream
+    val slong: Long = dis.getSignedLong(lengthInBits, start)
+    val cal = epochCal.clone.asInstanceOf[Calendar]
+
+    val millisToAdd: Long = binCalRep match {
+      case BinaryCalendarRep.BinarySeconds => slong * 1000
+      case BinaryCalendarRep.BinaryMilliseconds => slong
+      case _ => Assert.impossibleCase
+    }
+
+    val newTime = cal.getTimeInMillis + millisToAdd
+    try {
+      cal.setTimeInMillis(newTime)
+    } catch {
+      case e: IllegalArgumentException => {
+        PE(start, "%s milliseconds from the binaryCalendarEpoch is out of range of valid values (%s to %s): %s.",
+            millisToAdd, Calendar.MIN_MILLIS, Calendar.MAX_MILLIS, e.getMessage())
+        return
+      }
+    }
+
+    val newCal = new DFDLDateTime(cal, hasTZ)
+    start.simpleElement.overwriteDataValue(newCal)
+  }
+}
diff --git a/daffodil-test-ibm1/src/test/resources/test-suite/ibm-contributed/dpacalbin100_01.dfdl.xsd b/daffodil-test-ibm1/src/test/resources/test-suite/ibm-contributed/dpacalbin100_01.dfdl.xsd
index 7f4fb13..fe0408b 100644
--- a/daffodil-test-ibm1/src/test/resources/test-suite/ibm-contributed/dpacalbin100_01.dfdl.xsd
+++ b/daffodil-test-ibm1/src/test/resources/test-suite/ibm-contributed/dpacalbin100_01.dfdl.xsd
@@ -26,7 +26,8 @@
 				encodingErrorPolicy="replace" encoding="utf-8" byteOrder="bigEndian" bitOrder="mostSignificantBitFirst" lengthUnits="bytes"
 				textOutputMinLength="1" alignment="1" alignmentUnits="bytes"
 				fillByte="%NUL;"  occursCountKind="implicit" ignoreCase="no"
-				lengthKind="implicit" sequenceKind="ordered" initiatedContent="no" />
+				lengthKind="implicit" sequenceKind="ordered" initiatedContent="no"
+				textPadKind="none"  binaryNumberRep="binary" calendarLanguage='en' />
 
 		</xs:appinfo>
 	</xs:annotation>
@@ -52,7 +53,7 @@
 	<xs:element name="testBinaryMilliseconds" type="xs:dateTime">
 		<xs:annotation>
 			<xs:appinfo source="http://www.ogf.org/dfdl/">
-				<dfdl:element binaryCalendarRep="binaryMilliseconds" binaryCalendarEpoch="2009-12-24T05:15:00+05:00"/>
+				<dfdl:element binaryCalendarRep="binaryMilliseconds" binaryCalendarEpoch="2009-12-24T05:15:00+05:00" />
 			</xs:appinfo>
 		</xs:annotation>
 	</xs:element>
diff --git a/daffodil-test-ibm1/src/test/scala-debug/org/apache/daffodil/IBMTests2.scala b/daffodil-test-ibm1/src/test/scala-debug/org/apache/daffodil/IBMTests2.scala
index 0a3a5a0..3cdbf31 100644
--- a/daffodil-test-ibm1/src/test/scala-debug/org/apache/daffodil/IBMTests2.scala
+++ b/daffodil-test-ibm1/src/test/scala-debug/org/apache/daffodil/IBMTests2.scala
@@ -60,8 +60,6 @@ class IBMTestsThatThrow {
 
   @Test def test_simple_type_properties_text_boolean_13_03() { runner2.runOneTest("simple_type_properties_text_boolean_13_03") } // DFDL-462 boolean type
   @Test def test_simple_type_properties_bin_boolean_13_01() { runner2.runOneTest("simple_type_properties_bin_boolean_13_01") } // DFDL-461 boolean type
-  @Test def test_simple_type_properties_bin_calendar_13_01() { runner2.runOneTest("simple_type_properties_bin_calendar_13_01") } // DFDL-99 dateTime
-  @Test def test_simple_type_properties_bin_calendar_13_02() { runner2.runOneTest("simple_type_properties_bin_calendar_13_02") } // DFDL-99 dateTime
 
   @Test def test_simple_type_properties_text_calendar_13_01() { runner2.runOneTest("simple_type_properties_text_calendar_13_01") } // DAFFODIL-1945
 
diff --git a/daffodil-test-ibm1/src/test/scala/org/apache/daffodil/IBMTests.scala b/daffodil-test-ibm1/src/test/scala/org/apache/daffodil/IBMTests.scala
index c900832..a76e644 100644
--- a/daffodil-test-ibm1/src/test/scala/org/apache/daffodil/IBMTests.scala
+++ b/daffodil-test-ibm1/src/test/scala/org/apache/daffodil/IBMTests.scala
@@ -50,6 +50,9 @@ class IBMTestsThatPass {
   @Test def test_simple_type_properties_text_calendar_13_03() { runner2.runOneTest("simple_type_properties_text_calendar_13_03") }
   @Test def test_simple_type_properties_text_calendar_13_04() { runner2.runOneTest("simple_type_properties_text_calendar_13_04") }
 
+  @Test def test_simple_type_properties_bin_calendar_13_01() { runner2.runOneTest("simple_type_properties_bin_calendar_13_01") }
+  @Test def test_simple_type_properties_bin_calendar_13_02() { runner2.runOneTest("simple_type_properties_bin_calendar_13_02") }
+
   @Test def test_introduction_1_01() { runner1.runOneTest("introduction_1_01") }
 
   @Test def test_property_syntax_7_04() { runner1.runOneTest("property_syntax_7_04") }
diff --git a/daffodil-test/src/test/resources/org/apache/daffodil/section05/simple_types/SimpleTypes.tdml b/daffodil-test/src/test/resources/org/apache/daffodil/section05/simple_types/SimpleTypes.tdml
index 65250a3..57e5efd 100644
--- a/daffodil-test/src/test/resources/org/apache/daffodil/section05/simple_types/SimpleTypes.tdml
+++ b/daffodil-test/src/test/resources/org/apache/daffodil/section05/simple_types/SimpleTypes.tdml
@@ -240,6 +240,33 @@
     dfdl:lengthKind="explicit" dfdl:lengthUnits="bytes" dfdl:length="4" />
     <xs:element name="float_03" type="xs:float"
     dfdl:lengthKind="explicit" dfdl:lengthUnits="bytes" dfdl:length="8" />
+
+    <xs:element name="dateTimeBin" type="xs:dateTime" dfdl:lengthKind="explicit" dfdl:length="{ 4 }"
+      dfdl:lengthUnits="bytes" dfdl:binaryCalendarRep="binarySeconds" dfdl:binaryCalendarEpoch="1977-01-01T00:00:07"/>
+    <xs:element name="dateTimeBin2" type="xs:dateTime" dfdl:lengthKind="explicit" dfdl:length="{ 32 }"
+      dfdl:lengthUnits="bits" dfdl:binaryCalendarRep="binarySeconds" dfdl:binaryCalendarEpoch="1970-01-01T00:00:00"/>
+    <xs:element name="dateTimeBin3" type="xs:dateTime" dfdl:lengthKind="explicit" dfdl:length="{ 5 }"
+      dfdl:lengthUnits="bytes" dfdl:binaryCalendarRep="binarySeconds" dfdl:binaryCalendarEpoch="1970-01-01T00:00:00"/>
+    <xs:element name="dateTimeBin4" type="xs:dateTime" dfdl:lengthKind="implicit" dfdl:lengthUnits="bytes"
+      dfdl:binaryCalendarRep="binarySeconds" dfdl:binaryCalendarEpoch="1870-01-01T00:05:00+00:00"/>
+    <xs:element name="dateTimeBin5" type="xs:dateTime" dfdl:lengthKind="explicit" dfdl:length="{ 8 }"
+      dfdl:lengthUnits="bytes" dfdl:binaryCalendarRep="binaryMilliseconds" dfdl:binaryCalendarEpoch="1985-11-21T10:37:04"/>
+    <xs:element name="dateTimeBin6" type="xs:dateTime" dfdl:lengthKind="explicit" dfdl:length="{ 8 }"
+      dfdl:lengthUnits="bytes" dfdl:binaryCalendarRep="binaryMilliseconds" dfdl:binaryCalendarEpoch="2000-06-15T03:25:19"/>
+    <xs:element name="dateTimeBin7" type="xs:dateTime" dfdl:lengthKind="implicit" dfdl:lengthUnits="bytes"
+      dfdl:binaryCalendarRep="binaryMilliseconds" dfdl:binaryCalendarEpoch="1870-01-01T00:05:00"/>
+    <xs:element name="dateTimeBin8" type="xs:dateTime" dfdl:lengthKind="explicit" dfdl:length="{ 4 }"
+      dfdl:lengthUnits="bytes" dfdl:binaryCalendarRep="binarySeconds" dfdl:binaryCalendarEpoch="2018-01-01T09:13:42+09:00"/>
+    <xs:element name="dateTimeBin9" type="xs:dateTime" dfdl:lengthKind="implicit" dfdl:lengthUnits="bytes"
+      dfdl:binaryCalendarRep="binaryMilliseconds" dfdl:binaryCalendarEpoch="2000-01-01T00:00:00-04:00"/>
+    <xs:element name="dateTimeBin10" type="xs:dateTime" dfdl:lengthKind="implicit" dfdl:lengthUnits="bytes"
+      dfdl:binaryCalendarRep="binarySeconds" dfdl:binaryCalendarEpoch="2000-1-1T00:00"/>
+    <xs:element name="dateTimeBin11" type="xs:dateTime" dfdl:lengthKind="implicit" dfdl:lengthUnits="bytes"
+      dfdl:binaryCalendarRep="binarySeconds" dfdl:binaryCalendarEpoch="01-01-2000T00:00:00"/>
+
+    <xs:element name="dateBin2" type="xs:date" dfdl:lengthKind="explicit" dfdl:length="{ 4 }"
+      dfdl:lengthUnits="bytes" dfdl:binaryCalendarRep="binarySeconds" dfdl:binaryCalendarEpoch="1970-01-01T00:00:00+00:00"/>
+
   </tdml:defineSchema>
   
   <tdml:parserTestCase name="TestUnsignedInt" root="Day"
@@ -1951,6 +1978,289 @@
     </tdml:infoset>
   </tdml:parserTestCase>
 
+  <!-- xs:dateTime with binaryCalendarRep='binarySeconds' -->
+  <tdml:parserTestCase name="dateTimeBin" root="dateTimeBin"
+    model="SimpleTypes-binary" description="Section 5 Schema types-dateTime - DFDL-5-016R"
+    roundTrip="true">
+
+    <tdml:document>
+      <tdml:documentPart type="bits">00000000 00000000 00000000 00111110</tdml:documentPart>
+    </tdml:document>
+    <tdml:infoset>
+      <tdml:dfdlInfoset>
+        <dateTimeBin>1977-01-01T00:01:09.000000</dateTimeBin>
+      </tdml:dfdlInfoset>
+    </tdml:infoset>
+  </tdml:parserTestCase>
+
+  <tdml:parserTestCase name="dateTimeBin2" root="dateTimeBin2"
+    model="SimpleTypes-binary" description="Section 5 Schema types-dateTime - DFDL-5-016R"
+    roundTrip="false">
+
+    <tdml:document>
+      <tdml:documentPart type="bits">00000000 00000000 00000000 00111101</tdml:documentPart>
+    </tdml:document>
+    <tdml:errors>
+      <tdml:error>Schema Definition Error: lengthUnits must be 'bytes' when binaryCalendarRep='binarySeconds'</tdml:error>
+    </tdml:errors>
+  </tdml:parserTestCase>
+
+  <tdml:parserTestCase name="dateTimeBin3" root="dateTimeBin3"
+    model="SimpleTypes-binary" description="Section 5 Schema types-dateTime - DFDL-5-016R"
+    roundTrip="false">
+
+    <tdml:document>
+      <tdml:documentPart type="bits">00000000 00000000 00000000 00111101</tdml:documentPart>
+    </tdml:document>
+    <tdml:errors>
+      <tdml:error>Schema Definition Error: binary xs:dateTime must be 32 bits when binaryCalendarRep='binarySeconds'</tdml:error>
+    </tdml:errors>
+  </tdml:parserTestCase>
+
+  <!-- xs:dateTime with binaryCalendarRep='binarySeconds' with implicit length -->
+  <tdml:parserTestCase name="dateTimeBin4" root="dateTimeBin4"
+    model="SimpleTypes-binary" description="Section 5 Schema types-dateTime - DFDL-5-016R"
+    roundTrip="true">
+
+    <tdml:document>
+      <tdml:documentPart type="bits">11111111 11111110 10101110 10000000</tdml:documentPart>
+    </tdml:document>
+    <tdml:infoset>
+      <tdml:dfdlInfoset>
+        <dateTimeBin4>1869-12-31T00:05:00.000000+00:00</dateTimeBin4>
+      </tdml:dfdlInfoset>
+    </tdml:infoset>
+  </tdml:parserTestCase>
+
+  <!-- xs:dateTime with binaryCalendarRep='binaryMillieconds' -->
+  <tdml:parserTestCase name="dateTimeBin5" root="dateTimeBin5"
+    model="SimpleTypes-binary" description="Section 5 Schema types-dateTime - DFDL-5-016R"
+    roundTrip="true">
+
+    <tdml:document>
+      <tdml:documentPart type="bits">00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001</tdml:documentPart>
+    </tdml:document>
+    <tdml:infoset>
+      <tdml:dfdlInfoset>
+        <dateTimeBin5>1985-11-21T10:37:04.001000</dateTimeBin5>
+      </tdml:dfdlInfoset>
+    </tdml:infoset>
+  </tdml:parserTestCase>
+
+  <!-- xs:dateTime with binaryCalendarRep='binaryMillieconds' -->
+  <tdml:parserTestCase name="dateTimeBin6" root="dateTimeBin6"
+    model="SimpleTypes-binary" description="Section 5 Schema types-dateTime - DFDL-5-016R"
+    roundTrip="true">
+
+    <tdml:document>
+      <tdml:documentPart type="bits">00000000 00000000 00000000 00000000 11111111 11111111 11111111 11111111</tdml:documentPart>
+    </tdml:document>
+    <tdml:infoset>
+      <tdml:dfdlInfoset>
+        <dateTimeBin6>2000-08-03T20:28:06.295000</dateTimeBin6>
+      </tdml:dfdlInfoset>
+    </tdml:infoset>
+  </tdml:parserTestCase>
+
+  <tdml:parserTestCase name="dateTimeBin7" root="dateTimeBin7"
+    model="SimpleTypes-binary" description="Section 5 Schema types-dateTime - DFDL-5-016R"
+    roundTrip="true">
+
+    <tdml:document>
+      <tdml:documentPart type="bits">11111111 11111111 11111111 11111111 11111010 11011001 10100100 00000000</tdml:documentPart>
+    </tdml:document>
+    <tdml:infoset>
+      <tdml:dfdlInfoset>
+        <dateTimeBin7>1869-12-31T00:05:00.000000</dateTimeBin7>
+      </tdml:dfdlInfoset>
+    </tdml:infoset>
+  </tdml:parserTestCase>
+
+  <!-- xs:dateTime with binaryCalendarRep='binaryMillieconds' -->
+  <tdml:parserTestCase name="dateTimeBin8" root="dateTimeBin6"
+    model="SimpleTypes-binary" description="Section 5 Schema types-dateTime - DFDL-5-016R"
+    roundTrip="true">
+
+    <tdml:document>
+      <tdml:documentPart type="bits">00000000 00000001 00000010 01001110 11010001 10100111 00001000 00000000</tdml:documentPart>
+    </tdml:document>
+    <tdml:infoset>
+      <tdml:dfdlInfoset>
+        <dateTimeBin6>11000-06-15T03:25:19.000000</dateTimeBin6>
+      </tdml:dfdlInfoset>
+    </tdml:infoset>
+  </tdml:parserTestCase>
+
+  <!-- xs:dateTime with binaryCalendarRep='binaryMillieconds' -->
+  <tdml:parserTestCase name="dateTimeBin9" root="dateTimeBin6"
+    model="SimpleTypes-binary" description="Section 5 Schema types-dateTime - DFDL-5-016R"
+    roundTrip="true">
+
+    <tdml:document>
+      <tdml:documentPart type="bits">00000000 00000000 11100101 10011000 00001111 10110100 10001110 11100111</tdml:documentPart>
+    </tdml:document>
+    <tdml:infoset>
+      <tdml:dfdlInfoset>
+        <dateTimeBin6>9999-12-31T23:59:59.999000</dateTimeBin6>
+      </tdml:dfdlInfoset>
+    </tdml:infoset>
+  </tdml:parserTestCase>
+
+  <!-- xs:dateTime with binaryCalendarRep='binaryMillieconds' -->
+  <tdml:parserTestCase name="dateTimeBin10" root="dateTimeBin6"
+    model="SimpleTypes-binary" description="Section 5 Schema types-dateTime - DFDL-5-016R"
+    roundTrip="true">
+
+    <tdml:document>
+      <tdml:documentPart type="bits">00000000 00000000 11100101 10011000 00001111 10110100 10001110 11101000</tdml:documentPart>
+    </tdml:document>
+    <tdml:infoset>
+      <tdml:dfdlInfoset>
+        <dateTimeBin6>10000-01-01T00:00:00.000000</dateTimeBin6>
+      </tdml:dfdlInfoset>
+    </tdml:infoset>
+  </tdml:parserTestCase>
+
+  <tdml:parserTestCase name="dateTimeBin11" root="dateTimeBin6"
+    model="SimpleTypes-binary" description="Section 5 Schema types-dateTime - DFDL-5-016R"
+    roundTrip="true">
+
+    <tdml:document>
+      <tdml:documentPart type="bits">01111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111</tdml:documentPart>
+    </tdml:document>
+    <tdml:errors>
+      <tdml:error>Parse Error</tdml:error>
+      <tdml:error>milliseconds from the binaryCalendarEpoch is out of range of valid values</tdml:error>
+      <tdml:error>millis value less than lower bounds for a Calendar</tdml:error>
+    </tdml:errors>
+  </tdml:parserTestCase>
+
+  <!-- xs:dateTime with binaryCalendarRep='binaryMillieconds' with expected result equal
+    to the maximum date allowed -->
+  <tdml:parserTestCase name="dateTimeBin12" root="dateTimeBin6"
+    model="SimpleTypes-binary" description="Section 5 Schema types-dateTime - DFDL-5-016R"
+    roundTrip="true">
+
+    <tdml:document>
+      <tdml:documentPart type="bits">00000010 10001101 01000110 11111011 11111100 10101110 01100010 11101000</tdml:documentPart>
+    </tdml:document>
+    <tdml:infoset>
+      <tdml:dfdlInfoset>
+        <dateTimeBin6>5828963-12-20T00:00:00.000000</dateTimeBin6>
+      </tdml:dfdlInfoset>
+    </tdml:infoset>
+  </tdml:parserTestCase>
+
+  <!-- xs:dateTime with binaryCalendarRep='binaryMillieconds' - expecting an error for being 1 milisecond
+    greater than the maximum date allowed -->
+  <tdml:parserTestCase name="dateTimeBin13" root="dateTimeBin6"
+    model="SimpleTypes-binary" description="Section 5 Schema types-dateTime - DFDL-5-016R"
+    roundTrip="true">
+
+    <tdml:document>
+      <tdml:documentPart type="bits">00000010 10001101 01000110 11111011 11111100 10101110 01100010 11101001</tdml:documentPart>
+    </tdml:document>
+    <tdml:errors>
+      <tdml:error>Parse Error</tdml:error>
+      <tdml:error>millis value greater than upper bounds for a Calendar</tdml:error>
+    </tdml:errors>
+  </tdml:parserTestCase>
+
+  <!-- xs:dateTime with binaryCalendarRep='binaryMillieconds' with expected result equal
+    to the minimum date allowed -->
+  <tdml:parserTestCase name="dateTimeBin14" root="dateTimeBin6"
+    model="SimpleTypes-binary" description="Section 5 Schema types-dateTime - DFDL-5-016R"
+    roundTrip="true">
+
+    <tdml:document>
+      <tdml:documentPart type="bits">11111101 01110001 00110111 10110011 11111100 10101110 01100010 11101000</tdml:documentPart>
+    </tdml:document>
+    <tdml:infoset>
+      <tdml:dfdlInfoset>
+        <dateTimeBin6>-5838269-09-20T00:00:00.000000</dateTimeBin6>
+      </tdml:dfdlInfoset>
+    </tdml:infoset>
+  </tdml:parserTestCase>
+
+  <!-- xs:dateTime with binaryCalendarRep='binaryMillieconds' - expecting an error for being 1 milisecond
+    less than the minimum date allowed -->
+  <tdml:parserTestCase name="dateTimeBin15" root="dateTimeBin6"
+    model="SimpleTypes-binary" description="Section 5 Schema types-dateTime - DFDL-5-016R"
+    roundTrip="true">
+
+    <tdml:document>
+      <tdml:documentPart type="bits">11111101 01110001 00110111 10110011 11111100 10101110 01100010 11100111</tdml:documentPart>
+    </tdml:document>
+    <tdml:errors>
+      <tdml:error>Parse Error</tdml:error>
+      <tdml:error>millis value less than lower bounds for a Calendar</tdml:error>
+    </tdml:errors>
+  </tdml:parserTestCase>
+
+  <tdml:parserTestCase name="dateTimeBin16" root="dateTimeBin8"
+    model="SimpleTypes-binary" description="Section 5 Schema types-dateTime - DFDL-5-016R"
+    roundTrip="true">
+
+    <tdml:document>
+      <tdml:documentPart type="bits">00000000 00000000 00000000 00000001</tdml:documentPart>
+    </tdml:document>
+    <tdml:infoset>
+      <tdml:dfdlInfoset>
+        <dateTimeBin8>2018-01-01T09:13:43.000000+09:00</dateTimeBin8>
+      </tdml:dfdlInfoset>
+    </tdml:infoset>
+  </tdml:parserTestCase>
+
+  <tdml:parserTestCase name="dateTimeBin17" root="dateTimeBin9"
+    model="SimpleTypes-binary" description="Section 5 Schema types-dateTime - DFDL-5-016R"
+    roundTrip="true">
+
+    <tdml:document>
+      <tdml:documentPart type="bits">00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001</tdml:documentPart>
+    </tdml:document>
+    <tdml:infoset>
+      <tdml:dfdlInfoset>
+        <dateTimeBin9>2000-01-01T00:00:00.001000-04:00</dateTimeBin9>
+      </tdml:dfdlInfoset>
+    </tdml:infoset>
+  </tdml:parserTestCase>
+
+  <tdml:parserTestCase name="dateTimeBin18" root="dateTimeBin10"
+    model="SimpleTypes-binary" description="Section 5 Schema types-dateTime - DFDL-5-016R"
+    roundTrip="false">
+
+    <tdml:document>
+      <tdml:documentPart type="bits">00000000 00000000 00000000 00111101</tdml:documentPart>
+    </tdml:document>
+    <tdml:errors>
+      <tdml:error>Schema Definition Error: Failed to parse binaryCalendarEpoch - Format must match the pattern 'uuuu-MM-dd'T'HH:mm:ss' or 'uuuu-MM-dd'T'HH:mm:ssZZZZ'</tdml:error>
+    </tdml:errors>
+  </tdml:parserTestCase>
+
+  <tdml:parserTestCase name="dateTimeBin19" root="dateTimeBin11"
+    model="SimpleTypes-binary" description="Section 5 Schema types-dateTime - DFDL-5-016R"
+    roundTrip="false">
+
+    <tdml:document>
+      <tdml:documentPart type="bits">00000000 00000000 00000000 00111101</tdml:documentPart>
+    </tdml:document>
+    <tdml:errors>
+      <tdml:error>Schema Definition Error: Failed to parse binaryCalendarEpoch: DAY_OF_MONTH=2000, valid range=1..31</tdml:error>
+    </tdml:errors>
+  </tdml:parserTestCase>
+
+  <tdml:parserTestCase name="dateBin2" root="dateBin2"
+    model="SimpleTypes-binary" description="Section 5 Schema types-dateTime - DFDL-5-016R"
+    roundTrip="false">
+
+    <tdml:document>
+      <tdml:documentPart type="bits">0000 0000 0011 1101</tdml:documentPart>
+    </tdml:document>
+    <tdml:errors>
+      <tdml:error>Schema Definition Error: binaryCalendarRep='binarySeconds' is not allowed with type Date</tdml:error>
+    </tdml:errors>
+  </tdml:parserTestCase>
+
   <tdml:parserTestCase name="byte_01" root="b_01"
     model="SimpleTypes-Embedded.dfdl.xsd" description="Section 5 Schema types - byte - DFDL-5-015R">
 
@@ -3932,6 +4242,23 @@
   </tdml:parserTestCase>
 
 <!--
+     Test Name: dateTimeImplicitPatternFail5
+        Schema: dateTimeSchema
+          Root: dateTimeImp
+       Purpose: This test demonstrates a dateTime data type with a year that is out of range.
+-->
+
+  <tdml:parserTestCase name="dateTimeImplicitPatternFail5" root="dateTimeImp"
+    model="dateTimeSchema" description="Section 13 Simple Types - calendarPatternKind - DFDL-13-138R">
+
+    <tdml:document><![CDATA[99999999-03-24T03:45:30]]></tdml:document>
+    <tdml:errors>
+      <tdml:error>Parse Error:</tdml:error>
+      <tdml:error>Placeholder for error message</tdml:error>
+    </tdml:errors>
+  </tdml:parserTestCase>
+
+<!--
      Test Name: datePattern01
         Schema: dateTimeSchema
           Root: date01
@@ -6059,7 +6386,7 @@
   
   <!--
     Test name: hexBinary_Delimited_01
-    Schema: SimpleTypes-binary
+    Schema: HexBinary
     Purpose: This document demonstrates the use of the hexBinary simple type with
     bit input.
   -->
@@ -6097,7 +6424,7 @@
   
   <!--
     Test name: hexBinary_Delimited_02
-    Schema: SimpleTypes-binary
+    Schema: HexBinary
     Purpose: This document demonstrates the use of the hexBinary simple type with
     byte input.
   -->
@@ -6124,7 +6451,7 @@
   
   <!--
     Test name: hexBinary_Delimited_03
-    Schema: SimpleTypes-binary
+    Schema: HexBinary
     Purpose: This document demonstrates the use of the hexBinary simple type with byte
     input using raw byte entities.
   -->
@@ -6162,7 +6489,7 @@
   
   <!--
     Test name: hexBinary_Implicit_01
-    Schema: SimpleTypes-binary
+    Schema: HexBinary
     Purpose: This document demonstrates the use of the hexBinary simple type with byte
     input using lengthKind implicit.
   -->
@@ -6361,7 +6688,7 @@
 
   <!--
     Test name: hexBinary_Delimited_04
-    Schema: SimpleTypes-binary
+    Schema: HexBinary
     Purpose: This document demonstrates an error when hexBinary is delimited and has an encoding that is not ISO-8859-1
   -->
 
diff --git a/daffodil-test/src/test/scala-debug/org/apache/daffodil/section05/simple_types/TestSimpleTypesDebug.scala b/daffodil-test/src/test/scala-debug/org/apache/daffodil/section05/simple_types/TestSimpleTypesDebug.scala
index 4adbd22..a2498e1 100644
--- a/daffodil-test/src/test/scala-debug/org/apache/daffodil/section05/simple_types/TestSimpleTypesDebug.scala
+++ b/daffodil-test/src/test/scala-debug/org/apache/daffodil/section05/simple_types/TestSimpleTypesDebug.scala
@@ -115,4 +115,6 @@ class TestSimpleTypesDebug {
   @Test def test_dateCalendarFirstDayOfWeek03() { runner.runOneTest("dateCalendarFirstDayOfWeek03") }
   @Test def test_dateCalendarFirstDayOfWeek04() { runner.runOneTest("dateCalendarFirstDayOfWeek04") }
 
+  // DAFFODIL-1946
+  @Test def test_dateTimeImplicitPatternFail5() { runner.runOneTest("dateTimeImplicitPatternFail5") }
 }
diff --git a/daffodil-test/src/test/scala/org/apache/daffodil/section05/simple_types/TestSimpleTypes.scala b/daffodil-test/src/test/scala/org/apache/daffodil/section05/simple_types/TestSimpleTypes.scala
index cac67ca..a878313 100644
--- a/daffodil-test/src/test/scala/org/apache/daffodil/section05/simple_types/TestSimpleTypes.scala
+++ b/daffodil-test/src/test/scala/org/apache/daffodil/section05/simple_types/TestSimpleTypes.scala
@@ -170,12 +170,33 @@ class TestSimpleTypes {
   @Test def test_dateImplicitPatternFail() { runner.runOneTest("dateImplicitPatternFail") }
   @Test def test_timeImplicitPattern() { runner.runOneTest("timeImplicitPattern") }
   @Test def test_timeImplicitPatternFail() { runner.runOneTest("timeImplicitPatternFail") }
+  @Test def test_dateTimeBin() { runner.runOneTest("dateTimeBin") }
+  @Test def test_dateTimeBin2() { runner.runOneTest("dateTimeBin2") }
+  @Test def test_dateTimeBin3() { runner.runOneTest("dateTimeBin3") }
+  @Test def test_dateTimeBin4() { runner.runOneTest("dateTimeBin4") }
+  @Test def test_dateTimeBin5() { runner.runOneTest("dateTimeBin5") }
+  @Test def test_dateTimeBin6() { runner.runOneTest("dateTimeBin6") }
+  @Test def test_dateTimeBin7() { runner.runOneTest("dateTimeBin7") }
+  @Test def test_dateTimeBin8() { runner.runOneTest("dateTimeBin8") }
+  @Test def test_dateTimeBin9() { runner.runOneTest("dateTimeBin9") }
+  @Test def test_dateTimeBin10() { runner.runOneTest("dateTimeBin10") }
+  @Test def test_dateTimeBin11() { runner.runOneTest("dateTimeBin11") }
+  @Test def test_dateTimeBin12() { runner.runOneTest("dateTimeBin12") }
+  @Test def test_dateTimeBin13() { runner.runOneTest("dateTimeBin13") }
+  @Test def test_dateTimeBin14() { runner.runOneTest("dateTimeBin14") }
+  @Test def test_dateTimeBin15() { runner.runOneTest("dateTimeBin15") }
+  @Test def test_dateTimeBin16() { runner.runOneTest("dateTimeBin16") }
+  @Test def test_dateTimeBin17() { runner.runOneTest("dateTimeBin17") }
+  @Test def test_dateTimeBin18() { runner.runOneTest("dateTimeBin18") }
+  @Test def test_dateTimeBin19() { runner.runOneTest("dateTimeBin19") }
+  @Test def test_dateBin2() { runner.runOneTest("dateBin2") }
 
   @Test def test_dateTimeImplicitPattern() { runner.runOneTest("dateTimeImplicitPattern") }
   @Test def test_dateTimeImplicitPatternFail() { runner.runOneTest("dateTimeImplicitPatternFail") }
   @Test def test_dateTimeImplicitPatternFail2() { runner.runOneTest("dateTimeImplicitPatternFail2") }
   @Test def test_dateTimeImplicitPatternFail3() { runner.runOneTest("dateTimeImplicitPatternFail3") }
   @Test def test_dateTimeImplicitPatternFail4() { runner.runOneTest("dateTimeImplicitPatternFail4") }
+  //@Test def test_dateTimeImplicitPatternFail5() { runner.runOneTest("dateTimeImplicitPatternFail5") }
 
   @Test def test_datePattern01() { runner.runOneTest("datePattern01") }
   //  @Test def test_datePattern01b() { runner.runOneTest("datePattern01b") }

-- 
To stop receiving notification emails like this one, please contact
efinnegan@apache.org.