You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by re...@apache.org on 2021/08/27 11:46:58 UTC

[uima-uimaj] branch feature/UIMA-6374-Create-CAS-de-serialization-test-suite created (now 562d772)

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

rec pushed a change to branch feature/UIMA-6374-Create-CAS-de-serialization-test-suite
in repository https://gitbox.apache.org/repos/asf/uima-uimaj.git.


      at 562d772  [UIMA-6374] Create CAS (de)serialization test suite

This branch includes the following new commits:

     new 562d772  [UIMA-6374] Create CAS (de)serialization test suite

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[uima-uimaj] 01/01: [UIMA-6374] Create CAS (de)serialization test suite

Posted by re...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rec pushed a commit to branch feature/UIMA-6374-Create-CAS-de-serialization-test-suite
in repository https://gitbox.apache.org/repos/asf/uima-uimaj.git

commit 562d772ea283657818050fd569b5e6f93df6dc1b
Author: Richard Eckart de Castilho <re...@apache.org>
AuthorDate: Fri Aug 27 13:46:49 2021 +0200

    [UIMA-6374] Create CAS (de)serialization test suite
    
    - Added several test cases using emojis and other Unicode characters
---
 ...rializationDeserialization_BINARY_TSI_Test.java |   2 +-
 ...asSerializationDeserialization_BINARY_Test.java |   2 +-
 ...serialization_COMPRESSED_FILTERED_TSI_Test.java |   2 +-
 ...izationDeserialization_SERIALIZED_TSI_Test.java |   2 +-
 .../CasSerializationDeserialization_XCAS_Test.java |   3 +-
 ...izationDeserialization_XMI_1_0_PRETTY_Test.java |   8 +-
 ...izationDeserialization_XMI_1_1_PRETTY_Test.java |   7 +-
 .../uima/cas/serdes/SerDesCasIOTestUtils.java      |  37 +++++++++-
 .../ProgrammaticallyCreatedCasDataSuite.java       |  81 +++++++++++++++++++--
 .../cas/serdes/scenario/DesSerTestScenario.java    |  25 ++++++-
 .../cas.bin                                        | Bin 2396 -> 2604 bytes
 .../debug-typesystem.xml                           |   0
 .../debug.xmi                                      |  15 ++++
 .../cas.bin                                        | Bin 2396 -> 2408 bytes
 .../debug-typesystem.xml                           |   0
 .../casWithLeftToRightTextAndAnnotations/debug.xmi |   8 ++
 .../cas.bin                                        | Bin 2396 -> 2344 bytes
 .../debug-typesystem.xml                           |   0
 .../ser-ref/casWithTextAndAnnotations/debug.xmi    |   9 +++
 .../cas.bin                                        | Bin 2396 -> 2440 bytes
 .../debug-typesystem.xml                           |   0
 .../debug.xmi                                      |  10 +++
 .../casWithEmojiUnicodeTextAndAnnotations/cas.bin  | Bin 0 -> 476 bytes
 .../debug-typesystem.xml                           |   0
 .../debug.xmi                                      |  15 ++++
 .../casWithLeftToRightTextAndAnnotations/cas.bin   | Bin 0 -> 280 bytes
 .../debug-typesystem.xml                           |   0
 .../casWithLeftToRightTextAndAnnotations/debug.xmi |   8 ++
 .../ser-ref/casWithTextAndAnnotation/cas.bin       | Bin 268 -> 0 bytes
 .../ser-ref/casWithTextAndAnnotations/cas.bin      | Bin 0 -> 216 bytes
 .../debug-typesystem.xml                           |   0
 .../ser-ref/casWithTextAndAnnotations/debug.xmi    |   9 +++
 .../cas.bin                                        | Bin 0 -> 312 bytes
 .../debug-typesystem.xml                           |   0
 .../debug.xmi                                      |  10 +++
 .../cas.bin                                        | Bin 2413 -> 2475 bytes
 .../debug-typesystem.xml                           |   0
 .../debug.xmi                                      |  15 ++++
 .../cas.bin                                        | Bin 2413 -> 2424 bytes
 .../debug-typesystem.xml                           |   0
 .../casWithLeftToRightTextAndAnnotations/debug.xmi |   8 ++
 .../ser-ref/casWithTextAndAnnotation/debug.xmi     |   7 --
 .../cas.bin                                        | Bin 2413 -> 2387 bytes
 .../debug-typesystem.xml                           |   0
 .../ser-ref/casWithTextAndAnnotations/debug.xmi    |   9 +++
 .../cas.bin                                        | Bin 2413 -> 2430 bytes
 .../debug-typesystem.xml                           |   0
 .../debug.xmi                                      |  10 +++
 .../cas.bin                                        | Bin 2788 -> 3009 bytes
 .../debug-typesystem.xml                           |   0
 .../debug.xmi                                      |  15 ++++
 .../cas.bin                                        | Bin 2788 -> 2812 bytes
 .../debug-typesystem.xml                           |   0
 .../casWithLeftToRightTextAndAnnotations/debug.xmi |   8 ++
 .../ser-ref/casWithTextAndAnnotation/debug.xmi     |   7 --
 .../cas.bin                                        | Bin 2788 -> 2783 bytes
 .../debug-typesystem.xml                           |   0
 .../ser-ref/casWithTextAndAnnotations/debug.xmi    |   9 +++
 .../cas.bin                                        | Bin 2788 -> 2851 bytes
 .../debug-typesystem.xml                           |   0
 .../debug.xmi                                      |  10 +++
 .../casWithEmojiUnicodeTextAndAnnotations/cas.xcas |  13 ++++
 .../debug-typesystem.xml                           |   0
 .../debug.xmi                                      |  15 ++++
 .../casWithLeftToRightTextAndAnnotations/cas.xcas  |   6 ++
 .../debug-typesystem.xml                           |   0
 .../casWithLeftToRightTextAndAnnotations/debug.xmi |   8 ++
 .../ser-ref/casWithTextAndAnnotation/cas.xcas      |   5 --
 .../ser-ref/casWithTextAndAnnotation/debug.xmi     |   7 --
 .../ser-ref/casWithTextAndAnnotations/cas.xcas     |   7 ++
 .../debug-typesystem.xml                           |   0
 .../ser-ref/casWithTextAndAnnotations/debug.xmi    |   9 +++
 .../cas.xcas                                       |   8 ++
 .../debug-typesystem.xml                           |   0
 .../debug.xmi                                      |  10 +++
 .../casWithEmojiUnicodeTextAndAnnotations/data.xmi |  15 ++++
 .../debug-typesystem.xml                           |   0
 .../debug.xmi                                      |  15 ++++
 .../casWithLeftToRightTextAndAnnotations/data.xmi  |   8 ++
 .../debug-typesystem.xml                           |   0
 .../casWithLeftToRightTextAndAnnotations/debug.xmi |   8 ++
 .../ser-ref/casWithTextAndAnnotation/data.xmi      |   7 --
 .../ser-ref/casWithTextAndAnnotation/debug.xmi     |   7 --
 .../ser-ref/casWithTextAndAnnotations/data.xmi     |   9 +++
 .../debug-typesystem.xml                           |   0
 .../ser-ref/casWithTextAndAnnotations/debug.xmi    |   9 +++
 .../data.xmi                                       |  10 +++
 .../debug-typesystem.xml                           |   0
 .../debug.xmi                                      |  10 +++
 .../casWithEmojiUnicodeTextAndAnnotations/data.xmi |  15 ++++
 .../debug-typesystem.xml                           |   0
 .../debug.xmi                                      |  15 ++++
 .../casWithLeftToRightTextAndAnnotations/data.xmi  |   8 ++
 .../debug-typesystem.xml                           |   0
 .../casWithLeftToRightTextAndAnnotations/debug.xmi |   8 ++
 .../ser-ref/casWithTextAndAnnotation/data.xmi      |   7 --
 .../ser-ref/casWithTextAndAnnotations/data.xmi     |   9 +++
 .../debug-typesystem.xml                           |   0
 .../ser-ref/casWithTextAndAnnotations/debug.xmi    |   9 +++
 .../data.xmi                                       |  10 +++
 .../debug-typesystem.xml                           |   0
 .../debug.xmi                                      |  10 +++
 102 files changed, 554 insertions(+), 74 deletions(-)

