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 2023/01/23 16:47:25 UTC

[uima-uimaj] 01/01: Issue #292: Make CAS serialization tests more robust

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

rec pushed a commit to branch refactoring/292-Make-CAS-serialization-tests-more-robust
in repository https://gitbox.apache.org/repos/asf/uima-uimaj.git

commit a955a0da7c10d364e36dbcbad170ba828bb05336
Author: Richard Eckart de Castilho <re...@apache.org>
AuthorDate: Mon Jan 23 17:47:18 2023 +0100

    Issue #292: Make CAS serialization tests more robust
    
    - run SerRef tests using a content comparison
---
 .../CasSerializationDeserialization_XCAS_Test.java |  4 ++
 .../uima/cas/serdes/SerDesCasIOTestUtils.java      |  2 +-
 .../cas/serdes/scenario/SerRefTestScenario.java    | 53 +++++++++++++++++-----
 3 files changed, 46 insertions(+), 13 deletions(-)

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 74c710406..3338007b1 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
@@ -91,6 +91,10 @@ public class CasSerializationDeserialization_XCAS_Test {
   @ParameterizedTest
   @MethodSource("serRefScenarios")
   public void serializeAndCompareToReferenceTest(Runnable aScenario) throws Exception {
+    assumeNotKnownToFail(aScenario, //
+            ".*casWithSofaDataArray",
+            "XCAS does not suport SofA data arrays during deserialiaztion");
+
     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 717f4500a..dd5a13e30 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
@@ -86,7 +86,7 @@ public class SerDesCasIOTestUtils {
     return ProgrammaticallyCreatedCasDataSuite.builder().build().stream()
             .map(conf -> SerRefTestScenario.builder(caller, conf, SER_REF, aCasFileName)
                     .withSerializer((cas, path) -> ser(cas, path, aFormat)) //
-                    .build())
+                    .withAssertion(SerRefTestScenario::assertCasContentsAreEqual).build())
             .collect(toList());
   }
 
diff --git a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/scenario/SerRefTestScenario.java b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/scenario/SerRefTestScenario.java
index ac4039daf..6d9eed47a 100644
--- a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/scenario/SerRefTestScenario.java
+++ b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/scenario/SerRefTestScenario.java
@@ -18,12 +18,17 @@
  */
 package org.apache.uima.cas.serdes.scenario;
 
+import static org.apache.uima.cas.serdes.CasToComparableText.toComparableString;
+import static org.apache.uima.cas.serdes.SerDesCasIOTestUtils.createCasMaybeWithTypesystem;
+import static org.apache.uima.cas.serdes.SerDesCasIOTestUtils.des;
 import static org.apache.uima.cas.serdes.SerDesCasIOTestUtils.writeTypeSystemDescription;
 import static org.apache.uima.cas.serdes.SerDesCasIOTestUtils.writeXmi;
 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 static org.assertj.core.api.Assumptions.assumeThat;
 
+import java.io.IOException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 
@@ -32,6 +37,9 @@ import org.apache.commons.lang3.function.FailableSupplier;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.cas.serdes.TestType;
 import org.apache.uima.cas.serdes.transitions.CasSourceTargetConfiguration;
+import org.apache.uima.resource.ResourceInitializationException;
+import org.apache.uima.util.CasLoadMode;
+import org.apache.uima.util.InvalidXMLException;
 import org.assertj.core.internal.Failures;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -43,6 +51,7 @@ public class SerRefTestScenario implements Runnable {
   private final Path referenceCasFile;
   private final Path targetCasFile;
   private final FailableBiConsumer<CAS, Path, ?> serializer;
+  private final FailableBiConsumer<Path, Path, ?> assertion;
 
   private SerRefTestScenario(Builder builder) {
     this.title = builder.title;
@@ -50,16 +59,7 @@ public class SerRefTestScenario implements Runnable {
     this.referenceCasFile = builder.referenceCasFile;
     this.targetCasFile = builder.targetCasFile;
     this.serializer = builder.serializer;
-  }
-
-  public SerRefTestScenario(Path aReferenceBasePath, Path aTargetBasePath,
-          CasSourceTargetConfiguration aSourceTargetConfiguration, String aTargetFileName,
-          FailableBiConsumer<CAS, Path, ?> aSerializer) {
-    title = aSourceTargetConfiguration.getTitle();
-    sourceCasSupplier = aSourceTargetConfiguration::createSourceCas;
-    referenceCasFile = aReferenceBasePath.resolve(title).resolve(aTargetFileName);
-    targetCasFile = aTargetBasePath.resolve(title).resolve(aTargetFileName);
-    serializer = aSerializer;
+    this.assertion = builder.assertion;
   }
 
   public CAS createSourceCas() {
@@ -102,8 +102,14 @@ public class SerRefTestScenario implements Runnable {
     assumeThat(referenceCasFile.toFile()) //
             .as("Reference file must exists at %s", referenceCasFile) //
             .exists();
-    assertThat(contentOf(targetCasFile.toFile())) //
-            .isEqualToNormalizingNewlines(contentOf(referenceCasFile.toFile()));
+
+    try {
+      assertion.accept(targetCasFile, referenceCasFile);
+    } catch (RuntimeException | Error e) {
+      throw e;
+    } catch (Throwable e) {
+      fail("Unable to apply assertion", e);
+    }
   }
 
   private void serialize(CAS aSourceCas, Path aTargetCasFile) {
@@ -121,6 +127,21 @@ public class SerRefTestScenario implements Runnable {
     return Paths.get("src", "test", "resources", aTestClass.getSimpleName(), "ser-ref");
   }
 
+  public static void assertFileContentsAreEqualNormalizingNewlines(Path aTargetCasFile,
+          Path aReferenceCasFile) {
+    assertThat(contentOf(aTargetCasFile.toFile())) //
+            .isEqualToNormalizingNewlines(contentOf(aReferenceCasFile.toFile()));
+  }
+
+  public static void assertCasContentsAreEqual(Path aTargetCasFile, Path aReferenceCasFile)
+          throws ResourceInitializationException, InvalidXMLException, IOException {
+    CAS targetCas = createCasMaybeWithTypesystem(aReferenceCasFile);
+    CAS referenceCas = createCasMaybeWithTypesystem(aReferenceCasFile);
+    des(targetCas, aTargetCasFile, CasLoadMode.DEFAULT);
+    des(referenceCas, aReferenceCasFile, CasLoadMode.DEFAULT);
+    assertThat(toComparableString(targetCas)).isEqualTo(toComparableString(referenceCas));
+  }
+
   /**
    * Creates builder to build {@link SerRefTestScenario}.
    * 
@@ -153,8 +174,11 @@ public class SerRefTestScenario implements Runnable {
     private Path referenceCasFile;
     private Path targetCasFile;
     private FailableBiConsumer<CAS, Path, ?> serializer;
+    private FailableBiConsumer<Path, Path, ?> assertion;
 
     private Builder() {
+      // Compare the serialized CAS file against the reference
+      assertion = SerRefTestScenario::assertFileContentsAreEqualNormalizingNewlines;
     }
 
     public Builder withTitle(String title) {
@@ -182,6 +206,11 @@ public class SerRefTestScenario implements Runnable {
       return this;
     }
 
+    public Builder withAssertion(FailableBiConsumer<Path, Path, ?> aAssertion) {
+      this.assertion = aAssertion;
+      return this;
+    }
+
     public SerRefTestScenario build() {
       return new SerRefTestScenario(this);
     }