From 4ffd6e3e4c50974d02b20e40387f9e47d789a6a4 Mon Sep 17 00:00:00 2001 From: Richard Eckart de Castilho Date: Mon, 23 Jan 2023 14:48:04 +0100 Subject: [PATCH 1/5] Issue #270: Update dependencies (3.4.0) - parent-pom 16-SNAPSHOT -> 16 --- uimaj-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uimaj-parent/pom.xml b/uimaj-parent/pom.xml index 9f797a104..dba6d4d0a 100644 --- a/uimaj-parent/pom.xml +++ b/uimaj-parent/pom.xml @@ -34,7 +34,7 @@ org.apache.uima parent-pom - 16-SNAPSHOT + 16 uimaj-parent From ff19c4f3ef71534bcb328f279dbb795e437a782c Mon Sep 17 00:00:00 2001 From: Richard Eckart de Castilho Date: Mon, 23 Jan 2023 17:22:53 +0100 Subject: [PATCH 2/5] Issue #272: select on FSArray seems broken - Fix stream characteristics when using select on array or list --- .../src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java b/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java index 6c28ee621..77af8026c 100644 --- a/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java +++ b/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java @@ -1062,7 +1062,7 @@ public Spliterator spliterator() { // always set int c = Spliterator.IMMUTABLE | Spliterator.NONNULL | Spliterator.DISTINCT; - if (boundsUse == BoundsUse.notBounded && !isNonOverlapping) { + if (!isAltSource && boundsUse == BoundsUse.notBounded && !isNonOverlapping) { c |= Spliterator.SIZED | Spliterator.SUBSIZED; } From a955a0da7c10d364e36dbcbad170ba828bb05336 Mon Sep 17 00:00:00 2001 From: Richard Eckart de Castilho Date: Mon, 23 Jan 2023 17:47:18 +0100 Subject: [PATCH 3/5] Issue #292: Make CAS serialization tests more robust - run SerRef tests using a content comparison --- ...erializationDeserialization_XCAS_Test.java | 4 ++ .../uima/cas/serdes/SerDesCasIOTestUtils.java | 2 +- .../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 @@ private static List randomSerDesScenarios() { @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 static List serRefScenarios(SerialFormat aFormat, 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.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 serializer; + private final FailableBiConsumer assertion; private SerRefTestScenario(Builder builder) { this.title = builder.title; @@ -50,16 +59,7 @@ private SerRefTestScenario(Builder builder) { this.referenceCasFile = builder.referenceCasFile; this.targetCasFile = builder.targetCasFile; this.serializer = builder.serializer; - } - - public SerRefTestScenario(Path aReferenceBasePath, Path aTargetBasePath, - CasSourceTargetConfiguration aSourceTargetConfiguration, String aTargetFileName, - FailableBiConsumer 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 void run() { 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 static Path getDataBasePath(Class aTestClass) { 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 static final class Builder { private Path referenceCasFile; private Path targetCasFile; private FailableBiConsumer serializer; + private FailableBiConsumer assertion; private Builder() { + // Compare the serialized CAS file against the reference + assertion = SerRefTestScenario::assertFileContentsAreEqualNormalizingNewlines; } public Builder withTitle(String title) { @@ -182,6 +206,11 @@ public Builder withSerializer(FailableBiConsumer serializer) { return this; } + public Builder withAssertion(FailableBiConsumer aAssertion) { + this.assertion = aAssertion; + return this; + } + public SerRefTestScenario build() { return new SerRefTestScenario(this); } From 8b23e6a6c8f48cb00997c9db105d2f45c68b8c92 Mon Sep 17 00:00:00 2001 From: Richard Eckart de Castilho Date: Tue, 24 Jan 2023 08:29:03 +0100 Subject: [PATCH 4/5] No issue: Temporarily unprotect main so I can update the last commit metadata using a force push... --- .asf.yaml | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/.asf.yaml b/.asf.yaml index 6392b3bc7..349e26401 100644 --- a/.asf.yaml +++ b/.asf.yaml @@ -46,10 +46,8 @@ github: strict: true contexts: - continuous-integration/jenkins/pr-merge - main-v2: - required_status_checks: - strict: true - contexts: - - continuous-integration/jenkins/pr-merge - - \ No newline at end of file +# main-v2: +# required_status_checks: +# strict: true +# contexts: +# - continuous-integration/jenkins/pr-merge From 44ef5e6dfaf4fead29de9edce12afb35abfd1673 Mon Sep 17 00:00:00 2001 From: Richard Eckart de Castilho Date: Tue, 24 Jan 2023 12:12:09 +0100 Subject: [PATCH 5/5] No issue: Protect main again (actually main-v2) --- .asf.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.asf.yaml b/.asf.yaml index 349e26401..6bae0086a 100644 --- a/.asf.yaml +++ b/.asf.yaml @@ -46,8 +46,8 @@ github: strict: true contexts: - continuous-integration/jenkins/pr-merge -# main-v2: -# required_status_checks: -# strict: true -# contexts: -# - continuous-integration/jenkins/pr-merge + main-v2: + required_status_checks: + strict: true + contexts: + - continuous-integration/jenkins/pr-merge