diff --git a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_BINARY_TSI_Test.java b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_BINARY_TSI_Test.java
index 303ada1..22226ca 100644
--- a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_BINARY_TSI_Test.java
+++ b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_BINARY_TSI_Test.java
@@ -66,7 +66,7 @@ public class CasSerializationDeserialization_BINARY_TSI_Test {
   }
 
   private static List<DesSerTestScenario> roundTripDesSerScenarios() throws Exception {
-    return SerDesCasIOTestUtils.roundTripDesSerScenarios(desSerCycles, CAS_FILE_NAME);
+    return SerDesCasIOTestUtils.roundTripDesSerScenariosComparingFileContents(desSerCycles, CAS_FILE_NAME);
   }
 
   private static List<SerDesTestScenario> serDesScenarios() {
diff --git a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_BINARY_Test.java b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_BINARY_Test.java
index 3da78df..16624eb 100644
--- a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_BINARY_Test.java
+++ b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_BINARY_Test.java
@@ -67,7 +67,7 @@ public class CasSerializationDeserialization_BINARY_Test {
   }
 
   private static List<DesSerTestScenario> roundTripDesSerScenarios() throws Exception {
-    return SerDesCasIOTestUtils.roundTripDesSerScenarios(desSerCycles, CAS_FILE_NAME);
+    return SerDesCasIOTestUtils.roundTripDesSerScenariosComparingFileContents(desSerCycles, CAS_FILE_NAME);
   }
 
   private static List<SerDesTestScenario> serDesScenarios() {
diff --git a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test.java b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test.java
index f7d487d..9763642 100644
--- a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test.java
+++ b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test.java
@@ -65,7 +65,7 @@ public class CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test {
   }
 
   private static List<DesSerTestScenario> roundTripDesSerScenarios() throws Exception {
-    return SerDesCasIOTestUtils.roundTripDesSerScenarios(desSerCycles, CAS_FILE_NAME);
+    return SerDesCasIOTestUtils.roundTripDesSerScenariosComparingFileContents(desSerCycles, CAS_FILE_NAME);
   }
 
   private static List<SerDesTestScenario> serDesScenarios() {
diff --git a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_SERIALIZED_TSI_Test.java b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_SERIALIZED_TSI_Test.java
index e1664fe..1640b24 100644
--- a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_SERIALIZED_TSI_Test.java
+++ b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_SERIALIZED_TSI_Test.java
@@ -65,7 +65,7 @@ public class CasSerializationDeserialization_SERIALIZED_TSI_Test {
   }
 
   private static List<DesSerTestScenario> roundTripDesSerScenarios() throws Exception {
-    return SerDesCasIOTestUtils.roundTripDesSerScenarios(desSerCycles, CAS_FILE_NAME);
+    return SerDesCasIOTestUtils.roundTripDesSerScenariosComparingFileContents(desSerCycles, CAS_FILE_NAME);
   }
 
   private static List<SerDesTestScenario> serDesScenarios() {
diff --git a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_XCAS_Test.java b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_XCAS_Test.java
index a8051f7..13ed5c4 100644
--- a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_XCAS_Test.java
+++ b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_XCAS_Test.java
@@ -69,7 +69,8 @@ public class CasSerializationDeserialization_XCAS_Test {
   }
 
   private static List<DesSerTestScenario> roundTripDesSerScenarios() throws Exception {
-    return SerDesCasIOTestUtils.roundTripDesSerScenarios(desSerCycles, CAS_FILE_NAME);
+    return SerDesCasIOTestUtils.roundTripDesSerScenariosComparingCasContents(desSerCycles,
+            CAS_FILE_NAME);
   }
 
   private static List<SerDesTestScenario> serDesScenarios() {
diff --git a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_XMI_1_0_PRETTY_Test.java b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_XMI_1_0_PRETTY_Test.java
index d5231e5..baa5b77 100644
--- a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_XMI_1_0_PRETTY_Test.java
+++ b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_XMI_1_0_PRETTY_Test.java
@@ -20,7 +20,6 @@ package org.apache.uima.cas.serdes;
 
 import static java.util.Arrays.asList;
 import static org.apache.uima.cas.SerialFormat.XMI_PRETTY;
-import static org.apache.uima.cas.serdes.SerDesAssuptions.assumeNotKnownToFail;
 import static org.apache.uima.cas.serdes.SerDesCasIOTestUtils.desser;
 import static org.apache.uima.cas.serdes.SerDesCasIOTestUtils.serdes;
 import static org.apache.uima.cas.serdes.datasuites.XmiFileDataSuite.DATA_XMI;
@@ -69,8 +68,8 @@ public class CasSerializationDeserialization_XMI_1_0_PRETTY_Test {
   }
 
   private static List<DesSerTestScenario> roundTripDesSerScenarios() throws Exception {
-    return SerDesCasIOTestUtils.roundTripDesSerScenarios(desSerCycles, CAS_FILE_NAME);
-
+    return SerDesCasIOTestUtils.roundTripDesSerScenariosComparingCasContents(desSerCycles,
+            CAS_FILE_NAME);
   }
 
   private static List<SerDesTestScenario> serDesScenarios() {
@@ -136,9 +135,6 @@ public class CasSerializationDeserialization_XMI_1_0_PRETTY_Test {
   @ParameterizedTest
   @MethodSource("roundTripDesSerScenarios")
   public void roundTripDeserializeSerializeTest(Runnable aScenario) throws Exception {
-    assumeNotKnownToFail(aScenario, //
-            ".*casWithSofaDataArray", "Round-trip does not exactly preserve XMI IDs");
-
     aScenario.run();
   }
 
diff --git a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_XMI_1_1_PRETTY_Test.java b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_XMI_1_1_PRETTY_Test.java
index c277b52..6dc0756 100644
--- a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_XMI_1_1_PRETTY_Test.java
+++ b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_XMI_1_1_PRETTY_Test.java
@@ -20,7 +20,6 @@ package org.apache.uima.cas.serdes;
 
 import static java.util.Arrays.asList;
 import static org.apache.uima.cas.SerialFormat.XMI_1_1_PRETTY;
-import static org.apache.uima.cas.serdes.SerDesAssuptions.assumeNotKnownToFail;
 import static org.apache.uima.cas.serdes.SerDesCasIOTestUtils.desser;
 import static org.apache.uima.cas.serdes.SerDesCasIOTestUtils.serdes;
 import static org.apache.uima.cas.serdes.datasuites.XmiFileDataSuite.DATA_XMI;
@@ -69,7 +68,8 @@ public class CasSerializationDeserialization_XMI_1_1_PRETTY_Test {
   }
 
   private static List<DesSerTestScenario> roundTripDesSerScenarios() throws Exception {
-    return SerDesCasIOTestUtils.roundTripDesSerScenarios(desSerCycles, CAS_FILE_NAME);
+    return SerDesCasIOTestUtils.roundTripDesSerScenariosComparingCasContents(desSerCycles,
+            CAS_FILE_NAME);
   }
 
   private static List<SerDesTestScenario> serDesScenarios() {
@@ -108,9 +108,6 @@ public class CasSerializationDeserialization_XMI_1_1_PRETTY_Test {
   @ParameterizedTest
   @MethodSource("roundTripDesSerScenarios")
   public void roundTripDeserializeSerializeTest(Runnable aScenario) throws Exception {
-    assumeNotKnownToFail(aScenario, //
-            ".*casWithSofaDataArray", "Round-trip does not exactly preserve XMI IDs");
-
     aScenario.run();
   }
 
diff --git a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/SerDesCasIOTestUtils.java b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/SerDesCasIOTestUtils.java
index a40a29b..4521ab6 100644
--- a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/SerDesCasIOTestUtils.java
+++ b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/SerDesCasIOTestUtils.java
@@ -22,12 +22,14 @@ import static java.nio.file.Files.newOutputStream;
 import static java.util.Arrays.asList;
 import static java.util.stream.Collectors.toList;
 import static org.apache.uima.cas.SerialFormat.XMI_PRETTY;
+import static org.apache.uima.cas.serdes.CasToComparableText.toComparableString;
 import static org.apache.uima.cas.serdes.TestType.ONE_WAY;
 import static org.apache.uima.cas.serdes.TestType.ROUND_TRIP;
 import static org.apache.uima.cas.serdes.TestType.SER_DES;
 import static org.apache.uima.cas.serdes.TestType.SER_REF;
 import static org.apache.uima.util.CasCreationUtils.createCas;
 import static org.apache.uima.util.TypeSystemUtil.typeSystem2TypeSystemDescription;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -103,7 +105,7 @@ public class SerDesCasIOTestUtils {
    * DESERIALIZE -> SERIALIZE scenarios using the reference data from the
    * serialize/compare-to-reference data.
    */
-  public static List<DesSerTestScenario> roundTripDesSerScenarios(
+  public static List<DesSerTestScenario> roundTripDesSerScenariosComparingFileContents(
           Collection<CasDesSerCycleConfiguration> aDesSerCycles, String aCasFileName)
           throws Exception {
     Class<?> caller = getCallerClass();
@@ -123,6 +125,39 @@ public class SerDesCasIOTestUtils {
   }
 
   /**
+   * DESERIALIZE -> SERIALIZE scenarios using the reference data from the
+   * serialize/compare-to-reference data.
+   */
+  public static List<DesSerTestScenario> roundTripDesSerScenariosComparingCasContents(
+          Collection<CasDesSerCycleConfiguration> aDesSerCycles, String aCasFileName)
+          throws Exception {
+    Class<?> caller = getCallerClass();
+
+    List<DesSerTestScenario> confs = new ArrayList<>();
+
+    for (CasDesSerCycleConfiguration cycle : aDesSerCycles) {
+      try (Stream<DesSerTestScenario.Builder> builders = DesSerTestScenario.builderCases(caller,
+              cycle, ROUND_TRIP, aCasFileName)) {
+
+        builders.map(builder -> builder //
+                .withCycle(cycle::performCycle) //
+                .withAssertion((targetCasFile, referenceCasFile) -> {
+                  CAS targetCas = CasCreationUtils.createCas();
+                  des(targetCas, targetCasFile, CasLoadMode.DEFAULT);
+                  CAS referenceCas = CasCreationUtils.createCas();
+                  des(referenceCas, referenceCasFile, CasLoadMode.DEFAULT);
+                  assertThat(toComparableString(targetCas))
+                          .isEqualTo(toComparableString(referenceCas));
+
+                }).build()) //
+                .forEach(confs::add);
+      }
+    }
+
+    return confs;
+  }
+
+  /**
    * SERIALIZE -> DESERIALIZE scenarios using the example CASes provided by
    * {@link ProgrammaticallyCreatedCasDataSuite} and applying them to each of the configured
    * serialization/deserialization cycles.
diff --git a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/datasuites/ProgrammaticallyCreatedCasDataSuite.java b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/datasuites/ProgrammaticallyCreatedCasDataSuite.java
index b66b8cf..6d77c89 100644
--- a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/datasuites/ProgrammaticallyCreatedCasDataSuite.java
+++ b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/datasuites/ProgrammaticallyCreatedCasDataSuite.java
@@ -28,7 +28,7 @@ import java.util.List;
 import org.apache.uima.cas.ByteArrayFS;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.cas.serdes.transitions.CasSourceTargetConfiguration;
-import org.apache.uima.jcas.tcas.Annotation;
+import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.util.CasCreationUtils;
 
 public class ProgrammaticallyCreatedCasDataSuite
@@ -44,9 +44,27 @@ public class ProgrammaticallyCreatedCasDataSuite
                     .withTargetCasSupplier(CasCreationUtils::createCas) //
                     .build(),
             CasSourceTargetConfiguration.builder() //
-                    .withTitle("casWithTextAndAnnotation") //
+                    .withTitle("casWithTextAndAnnotations") //
                     .withSourceCasSupplier(
-                            ProgrammaticallyCreatedCasDataSuite::casWithTextAndAnnotation)
+                            ProgrammaticallyCreatedCasDataSuite::casWithTextAndAnnotations)
+                    .withTargetCasSupplier(CasCreationUtils::createCas) //
+                    .build(),
+            CasSourceTargetConfiguration.builder() //
+                    .withTitle("casWithEmojiUnicodeTextAndAnnotations") //
+                    .withSourceCasSupplier(
+                            ProgrammaticallyCreatedCasDataSuite::casWithEmojiUnicodeTextAndAnnotations)
+                    .withTargetCasSupplier(CasCreationUtils::createCas) //
+                    .build(),
+            CasSourceTargetConfiguration.builder() //
+                    .withTitle("casWithLeftToRightTextAndAnnotations") //
+                    .withSourceCasSupplier(
+                            ProgrammaticallyCreatedCasDataSuite::casWithLeftToRightTextAndAnnotations)
+                    .withTargetCasSupplier(CasCreationUtils::createCas) //
+                    .build(),
+            CasSourceTargetConfiguration.builder() //
+                    .withTitle("casWithTraditionalChineseTextAndAnnotations") //
+                    .withSourceCasSupplier(
+                            ProgrammaticallyCreatedCasDataSuite::casWithTraditionalChineseTextAndAnnotations)
                     .withTargetCasSupplier(CasCreationUtils::createCas) //
                     .build(),
             CasSourceTargetConfiguration.builder() //
@@ -82,13 +100,51 @@ public class ProgrammaticallyCreatedCasDataSuite
     return cas;
   }
 
-  public static CAS casWithTextAndAnnotation() throws Exception {
+  public static CAS casWithTextAndAnnotations() throws Exception {
     CAS cas = CasCreationUtils.createCas();
-    cas.setDocumentText("This is a test.");
+    StringBuilder sb = new StringBuilder();
+    createAnnotatedText(cas, sb, "This", " ");
+    createAnnotatedText(cas, sb, "is", " ");
+    createAnnotatedText(cas, sb, "a", " ");
+    createAnnotatedText(cas, sb, "test");
+    return cas;
+  }
 
-    Annotation a = new Annotation(cas.getJCas(), 0, cas.getDocumentText().length());
-    a.addToIndexes();
+  public static CAS casWithEmojiUnicodeTextAndAnnotations() throws Exception {
+    CAS cas = CasCreationUtils.createCas();
+    StringBuilder sb = new StringBuilder();
+    createAnnotatedText(cas, sb, "🥳", " ");
+    createAnnotatedText(cas, sb, "This", " ");
+    createAnnotatedText(cas, sb, "👳🏻‍♀️", " ");
+    createAnnotatedText(cas, sb, "is", " ");
+    createAnnotatedText(cas, sb, "✆", " ");
+    createAnnotatedText(cas, sb, "a", " ");
+    createAnnotatedText(cas, sb, "🧔🏾‍♂️", " ");
+    createAnnotatedText(cas, sb, "test", " ");
+    createAnnotatedText(cas, sb, "👻");
+    cas.setDocumentText(sb.toString());
+    return cas;
+  }
 
+  public static CAS casWithLeftToRightTextAndAnnotations() throws Exception {
+    CAS cas = CasCreationUtils.createCas();
+    StringBuilder sb = new StringBuilder();
+    // "this is a test" per Google Translate
+    createAnnotatedText(cas, sb, "هذا", " ");
+    createAnnotatedText(cas, sb, "اختبار");
+    cas.setDocumentText(sb.toString());
+    return cas;
+  }
+
+  public static CAS casWithTraditionalChineseTextAndAnnotations() throws Exception {
+    CAS cas = CasCreationUtils.createCas();
+    StringBuilder sb = new StringBuilder();
+    // "This is a test" per Google Translate
+    createAnnotatedText(cas, sb, "這");
+    createAnnotatedText(cas, sb, "是");
+    createAnnotatedText(cas, sb, "一個");
+    createAnnotatedText(cas, sb, "測試");
+    cas.setDocumentText(sb.toString());
     return cas;
   }
 
@@ -114,6 +170,17 @@ public class ProgrammaticallyCreatedCasDataSuite
     return cas;
   }
 
+  private static void createAnnotatedText(CAS aCas, StringBuilder aBuffer, String aText,
+          String... aSuffix) {
+    int begin = aBuffer.length();
+    aBuffer.append(aText);
+    AnnotationFS a = aCas.createAnnotation(aCas.getAnnotationType(), begin, aBuffer.length());
+    aCas.addFsToIndexes(a);
+    for (String s : aSuffix) {
+      aBuffer.append(s);
+    }
+  }
+
   /**
    * Creates builder to build {@link ProgrammaticallyCreatedCasDataSuite}.
    * 
diff --git a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/scenario/DesSerTestScenario.java b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/scenario/DesSerTestScenario.java
index df06708..8c896cc 100644
--- a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/scenario/DesSerTestScenario.java
+++ b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/scenario/DesSerTestScenario.java
@@ -21,6 +21,7 @@ package org.apache.uima.cas.serdes.scenario;
 import static java.nio.file.Files.isDirectory;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.contentOf;
+import static org.assertj.core.api.Assertions.fail;
 
 import java.io.IOException;
 import java.nio.file.Files;
@@ -39,6 +40,7 @@ public class DesSerTestScenario implements Runnable {
   private final Path referenceCasFile;
   private final Path targetBasePath;
   private final FailableBiConsumer<Path, Path, ?> cycle;
+  private final FailableBiConsumer<Path, Path, ?> assertion;
 
   private DesSerTestScenario(Builder builder) {
     this.title = builder.title;
@@ -46,6 +48,7 @@ public class DesSerTestScenario implements Runnable {
     this.referenceCasFile = builder.referenceCasFile;
     this.targetBasePath = builder.targetBasePath;
     this.cycle = builder.cycle;
+    this.assertion = builder.assertion;
   }
 
   public Path getSourceCasFile() {
@@ -65,9 +68,13 @@ public class DesSerTestScenario implements Runnable {
     // Perform actual test cycle
     deserializationSerializationCycle(getSourceCasFile(), targetCasFile);
 
-    // Compare the serialized CAS file against the reference
-    assertThat(contentOf(targetCasFile.toFile())) //
-            .isEqualTo(contentOf(referenceCasFile.toFile()));
+    try {
+      assertion.accept(targetCasFile, referenceCasFile);
+    } catch (RuntimeException | Error e) {
+      throw e;
+    } catch (Throwable e) {
+      fail("Unable to apply assertion", e);
+    }
   }
 
   public void deserializationSerializationCycle(Path aSourceCas, Path aTargetCas) {
@@ -110,6 +117,10 @@ public class DesSerTestScenario implements Runnable {
                     .withCasFile(caseFolder.resolve(aCasFileName)));
   }
 
+  public static void assertFileContentsAreEqual(Path aTargetCasFile, Path aReferenceCasFile) {
+    assertThat(contentOf(aTargetCasFile.toFile())).isEqualTo(contentOf(aReferenceCasFile.toFile()));
+  }
+
   /**
    * Builder to build {@link DesSerTestScenario}.
    */
@@ -119,8 +130,11 @@ public class DesSerTestScenario implements Runnable {
     private Path referenceCasFile;
     private Path targetBasePath;
     private FailableBiConsumer<Path, Path, ?> cycle;
+    private FailableBiConsumer<Path, Path, ?> assertion;
 
     private Builder() {
+      // Compare the serialized CAS file against the reference
+      assertion = DesSerTestScenario::assertFileContentsAreEqual;
     }
 
     public Builder withTitle(String title) {
@@ -154,6 +168,11 @@ public class DesSerTestScenario implements Runnable {
       return this;
     }
 
+    public Builder withAssertion(FailableBiConsumer<Path, Path, ?> aAssertion) {
+      this.assertion = aAssertion;
+      return this;
+    }
+
     public DesSerTestScenario build() {
       return new DesSerTestScenario(this);
     }
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/cas.bin
similarity index 80%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/cas.bin
index 4d297c0..eaf6e4b 100644
Binary files a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin and b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/cas.bin differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug-typesystem.xml
similarity index 100%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..6d8ec43
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug.xmi
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="2"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="3" end="7"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="8" end="15"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="16" end="18"/>
+    <tcas:Annotation xmi:id="6" sofa="1" begin="19" end="20"/>
+    <tcas:Annotation xmi:id="7" sofa="1" begin="21" end="22"/>
+    <tcas:Annotation xmi:id="8" sofa="1" begin="23" end="30"/>
+    <tcas:Annotation xmi:id="9" sofa="1" begin="31" end="35"/>
+    <tcas:Annotation xmi:id="10" sofa="1" begin="36" end="38"/>
+    <tcas:DocumentAnnotation xmi:id="11" sofa="1" begin="0" end="38" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="&#129395; This &#128115;&#127995;‍♀️ is ✆ a &#129492;&#127998;‍♂️ test &#128123;"/>
+    <cas:View sofa="1" members="2 3 4 5 6 7 8 9 10 11"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithLeftToRightTextAndAnnotations/cas.bin
similarity index 86%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithLeftToRightTextAndAnnotations/cas.bin
index 4d297c0..7b222d6 100644
Binary files a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin and b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithLeftToRightTextAndAnnotations/cas.bin differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug-typesystem.xml
similarity index 100%
rename from uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
rename to uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..108d362
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug.xmi
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="3"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="4" end="10"/>
+    <tcas:DocumentAnnotation xmi:id="4" sofa="1" begin="0" end="10" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="هذا اختبار"/>
+    <cas:View sofa="1" members="2 3 4"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTextAndAnnotations/cas.bin
similarity index 87%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTextAndAnnotations/cas.bin
index 4d297c0..96f5ab9 100644
Binary files a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin and b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTextAndAnnotations/cas.bin differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTextAndAnnotations/debug-typesystem.xml
similarity index 100%
rename from uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
rename to uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..37c1e9b
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTextAndAnnotations/debug.xmi
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="4"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="5" end="7"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="8" end="9"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="10" end="14"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView"/>
+    <cas:View sofa="1" members="2 3 4 5"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/cas.bin
similarity index 85%
rename from uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin
rename to uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/cas.bin
index 4d297c0..14133f6 100644
Binary files a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin and b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/cas.bin differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug-typesystem.xml
similarity index 100%
rename from uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
rename to uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..0087d72
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug.xmi
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="1"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="1" end="2"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="2" end="4"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="4" end="6"/>
+    <tcas:DocumentAnnotation xmi:id="6" sofa="1" begin="0" end="6" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="這是一個測試"/>
+    <cas:View sofa="1" members="2 3 4 5 6"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/cas.bin
new file mode 100644
index 0000000..e2cbb62
Binary files /dev/null and b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/cas.bin differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug-typesystem.xml
similarity index 100%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..6d8ec43
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug.xmi
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="2"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="3" end="7"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="8" end="15"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="16" end="18"/>
+    <tcas:Annotation xmi:id="6" sofa="1" begin="19" end="20"/>
+    <tcas:Annotation xmi:id="7" sofa="1" begin="21" end="22"/>
+    <tcas:Annotation xmi:id="8" sofa="1" begin="23" end="30"/>
+    <tcas:Annotation xmi:id="9" sofa="1" begin="31" end="35"/>
+    <tcas:Annotation xmi:id="10" sofa="1" begin="36" end="38"/>
+    <tcas:DocumentAnnotation xmi:id="11" sofa="1" begin="0" end="38" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="&#129395; This &#128115;&#127995;‍♀️ is ✆ a &#129492;&#127998;‍♂️ test &#128123;"/>
+    <cas:View sofa="1" members="2 3 4 5 6 7 8 9 10 11"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithLeftToRightTextAndAnnotations/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithLeftToRightTextAndAnnotations/cas.bin
new file mode 100644
index 0000000..69e77af
Binary files /dev/null and b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithLeftToRightTextAndAnnotations/cas.bin differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug-typesystem.xml
similarity index 100%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..108d362
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug.xmi
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="3"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="4" end="10"/>
+    <tcas:DocumentAnnotation xmi:id="4" sofa="1" begin="0" end="10" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="هذا اختبار"/>
+    <cas:View sofa="1" members="2 3 4"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithTextAndAnnotation/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithTextAndAnnotation/cas.bin
deleted file mode 100644
index c372ce9..0000000
Binary files a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithTextAndAnnotation/cas.bin and /dev/null differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithTextAndAnnotations/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithTextAndAnnotations/cas.bin
new file mode 100644
index 0000000..a64f65d
Binary files /dev/null and b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithTextAndAnnotations/cas.bin differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithTextAndAnnotations/debug-typesystem.xml
similarity index 100%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..37c1e9b
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithTextAndAnnotations/debug.xmi
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="4"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="5" end="7"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="8" end="9"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="10" end="14"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView"/>
+    <cas:View sofa="1" members="2 3 4 5"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/cas.bin
new file mode 100644
index 0000000..5b6d58f
Binary files /dev/null and b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/cas.bin differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug-typesystem.xml
similarity index 100%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..0087d72
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug.xmi
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="1"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="1" end="2"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="2" end="4"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="4" end="6"/>
+    <tcas:DocumentAnnotation xmi:id="6" sofa="1" begin="0" end="6" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="這是一個測試"/>
+    <cas:View sofa="1" members="2 3 4 5 6"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/cas.bin
similarity index 87%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/cas.bin
index b5d92fa..29fba1b 100644
Binary files a/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin and b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/cas.bin differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug-typesystem.xml
similarity index 100%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..6d8ec43
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug.xmi
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="2"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="3" end="7"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="8" end="15"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="16" end="18"/>
+    <tcas:Annotation xmi:id="6" sofa="1" begin="19" end="20"/>
+    <tcas:Annotation xmi:id="7" sofa="1" begin="21" end="22"/>
+    <tcas:Annotation xmi:id="8" sofa="1" begin="23" end="30"/>
+    <tcas:Annotation xmi:id="9" sofa="1" begin="31" end="35"/>
+    <tcas:Annotation xmi:id="10" sofa="1" begin="36" end="38"/>
+    <tcas:DocumentAnnotation xmi:id="11" sofa="1" begin="0" end="38" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="&#129395; This &#128115;&#127995;‍♀️ is ✆ a &#129492;&#127998;‍♂️ test &#128123;"/>
+    <cas:View sofa="1" members="2 3 4 5 6 7 8 9 10 11"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithLeftToRightTextAndAnnotations/cas.bin
similarity index 89%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithLeftToRightTextAndAnnotations/cas.bin
index b5d92fa..985937b 100644
Binary files a/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin and b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithLeftToRightTextAndAnnotations/cas.bin differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug-typesystem.xml
similarity index 100%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..108d362
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug.xmi
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="3"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="4" end="10"/>
+    <tcas:DocumentAnnotation xmi:id="4" sofa="1" begin="0" end="10" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="هذا اختبار"/>
+    <cas:View sofa="1" members="2 3 4"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotation/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotation/debug.xmi
deleted file mode 100644
index 7292031..0000000
--- a/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotation/debug.xmi
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
-    <cas:NULL xmi:id="0"/>
-    <tcas:DocumentAnnotation xmi:id="2" sofa="1" begin="0" end="15" language="x-unspecified"/>
-    <tcas:Annotation xmi:id="3" sofa="1" begin="0" end="15"/>
-    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="This is a test."/>
-    <cas:View sofa="1" members="2 3"/>
-</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotations/cas.bin
similarity index 89%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotations/cas.bin
index b5d92fa..ab12ac1 100644
Binary files a/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin and b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotations/cas.bin differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotations/debug-typesystem.xml
similarity index 100%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..37c1e9b
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotations/debug.xmi
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="4"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="5" end="7"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="8" end="9"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="10" end="14"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView"/>
+    <cas:View sofa="1" members="2 3 4 5"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/cas.bin
similarity index 89%
rename from uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin
rename to uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/cas.bin
index b5d92fa..a3549ff 100644
Binary files a/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin and b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/cas.bin differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug-typesystem.xml
similarity index 100%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..0087d72
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug.xmi
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="1"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="1" end="2"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="2" end="4"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="4" end="6"/>
+    <tcas:DocumentAnnotation xmi:id="6" sofa="1" begin="0" end="6" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="這是一個測試"/>
+    <cas:View sofa="1" members="2 3 4 5 6"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/cas.bin
similarity index 83%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/cas.bin
index 48a5381..cae434b 100644
Binary files a/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin and b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/cas.bin differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug-typesystem.xml
similarity index 100%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..6d8ec43
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug.xmi
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="2"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="3" end="7"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="8" end="15"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="16" end="18"/>
+    <tcas:Annotation xmi:id="6" sofa="1" begin="19" end="20"/>
+    <tcas:Annotation xmi:id="7" sofa="1" begin="21" end="22"/>
+    <tcas:Annotation xmi:id="8" sofa="1" begin="23" end="30"/>
+    <tcas:Annotation xmi:id="9" sofa="1" begin="31" end="35"/>
+    <tcas:Annotation xmi:id="10" sofa="1" begin="36" end="38"/>
+    <tcas:DocumentAnnotation xmi:id="11" sofa="1" begin="0" end="38" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="&#129395; This &#128115;&#127995;‍♀️ is ✆ a &#129492;&#127998;‍♂️ test &#128123;"/>
+    <cas:View sofa="1" members="2 3 4 5 6 7 8 9 10 11"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithLeftToRightTextAndAnnotations/cas.bin
similarity index 89%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithLeftToRightTextAndAnnotations/cas.bin
index 48a5381..f6a014e 100644
Binary files a/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin and b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithLeftToRightTextAndAnnotations/cas.bin differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug-typesystem.xml
similarity index 100%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..108d362
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug.xmi
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="3"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="4" end="10"/>
+    <tcas:DocumentAnnotation xmi:id="4" sofa="1" begin="0" end="10" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="هذا اختبار"/>
+    <cas:View sofa="1" members="2 3 4"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotation/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotation/debug.xmi
deleted file mode 100644
index 7292031..0000000
--- a/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotation/debug.xmi
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
-    <cas:NULL xmi:id="0"/>
-    <tcas:DocumentAnnotation xmi:id="2" sofa="1" begin="0" end="15" language="x-unspecified"/>
-    <tcas:Annotation xmi:id="3" sofa="1" begin="0" end="15"/>
-    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="This is a test."/>
-    <cas:View sofa="1" members="2 3"/>
-</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotations/cas.bin
similarity index 89%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotations/cas.bin
index 48a5381..2bee805 100644
Binary files a/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin and b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotations/cas.bin differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotations/debug-typesystem.xml
similarity index 100%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..37c1e9b
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotations/debug.xmi
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="4"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="5" end="7"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="8" end="9"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="10" end="14"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView"/>
+    <cas:View sofa="1" members="2 3 4 5"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/cas.bin
similarity index 88%
rename from uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin
rename to uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/cas.bin
index 48a5381..1f013d8 100644
Binary files a/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTextAndAnnotation/cas.bin and b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/cas.bin differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug-typesystem.xml
similarity index 100%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..0087d72
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug.xmi
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="1"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="1" end="2"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="2" end="4"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="4" end="6"/>
+    <tcas:DocumentAnnotation xmi:id="6" sofa="1" begin="0" end="6" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="這是一個測試"/>
+    <cas:View sofa="1" members="2 3 4 5 6"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/cas.xcas b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/cas.xcas
new file mode 100644
index 0000000..386d845
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/cas.xcas
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?><CAS version="2">
+    <uima.cas.Sofa _indexed="0" _id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="&#129395; This &#128115;&#127995;‍♀️ is ✆ a &#129492;&#127998;‍♂️ test &#128123;"/>
+    <uima.tcas.Annotation _indexed="1" _id="2" _ref_sofa="1" begin="0" end="2"/>
+    <uima.tcas.Annotation _indexed="1" _id="3" _ref_sofa="1" begin="3" end="7"/>
+    <uima.tcas.Annotation _indexed="1" _id="4" _ref_sofa="1" begin="8" end="15"/>
+    <uima.tcas.Annotation _indexed="1" _id="5" _ref_sofa="1" begin="16" end="18"/>
+    <uima.tcas.Annotation _indexed="1" _id="6" _ref_sofa="1" begin="19" end="20"/>
+    <uima.tcas.Annotation _indexed="1" _id="7" _ref_sofa="1" begin="21" end="22"/>
+    <uima.tcas.Annotation _indexed="1" _id="8" _ref_sofa="1" begin="23" end="30"/>
+    <uima.tcas.Annotation _indexed="1" _id="9" _ref_sofa="1" begin="31" end="35"/>
+    <uima.tcas.Annotation _indexed="1" _id="10" _ref_sofa="1" begin="36" end="38"/>
+    <uima.tcas.DocumentAnnotation _indexed="1" _id="11" _ref_sofa="1" begin="0" end="38" language="x-unspecified"/>
+</CAS>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug-typesystem.xml
similarity index 100%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..6d8ec43
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug.xmi
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="2"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="3" end="7"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="8" end="15"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="16" end="18"/>
+    <tcas:Annotation xmi:id="6" sofa="1" begin="19" end="20"/>
+    <tcas:Annotation xmi:id="7" sofa="1" begin="21" end="22"/>
+    <tcas:Annotation xmi:id="8" sofa="1" begin="23" end="30"/>
+    <tcas:Annotation xmi:id="9" sofa="1" begin="31" end="35"/>
+    <tcas:Annotation xmi:id="10" sofa="1" begin="36" end="38"/>
+    <tcas:DocumentAnnotation xmi:id="11" sofa="1" begin="0" end="38" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="&#129395; This &#128115;&#127995;‍♀️ is ✆ a &#129492;&#127998;‍♂️ test &#128123;"/>
+    <cas:View sofa="1" members="2 3 4 5 6 7 8 9 10 11"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithLeftToRightTextAndAnnotations/cas.xcas b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithLeftToRightTextAndAnnotations/cas.xcas
new file mode 100644
index 0000000..9d0c3a9
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithLeftToRightTextAndAnnotations/cas.xcas
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?><CAS version="2">
+    <uima.cas.Sofa _indexed="0" _id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="هذا اختبار"/>
+    <uima.tcas.Annotation _indexed="1" _id="2" _ref_sofa="1" begin="0" end="3"/>
+    <uima.tcas.Annotation _indexed="1" _id="3" _ref_sofa="1" begin="4" end="10"/>
+    <uima.tcas.DocumentAnnotation _indexed="1" _id="4" _ref_sofa="1" begin="0" end="10" language="x-unspecified"/>
+</CAS>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug-typesystem.xml
similarity index 100%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..108d362
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug.xmi
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="3"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="4" end="10"/>
+    <tcas:DocumentAnnotation xmi:id="4" sofa="1" begin="0" end="10" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="هذا اختبار"/>
+    <cas:View sofa="1" members="2 3 4"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithTextAndAnnotation/cas.xcas b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithTextAndAnnotation/cas.xcas
deleted file mode 100644
index 2137b81..0000000
--- a/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithTextAndAnnotation/cas.xcas
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><CAS version="2">
-    <uima.cas.Sofa _indexed="0" _id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="This is a test."/>
-    <uima.tcas.DocumentAnnotation _indexed="1" _id="2" _ref_sofa="1" begin="0" end="15" language="x-unspecified"/>
-    <uima.tcas.Annotation _indexed="1" _id="3" _ref_sofa="1" begin="0" end="15"/>
-</CAS>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithTextAndAnnotation/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithTextAndAnnotation/debug.xmi
deleted file mode 100644
index 7292031..0000000
--- a/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithTextAndAnnotation/debug.xmi
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
-    <cas:NULL xmi:id="0"/>
-    <tcas:DocumentAnnotation xmi:id="2" sofa="1" begin="0" end="15" language="x-unspecified"/>
-    <tcas:Annotation xmi:id="3" sofa="1" begin="0" end="15"/>
-    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="This is a test."/>
-    <cas:View sofa="1" members="2 3"/>
-</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithTextAndAnnotations/cas.xcas b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithTextAndAnnotations/cas.xcas
new file mode 100644
index 0000000..c1341c7
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithTextAndAnnotations/cas.xcas
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?><CAS version="2">
+    <uima.cas.Sofa _indexed="0" _id="1" sofaNum="1" sofaID="_InitialView"/>
+    <uima.tcas.Annotation _indexed="1" _id="2" _ref_sofa="1" begin="0" end="4"/>
+    <uima.tcas.Annotation _indexed="1" _id="3" _ref_sofa="1" begin="5" end="7"/>
+    <uima.tcas.Annotation _indexed="1" _id="4" _ref_sofa="1" begin="8" end="9"/>
+    <uima.tcas.Annotation _indexed="1" _id="5" _ref_sofa="1" begin="10" end="14"/>
+</CAS>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithTextAndAnnotations/debug-typesystem.xml
similarity index 100%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..37c1e9b
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithTextAndAnnotations/debug.xmi
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="4"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="5" end="7"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="8" end="9"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="10" end="14"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView"/>
+    <cas:View sofa="1" members="2 3 4 5"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/cas.xcas b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/cas.xcas
new file mode 100644
index 0000000..1eddc91
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/cas.xcas
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?><CAS version="2">
+    <uima.cas.Sofa _indexed="0" _id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="這是一個測試"/>
+    <uima.tcas.Annotation _indexed="1" _id="2" _ref_sofa="1" begin="0" end="1"/>
+    <uima.tcas.Annotation _indexed="1" _id="3" _ref_sofa="1" begin="1" end="2"/>
+    <uima.tcas.Annotation _indexed="1" _id="4" _ref_sofa="1" begin="2" end="4"/>
+    <uima.tcas.Annotation _indexed="1" _id="5" _ref_sofa="1" begin="4" end="6"/>
+    <uima.tcas.DocumentAnnotation _indexed="1" _id="6" _ref_sofa="1" begin="0" end="6" language="x-unspecified"/>
+</CAS>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug-typesystem.xml
similarity index 100%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..0087d72
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug.xmi
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="1"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="1" end="2"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="2" end="4"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="4" end="6"/>
+    <tcas:DocumentAnnotation xmi:id="6" sofa="1" begin="0" end="6" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="這是一個測試"/>
+    <cas:View sofa="1" members="2 3 4 5 6"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/data.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/data.xmi
new file mode 100644
index 0000000..6d8ec43
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/data.xmi
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="2"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="3" end="7"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="8" end="15"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="16" end="18"/>
+    <tcas:Annotation xmi:id="6" sofa="1" begin="19" end="20"/>
+    <tcas:Annotation xmi:id="7" sofa="1" begin="21" end="22"/>
+    <tcas:Annotation xmi:id="8" sofa="1" begin="23" end="30"/>
+    <tcas:Annotation xmi:id="9" sofa="1" begin="31" end="35"/>
+    <tcas:Annotation xmi:id="10" sofa="1" begin="36" end="38"/>
+    <tcas:DocumentAnnotation xmi:id="11" sofa="1" begin="0" end="38" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="&#129395; This &#128115;&#127995;‍♀️ is ✆ a &#129492;&#127998;‍♂️ test &#128123;"/>
+    <cas:View sofa="1" members="2 3 4 5 6 7 8 9 10 11"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug-typesystem.xml
similarity index 100%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..6d8ec43
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug.xmi
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="2"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="3" end="7"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="8" end="15"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="16" end="18"/>
+    <tcas:Annotation xmi:id="6" sofa="1" begin="19" end="20"/>
+    <tcas:Annotation xmi:id="7" sofa="1" begin="21" end="22"/>
+    <tcas:Annotation xmi:id="8" sofa="1" begin="23" end="30"/>
+    <tcas:Annotation xmi:id="9" sofa="1" begin="31" end="35"/>
+    <tcas:Annotation xmi:id="10" sofa="1" begin="36" end="38"/>
+    <tcas:DocumentAnnotation xmi:id="11" sofa="1" begin="0" end="38" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="&#129395; This &#128115;&#127995;‍♀️ is ✆ a &#129492;&#127998;‍♂️ test &#128123;"/>
+    <cas:View sofa="1" members="2 3 4 5 6 7 8 9 10 11"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithLeftToRightTextAndAnnotations/data.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithLeftToRightTextAndAnnotations/data.xmi
new file mode 100644
index 0000000..108d362
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithLeftToRightTextAndAnnotations/data.xmi
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="3"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="4" end="10"/>
+    <tcas:DocumentAnnotation xmi:id="4" sofa="1" begin="0" end="10" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="هذا اختبار"/>
+    <cas:View sofa="1" members="2 3 4"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug-typesystem.xml
similarity index 100%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..108d362
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug.xmi
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="3"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="4" end="10"/>
+    <tcas:DocumentAnnotation xmi:id="4" sofa="1" begin="0" end="10" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="هذا اختبار"/>
+    <cas:View sofa="1" members="2 3 4"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/data.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/data.xmi
deleted file mode 100644
index 7292031..0000000
--- a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/data.xmi
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
-    <cas:NULL xmi:id="0"/>
-    <tcas:DocumentAnnotation xmi:id="2" sofa="1" begin="0" end="15" language="x-unspecified"/>
-    <tcas:Annotation xmi:id="3" sofa="1" begin="0" end="15"/>
-    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="This is a test."/>
-    <cas:View sofa="1" members="2 3"/>
-</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug.xmi
deleted file mode 100644
index 7292031..0000000
--- a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug.xmi
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
-    <cas:NULL xmi:id="0"/>
-    <tcas:DocumentAnnotation xmi:id="2" sofa="1" begin="0" end="15" language="x-unspecified"/>
-    <tcas:Annotation xmi:id="3" sofa="1" begin="0" end="15"/>
-    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="This is a test."/>
-    <cas:View sofa="1" members="2 3"/>
-</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotations/data.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotations/data.xmi
new file mode 100644
index 0000000..37c1e9b
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotations/data.xmi
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="4"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="5" end="7"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="8" end="9"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="10" end="14"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView"/>
+    <cas:View sofa="1" members="2 3 4 5"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotations/debug-typesystem.xml
similarity index 100%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..37c1e9b
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotations/debug.xmi
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="4"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="5" end="7"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="8" end="9"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="10" end="14"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView"/>
+    <cas:View sofa="1" members="2 3 4 5"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/data.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/data.xmi
new file mode 100644
index 0000000..0087d72
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/data.xmi
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="1"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="1" end="2"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="2" end="4"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="4" end="6"/>
+    <tcas:DocumentAnnotation xmi:id="6" sofa="1" begin="0" end="6" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="這是一個測試"/>
+    <cas:View sofa="1" members="2 3 4 5 6"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug-typesystem.xml
similarity index 100%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..0087d72
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug.xmi
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="1"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="1" end="2"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="2" end="4"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="4" end="6"/>
+    <tcas:DocumentAnnotation xmi:id="6" sofa="1" begin="0" end="6" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="這是一個測試"/>
+    <cas:View sofa="1" members="2 3 4 5 6"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/data.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/data.xmi
new file mode 100644
index 0000000..5f1a9b0
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/data.xmi
@@ -0,0 +1,15 @@
+<?xml version="1.1" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="2"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="3" end="7"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="8" end="15"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="16" end="18"/>
+    <tcas:Annotation xmi:id="6" sofa="1" begin="19" end="20"/>
+    <tcas:Annotation xmi:id="7" sofa="1" begin="21" end="22"/>
+    <tcas:Annotation xmi:id="8" sofa="1" begin="23" end="30"/>
+    <tcas:Annotation xmi:id="9" sofa="1" begin="31" end="35"/>
+    <tcas:Annotation xmi:id="10" sofa="1" begin="36" end="38"/>
+    <tcas:DocumentAnnotation xmi:id="11" sofa="1" begin="0" end="38" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="&#129395; This &#128115;&#127995;‍♀️ is ✆ a &#129492;&#127998;‍♂️ test &#128123;"/>
+    <cas:View sofa="1" members="2 3 4 5 6 7 8 9 10 11"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug-typesystem.xml
similarity index 100%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..6d8ec43
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithEmojiUnicodeTextAndAnnotations/debug.xmi
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="2"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="3" end="7"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="8" end="15"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="16" end="18"/>
+    <tcas:Annotation xmi:id="6" sofa="1" begin="19" end="20"/>
+    <tcas:Annotation xmi:id="7" sofa="1" begin="21" end="22"/>
+    <tcas:Annotation xmi:id="8" sofa="1" begin="23" end="30"/>
+    <tcas:Annotation xmi:id="9" sofa="1" begin="31" end="35"/>
+    <tcas:Annotation xmi:id="10" sofa="1" begin="36" end="38"/>
+    <tcas:DocumentAnnotation xmi:id="11" sofa="1" begin="0" end="38" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="&#129395; This &#128115;&#127995;‍♀️ is ✆ a &#129492;&#127998;‍♂️ test &#128123;"/>
+    <cas:View sofa="1" members="2 3 4 5 6 7 8 9 10 11"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithLeftToRightTextAndAnnotations/data.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithLeftToRightTextAndAnnotations/data.xmi
new file mode 100644
index 0000000..ee07a00
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithLeftToRightTextAndAnnotations/data.xmi
@@ -0,0 +1,8 @@
+<?xml version="1.1" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="3"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="4" end="10"/>
+    <tcas:DocumentAnnotation xmi:id="4" sofa="1" begin="0" end="10" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="هذا اختبار"/>
+    <cas:View sofa="1" members="2 3 4"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug-typesystem.xml
similarity index 100%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..108d362
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithLeftToRightTextAndAnnotations/debug.xmi
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="3"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="4" end="10"/>
+    <tcas:DocumentAnnotation xmi:id="4" sofa="1" begin="0" end="10" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="هذا اختبار"/>
+    <cas:View sofa="1" members="2 3 4"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithTextAndAnnotation/data.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithTextAndAnnotation/data.xmi
deleted file mode 100644
index fb9a91a..0000000
--- a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithTextAndAnnotation/data.xmi
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.1" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
-    <cas:NULL xmi:id="0"/>
-    <tcas:DocumentAnnotation xmi:id="2" sofa="1" begin="0" end="15" language="x-unspecified"/>
-    <tcas:Annotation xmi:id="3" sofa="1" begin="0" end="15"/>
-    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="This is a test."/>
-    <cas:View sofa="1" members="2 3"/>
-</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithTextAndAnnotations/data.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithTextAndAnnotations/data.xmi
new file mode 100644
index 0000000..169e257
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithTextAndAnnotations/data.xmi
@@ -0,0 +1,9 @@
+<?xml version="1.1" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="4"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="5" end="7"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="8" end="9"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="10" end="14"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView"/>
+    <cas:View sofa="1" members="2 3 4 5"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithTextAndAnnotations/debug-typesystem.xml
similarity index 100%
copy from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
copy to uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..37c1e9b
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithTextAndAnnotations/debug.xmi
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="4"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="5" end="7"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="8" end="9"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="10" end="14"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView"/>
+    <cas:View sofa="1" members="2 3 4 5"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/data.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/data.xmi
new file mode 100644
index 0000000..8725816
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/data.xmi
@@ -0,0 +1,10 @@
+<?xml version="1.1" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="1"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="1" end="2"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="2" end="4"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="4" end="6"/>
+    <tcas:DocumentAnnotation xmi:id="6" sofa="1" begin="0" end="6" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="這是一個測試"/>
+    <cas:View sofa="1" members="2 3 4 5 6"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug-typesystem.xml
similarity index 100%
rename from uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithTextAndAnnotation/debug-typesystem.xml
rename to uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug-typesystem.xml
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug.xmi
new file mode 100644
index 0000000..0087d72
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithTraditionalChineseTextAndAnnotations/debug.xmi
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <tcas:Annotation xmi:id="2" sofa="1" begin="0" end="1"/>
+    <tcas:Annotation xmi:id="3" sofa="1" begin="1" end="2"/>
+    <tcas:Annotation xmi:id="4" sofa="1" begin="2" end="4"/>
+    <tcas:Annotation xmi:id="5" sofa="1" begin="4" end="6"/>
+    <tcas:DocumentAnnotation xmi:id="6" sofa="1" begin="0" end="6" language="x-unspecified"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text" sofaString="這是一個測試"/>
+    <cas:View sofa="1" members="2 3 4 5 6"/>
+</xmi:XMI>