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);
}