This is an automated email from the ASF dual-hosted git repository. desruisseaux pushed a commit to branch geoapi-4.0 in repository https://gitbox.apache.org/repos/asf/sis.git
commit 2334c7cee4429d188e7065cd664c4913c3f30d67 Author: Martin Desruisseaux <[email protected]> AuthorDate: Sat Oct 11 11:40:22 2025 +0200 Retrofit metadata `Assertions` class into the existing classes. --- endorsed/build.gradle.kts | 1 + .../test/org/apache/sis/metadata/Assertions.java | 218 --------------------- .../apache/sis/metadata/PropertyAccessorTest.java | 2 +- .../sis/metadata/PropertyInformationTest.java | 2 +- .../test/org/apache/sis/metadata/TreeNodeTest.java | 2 +- .../sis/metadata/iso/DefaultIdentifierTest.java | 4 +- .../sis/metadata/iso/DefaultMetadataTest.java | 2 +- .../sis/metadata/iso/citation/CitationsTest.java | 14 +- .../metadata/iso/citation/DefaultCitationTest.java | 2 +- .../iso/citation/DefaultResponsibilityTest.java | 2 +- .../constraint/DefaultLegalConstraintsTest.java | 1 - .../sis/metadata/iso/content/DefaultBandTest.java | 2 +- .../sis/metadata/iso/extent/DefaultExtentTest.java | 1 - .../identification/DefaultBrowseGraphicTest.java | 1 - .../DefaultDataIdentificationTest.java | 2 +- .../DefaultRepresentativeFractionTest.java | 2 +- .../iso/identification/DefaultResolutionTest.java | 2 +- .../DefaultServiceIdentificationTest.java | 2 +- .../metadata/iso/lineage/DefaultLineageTest.java | 1 - .../sis/metadata/iso/quality/ScopeCodeTest.java | 2 +- .../apache/sis/util/iso/NameMarshallingTest.java | 2 +- .../sis/xml/CharSequenceSubstitutionTest.java | 2 +- .../apache/sis/xml/NilReasonMarshallingTest.java | 4 +- .../org/apache/sis/xml/UUIDMarshallingTest.java | 4 +- .../org/apache/sis/xml/XLinkMarshallingTest.java | 1 - .../sis/xml/bind/cat/CodeListMarshallingTest.java | 1 - .../sis/xml/bind/cat/EnumMarshallingTest.java | 1 - .../apache/sis/xml/bind/gml/TimePeriodTest.java | 1 - .../sis/xml/bind/lan/FreeTextMarshallingTest.java | 1 - .../apache/sis/xml/bind/lan/LanguageCodeTest.java | 1 - .../metadata/replace/QualityParameterTest.java | 1 - .../metadata/replace/ServiceParameterTest.java | 1 - .../apache/sis/xml/test/DocumentComparator.java | 7 +- .../test/org/apache/sis/xml/test/TestCase.java | 101 +++++++++- .../sis/xml/bind/fra/DataIdentificationTest.java | 3 +- .../sis/parameter/ParameterMarshallingTest.java | 1 - .../sis/referencing/ImmutableIdentifierTest.java | 3 +- .../referencing/crs/DefaultEngineeringCRSTest.java | 1 - .../datum/DefaultGeodeticDatumTest.java | 1 - .../datum/DefaultPrimeMeridianTest.java | 1 - .../datum/DefaultVerticalDatumTest.java | 1 - .../referencing/legacy/DefaultImageCRSTest.java | 1 - .../operation/DefaultOperationMethodTest.java | 2 +- .../operation/SingleOperationMarshallingTest.java | 1 - .../referencing/SecondDefiningParameterTest.java | 1 - .../org/apache/sis/storage/gpx/UpdaterTest.java | 2 +- .../org/apache/sis/storage/gpx/WriterTest.java | 2 +- .../aggregate/ConcatenatedFeatureSetTest.java | 4 +- .../sis/storage/base/MetadataBuilderTest.java | 4 +- .../test/org/apache/sis/test/Assertions.java | 83 ++++++-- 50 files changed, 212 insertions(+), 292 deletions(-) diff --git a/endorsed/build.gradle.kts b/endorsed/build.gradle.kts index 26becb2149..5264751da8 100644 --- a/endorsed/build.gradle.kts +++ b/endorsed/build.gradle.kts @@ -150,6 +150,7 @@ fun addExportForTests(args : MutableList<String>) { addExport(args, "org.apache.sis.metadata", "org.apache.sis.xml.test", "org.apache.sis.referencing," + + "org.apache.sis.storage.xml," + "org.apache.sis.profile.france") addExport(args, "org.apache.sis.storage", "org.apache.sis.storage.test", diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/Assertions.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/Assertions.java deleted file mode 100644 index 10bf7efe65..0000000000 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/Assertions.java +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.sis.metadata; - -import java.util.Locale; -import java.io.IOException; -import javax.xml.parsers.ParserConfigurationException; -import org.xml.sax.SAXException; -import org.opengis.util.InternationalString; -import org.opengis.metadata.citation.Citation; -import org.opengis.metadata.lineage.Source; -import org.opengis.metadata.maintenance.ScopeCode; -import org.opengis.metadata.content.FeatureCatalogueDescription; -import org.apache.sis.xml.Namespaces; -import org.apache.sis.xml.internal.shared.LegacyNamespaces; - -// Test dependencies -import static org.junit.jupiter.api.Assertions.*; -import org.apache.sis.xml.test.DocumentComparator; -import static org.apache.sis.test.Assertions.assertSingleton; - -// Specific to the geoapi-3.1 and geoapi-4.0 branches: -import org.opengis.metadata.citation.Responsibility; -import org.opengis.metadata.maintenance.Scope; -import org.opengis.metadata.content.FeatureTypeInfo; - - -/** - * Assertion methods used by the {@code org.apache.sis.metadata} module. - * - * @author Martin Desruisseaux (Geomatys) - */ -public final class Assertions { - /** - * Do not allow instantiation of this class. - */ - private Assertions() { - } - - /** - * Asserts that the English title of the given citation is equal to the expected string. - * - * @param expected the expected English title. - * @param citation the citation to test. - * @param message the message to report in case of test failure. - * - * @see #assertAnyTitleEquals(String, String, Citation) - */ - public static void assertTitleEquals(final String expected, final Citation citation, final String message) { - assertNotNull(citation, message); - final InternationalString title = citation.getTitle(); - assertNotNull(title, message); - assertEquals(expected, title.toString(Locale.US), message); - } - - /** - * Asserts that the given citation has only one responsible party, - * and its English name is equal to the expected string. - * - * @param expected the expected English responsibly party name. - * @param citation the citation to test. - * @param message the message to report in case of test failure. - */ - public static void assertPartyNameEquals(final String expected, final Citation citation, final String message) { - assertNotNull(citation, message); - final Responsibility r = assertSingleton(citation.getCitedResponsibleParties()); - final InternationalString name = assertSingleton(r.getParties()).getName(); - assertNotNull(name, message); - assertEquals(expected, name.toString(Locale.US), message); - } - - /** - * Verifies that the given {@code ContentInfo} describes the given feature. - * This method expects that the given catalog contains exactly one feature info. - * - * @param name expected feature type name (possibly null). - * @param count expected feature instance count (possibly null). - * @param catalog the content info to validate. - */ - public static void assertContentInfoEquals(final String name, final Integer count, final FeatureCatalogueDescription catalog) { - final FeatureTypeInfo info = assertSingleton(catalog.getFeatureTypeInfo()); - assertEquals(name, String.valueOf(info.getFeatureTypeName()), "metadata.contentInfo.featureType"); - assertEquals(count, info.getFeatureInstanceCount(), "metadata.contentInfo.featureInstanceCount"); - } - - /** - * Verifies that the source contains the given feature type. This method expects that the given source contains - * exactly one scope description and that the hierarchical level is {@link ScopeCode#FEATURE_TYPE}. - * - * @param name expected source identifier. - * @param features expected names of feature type. - * @param source the source to validate. - */ - public static void assertFeatureSourceEquals(final String name, final String[] features, final Source source) { - assertEquals(name, String.valueOf(source.getSourceCitation().getTitle()), "metadata.lineage.source.sourceCitation.title"); - final Scope scope = source.getScope(); - assertNotNull(scope, "metadata.lineage.source.scope"); - assertEquals(ScopeCode.FEATURE_TYPE, scope.getLevel(), "metadata.lineage.source.scope.level"); - final var actual = assertSingleton(scope.getLevelDescription()).getFeatures().toArray(CharSequence[]::new); - for (int i=0; i<actual.length; i++) { - actual[i] = actual[i].toString(); - } - assertArrayEquals(features, actual, "metadata.lineage.source.scope.levelDescription.feature"); - } - - /** - * Parses two XML trees as DOM documents, and compares the nodes. - * The inputs given to this method can be any of the following types: - * - * <ul> - * <li>{@link org.w3c.dom.Node}: used directly without further processing.</li> - * <li>{@link java.io.InputStream}: the stream is parsed as an XML document, then closed.</li> - * <li>{@link java.nio.file.Path}, {@link java.io.File}, {@link java.net.URL} or {@link java.net.URI}: - * the stream is opened, parsed as an XML document, then closed.</li> - * <li>{@link String}: The string content is parsed directly as a XML document.</li> - * </ul> - * - * The comparison will ignore comments and the optional attributes given in arguments. - * - * <h4>Ignored attributes substitution</h4> - * For convenience, this method replaces some well known prefixes in the {@code ignoredAttributes} - * array by their full namespace URLs. For example, this method replaces{@code "xsi:schemaLocation"} - * by {@code "http://www.w3.org/2001/XMLSchema-instance:schemaLocation"}. - * If such substitution is not desired, consider using {@link DocumentComparator} directly instead. - * - * <p>The current substitution map is as below (may be expanded in any future SIS version):</p> - * - * <table class="sis"> - * <caption>Predefined prefix mapping</caption> - * <tr><th>Prefix</th> <th>URL</th></tr> - * <tr><td>xmlns</td> <td>{@code "http://www.w3.org/2000/xmlns"}</td></tr> - * <tr><td>xlink</td> <td>{@value Namespaces#XLINK}</td></tr> - * <tr><td>xsi</td> <td>{@value Namespaces#XSI}</td></tr> - * <tr><td>gml</td> <td>{@value Namespaces#GML}</td></tr> - * <tr><td>gco</td> <td>{@value Namespaces#GCO}</td></tr> - * <tr><td>gmd</td> <td>{@value LegacyNamespaces#GMD}</td></tr> - * <tr><td>gmx</td> <td>{@value LegacyNamespaces#GMX}</td></tr> - * <tr><td>gmi</td> <td>{@value LegacyNamespaces#GMI}</td></tr> - * </table> - * - * <p>For example, in order to ignore the namespace, type and schema location declaration, - * the following strings can be given to the {@code ignoredAttributes} argument:</p> - * - * {@snippet : - * "xmlns:*", "xsi:schemaLocation", "xsi:type" - * } - * - * @param expected the expected XML document. - * @param actual the XML document to compare. - * @param ignoredAttributes the fully-qualified names of attributes to ignore - * (typically {@code "xmlns:*"} and {@code "xsi:schemaLocation"}). - * - * @see DocumentComparator - */ - public static void assertXmlEquals(final Object expected, final Object actual, final String... ignoredAttributes) { - assertXmlEquals(expected, actual, 0, null, ignoredAttributes); - } - - /** - * Parses two XML trees as DOM documents, and compares the nodes with the given tolerance - * threshold for numerical values. The inputs given to this method can be any of the types - * documented {@linkplain #assertXmlEquals(Object, Object, String[]) above}. This method - * will ignore comments and the optional attributes given in arguments as documented in the - * above method. - * - * @param expected the expected XML document. - * @param actual the XML document to compare. - * @param tolerance the tolerance threshold for comparison of numerical values. - * @param ignoredNodes the fully-qualified names of the nodes to ignore, or {@code null} if none. - * @param ignoredAttributes the fully-qualified names of attributes to ignore - * (typically {@code "xmlns:*"} and {@code "xsi:schemaLocation"}). - * - * @see DocumentComparator - */ - public static void assertXmlEquals(final Object expected, final Object actual, - final double tolerance, final String[] ignoredNodes, final String[] ignoredAttributes) - { - final DocumentComparator comparator; - try { - comparator = new DocumentComparator(expected, actual); - } catch (IOException | ParserConfigurationException | SAXException e) { - /* - * We don't throw directly those exceptions since failing to parse the XML file can - * be considered as part of test failures and the JUnit exception for such failures - * is AssertionError. Having no checked exception in "assert" methods allow us to - * declare the checked exceptions only for the library code being tested. - */ - throw new AssertionError(e); - } - comparator.tolerance = tolerance; - comparator.ignoreComments = true; - if (ignoredNodes != null) { - for (final String node : ignoredNodes) { - comparator.ignoredNodes.add(DocumentComparator.substitutePrefix(node)); - } - } - if (ignoredAttributes != null) { - for (final String attribute : ignoredAttributes) { - comparator.ignoredAttributes.add(DocumentComparator.substitutePrefix(attribute)); - } - } - comparator.compare(); - } -} diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/PropertyAccessorTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/PropertyAccessorTest.java index 36b9818d3f..79706b62a6 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/PropertyAccessorTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/PropertyAccessorTest.java @@ -61,7 +61,7 @@ import org.apache.sis.test.TestCase; import org.apache.sis.test.mock.GeographicCRSMock; import org.apache.sis.metadata.iso.citation.HardCodedCitations; import static org.apache.sis.test.Assertions.assertSingleton; -import static org.apache.sis.metadata.Assertions.assertTitleEquals; +import static org.apache.sis.test.Assertions.assertTitleEquals; // Specific to the geoapi-3.1 and geoapi-4.0 branches: import org.opengis.metadata.content.AttributeGroup; diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/PropertyInformationTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/PropertyInformationTest.java index baedf93ef8..f15e38773b 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/PropertyInformationTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/PropertyInformationTest.java @@ -35,7 +35,7 @@ import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.test.TestCase; import org.apache.sis.metadata.iso.citation.HardCodedCitations; import static org.apache.sis.test.Assertions.assertSerializedEquals; -import static org.apache.sis.metadata.Assertions.assertTitleEquals; +import static org.apache.sis.test.Assertions.assertTitleEquals; import static org.apache.sis.test.Assertions.assertSingleton; // Specific to the geoapi-4.0 branch: diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/TreeNodeTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/TreeNodeTest.java index c4e21e2255..e5325ecaad 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/TreeNodeTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/TreeNodeTest.java @@ -39,7 +39,7 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.test.TestCase; import static org.apache.sis.test.Assertions.assertMessageContains; -import static org.apache.sis.metadata.Assertions.assertTitleEquals; +import static org.apache.sis.test.Assertions.assertTitleEquals; // Specific to the geoapi-3.1 and geoapi-4.0 branches: import org.opengis.metadata.citation.Party; diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/DefaultIdentifierTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/DefaultIdentifierTest.java index ced023112f..c7def05bec 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/DefaultIdentifierTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/DefaultIdentifierTest.java @@ -24,8 +24,7 @@ import org.apache.sis.xml.Namespaces; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.xml.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertTitleEquals; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; +import static org.apache.sis.test.Assertions.assertTitleEquals; /** @@ -34,6 +33,7 @@ import static org.apache.sis.metadata.Assertions.assertXmlEquals; * @author Martin Desruisseaux * @author Cullen Rombach (Image Matters) */ +@SuppressWarnings("exports") public final class DefaultIdentifierTest extends TestCase { /** * The expected XML representation for this test. diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/DefaultMetadataTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/DefaultMetadataTest.java index a0f5bc0529..73cc17f5fd 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/DefaultMetadataTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/DefaultMetadataTest.java @@ -39,7 +39,7 @@ import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.xml.test.TestCase; import static org.apache.sis.test.Assertions.assertSingleton; import static org.apache.sis.test.Assertions.assertSingletonCitation; -import static org.apache.sis.metadata.Assertions.assertTitleEquals; +import static org.apache.sis.test.Assertions.assertTitleEquals; // Specific to the geoapi-3.1 and geoapi-4.0 branches: import org.opengis.metadata.MetadataScope; diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/citation/CitationsTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/citation/CitationsTest.java index aff365f78e..9979383b20 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/citation/CitationsTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/citation/CitationsTest.java @@ -36,8 +36,8 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import static org.apache.sis.test.Assertions.assertSerializedEquals; import static org.apache.sis.test.Assertions.assertSingleton; -import static org.apache.sis.test.Assertions.assertSingletonResponsibleParty; -import static org.apache.sis.metadata.Assertions.assertTitleEquals; +import static org.apache.sis.test.Assertions.assertPartyNameEquals; +import static org.apache.sis.test.Assertions.assertTitleEquals; import org.apache.sis.test.TestCase; @@ -221,11 +221,11 @@ public final class CitationsTest extends TestCase { */ @Test public void testGetCitedResponsibleParty() { - assertEquals("Open Geospatial Consortium", assertSingletonResponsibleParty(OGC)); - assertEquals("International Organization for Standardization", assertSingletonResponsibleParty(ISO_19115.get(0))); - assertEquals("International Organization for Standardization", assertSingletonResponsibleParty(ISO_19115.get(1))); - assertEquals("International Association of Oil & Gas producers", assertSingletonResponsibleParty(EPSG)); - assertEquals("International Association of Oil & Gas producers", assertSingletonResponsibleParty(IOGP)); + assertPartyNameEquals("Open Geospatial Consortium", OGC, "OGC"); + assertPartyNameEquals("International Organization for Standardization", ISO_19115.get(0), "ISO_19115"); + assertPartyNameEquals("International Organization for Standardization", ISO_19115.get(1), "ISO_19115"); + assertPartyNameEquals("International Association of Oil & Gas producers", EPSG, "EPSG"); + assertPartyNameEquals("International Association of Oil & Gas producers", IOGP, "IOGP"); } /** diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/citation/DefaultCitationTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/citation/DefaultCitationTest.java index bba443f069..6967504187 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/citation/DefaultCitationTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/citation/DefaultCitationTest.java @@ -50,7 +50,7 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.metadata.xml.TestUsingFile; import static org.apache.sis.test.Assertions.assertSingleton; -import static org.apache.sis.metadata.Assertions.assertTitleEquals; +import static org.apache.sis.test.Assertions.assertTitleEquals; // Specific to the geoapi-3.1 and geoapi-4.0 branches: import org.opengis.metadata.citation.CitationDate; diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/citation/DefaultResponsibilityTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/citation/DefaultResponsibilityTest.java index eecaa90ba9..e9c091f459 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/citation/DefaultResponsibilityTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/citation/DefaultResponsibilityTest.java @@ -24,7 +24,6 @@ import org.apache.sis.xml.internal.shared.LegacyNamespaces; // Test dependencies import org.junit.jupiter.api.Test; import org.apache.sis.xml.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; /** @@ -33,6 +32,7 @@ import static org.apache.sis.metadata.Assertions.assertXmlEquals; * @author Martin Desruisseaux (Geomatys) * @author Cullen Rombach (Image Matters) */ +@SuppressWarnings("exports") public final class DefaultResponsibilityTest extends TestCase { /** * Creates a new test case. diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/constraint/DefaultLegalConstraintsTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/constraint/DefaultLegalConstraintsTest.java index f65261dcd9..ea05b7d9af 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/constraint/DefaultLegalConstraintsTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/constraint/DefaultLegalConstraintsTest.java @@ -27,7 +27,6 @@ import static org.apache.sis.metadata.internal.shared.ImplementationHelper.ISO_N import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.xml.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; import static org.apache.sis.test.Assertions.assertSingleton; diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/content/DefaultBandTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/content/DefaultBandTest.java index fd1540afab..acfd833178 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/content/DefaultBandTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/content/DefaultBandTest.java @@ -24,7 +24,6 @@ import static org.apache.sis.metadata.internal.shared.ImplementationHelper.ISO_N import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.xml.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; // Specific to the geoapi-4.0 branch: import org.opengis.metadata.content.PolarisationOrientation; @@ -35,6 +34,7 @@ import org.opengis.metadata.content.PolarisationOrientation; * * @author Martin Desruisseaux (Geomatys) */ +@SuppressWarnings("exports") public final class DefaultBandTest extends TestCase { /** * The XML fragment used for testing. diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/extent/DefaultExtentTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/extent/DefaultExtentTest.java index 94107db458..75f666eb38 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/extent/DefaultExtentTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/extent/DefaultExtentTest.java @@ -31,7 +31,6 @@ import org.apache.sis.xml.NilObject; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.metadata.xml.TestUsingFile; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; import static org.apache.sis.test.Assertions.assertEqualsIgnoreMetadata; diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/identification/DefaultBrowseGraphicTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/identification/DefaultBrowseGraphicTest.java index 585452e57c..66cd980707 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/identification/DefaultBrowseGraphicTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/identification/DefaultBrowseGraphicTest.java @@ -35,7 +35,6 @@ import org.apache.sis.xml.XML; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.xml.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; /** diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/identification/DefaultDataIdentificationTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/identification/DefaultDataIdentificationTest.java index 5278d26984..bf8c9e8ce6 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/identification/DefaultDataIdentificationTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/identification/DefaultDataIdentificationTest.java @@ -38,7 +38,7 @@ import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.test.TestCase; import org.apache.sis.test.TestUtilities; import static org.apache.sis.test.Assertions.assertMultilinesEquals; -import static org.apache.sis.metadata.Assertions.assertTitleEquals; +import static org.apache.sis.test.Assertions.assertTitleEquals; /** diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/identification/DefaultRepresentativeFractionTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/identification/DefaultRepresentativeFractionTest.java index 56b7f655dd..7f3174a314 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/identification/DefaultRepresentativeFractionTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/identification/DefaultRepresentativeFractionTest.java @@ -26,7 +26,6 @@ import org.apache.sis.util.Version; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.xml.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; /** @@ -35,6 +34,7 @@ import static org.apache.sis.metadata.Assertions.assertXmlEquals; * @author Martin Desruisseaux (Geomatys) * @author Cullen Rombach (Image Matters) */ +@SuppressWarnings("exports") public final class DefaultRepresentativeFractionTest extends TestCase { /** * {@code false} if testing ISO 19115-3 document, or {@code true} if testing ISO 19139:2007 document. diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/identification/DefaultResolutionTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/identification/DefaultResolutionTest.java index b316afe9fa..2808f35a40 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/identification/DefaultResolutionTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/identification/DefaultResolutionTest.java @@ -27,7 +27,6 @@ import static org.apache.sis.xml.bind.gml.MeasureTest.UOM_URL; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.xml.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; /** @@ -36,6 +35,7 @@ import static org.apache.sis.metadata.Assertions.assertXmlEquals; * @author Martin Desruisseaux (Geomatys) * @author Cullen Rombach (Image Matters) */ +@SuppressWarnings("exports") public final class DefaultResolutionTest extends TestCase.WithLogs { /** * Creates a new test case. diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/identification/DefaultServiceIdentificationTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/identification/DefaultServiceIdentificationTest.java index 229c28c168..68bb57d992 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/identification/DefaultServiceIdentificationTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/identification/DefaultServiceIdentificationTest.java @@ -29,7 +29,7 @@ import org.apache.sis.xml.NilReason; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.metadata.xml.TestUsingFile; -import static org.apache.sis.metadata.Assertions.assertTitleEquals; +import static org.apache.sis.test.Assertions.assertTitleEquals; import static org.apache.sis.test.Assertions.assertSingleton; // Specific to the geoapi-3.1 and geoapi-4.0 branches: diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/lineage/DefaultLineageTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/lineage/DefaultLineageTest.java index 452b6d3a0f..97ddef7435 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/lineage/DefaultLineageTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/lineage/DefaultLineageTest.java @@ -28,7 +28,6 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import static org.apache.sis.test.Assertions.assertSingleton; import org.apache.sis.xml.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; /** diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/quality/ScopeCodeTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/quality/ScopeCodeTest.java index 0ce6406361..7126c254f7 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/quality/ScopeCodeTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/iso/quality/ScopeCodeTest.java @@ -23,7 +23,6 @@ import org.opengis.metadata.maintenance.ScopeCode; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.xml.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; // Specific to the geoapi-3.1 and geoapi-4.0 branches: import org.opengis.metadata.maintenance.Scope; @@ -37,6 +36,7 @@ import org.opengis.metadata.maintenance.Scope; * * @see <a href="https://issues.apache.org/jira/browse/SIS-508">SIS-508 on issue tracker</a> */ +@SuppressWarnings("exports") public final class ScopeCodeTest extends TestCase { /** * The XML fragment used for testing. diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/util/iso/NameMarshallingTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/util/iso/NameMarshallingTest.java index 9d9dad85db..58a9ff06e4 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/util/iso/NameMarshallingTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/util/iso/NameMarshallingTest.java @@ -37,7 +37,6 @@ import org.junit.jupiter.api.TestInstance; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.test.mock.IdentifiedObjectMock; import org.apache.sis.xml.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; /** @@ -46,6 +45,7 @@ import static org.apache.sis.metadata.Assertions.assertXmlEquals; * @author Martin Desruisseaux (Geomatys) * @author Cullen Rombach (Image Matters) */ +@SuppressWarnings("exports") @TestInstance(TestInstance.Lifecycle.PER_CLASS) public final class NameMarshallingTest extends TestCase { /** diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/CharSequenceSubstitutionTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/CharSequenceSubstitutionTest.java index 58e4dbf966..031f5b96ce 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/CharSequenceSubstitutionTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/CharSequenceSubstitutionTest.java @@ -31,7 +31,6 @@ import static org.apache.sis.metadata.internal.shared.ImplementationHelper.ISO_N import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.xml.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; // Specific to the geoapi-3.1 and geoapi-4.0 branches: import org.opengis.metadata.Identifier; @@ -43,6 +42,7 @@ import org.opengis.metadata.Identifier; * @author Martin Desruisseaux (Geomatys) * @author Cullen Rombach (Image Matters) */ +@SuppressWarnings("exports") public final class CharSequenceSubstitutionTest extends TestCase { /** * Creates a new test case. diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/NilReasonMarshallingTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/NilReasonMarshallingTest.java index 563fd55e04..7b952b17c9 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/NilReasonMarshallingTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/NilReasonMarshallingTest.java @@ -25,8 +25,7 @@ import org.opengis.metadata.citation.Citation; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.xml.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertTitleEquals; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; +import static org.apache.sis.test.Assertions.assertTitleEquals; /** @@ -34,6 +33,7 @@ import static org.apache.sis.metadata.Assertions.assertXmlEquals; * * @author Martin Desruisseaux (Geomatys) */ +@SuppressWarnings("exports") public final class NilReasonMarshallingTest extends TestCase { /** * Creates a new test case. diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/UUIDMarshallingTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/UUIDMarshallingTest.java index 02f71e38e8..aacc6b8413 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/UUIDMarshallingTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/UUIDMarshallingTest.java @@ -25,8 +25,7 @@ import org.opengis.metadata.citation.Citation; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.xml.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertTitleEquals; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; +import static org.apache.sis.test.Assertions.assertTitleEquals; /** @@ -34,6 +33,7 @@ import static org.apache.sis.metadata.Assertions.assertXmlEquals; * * @author Martin Desruisseaux (Geomatys) */ +@SuppressWarnings("exports") public final class UUIDMarshallingTest extends TestCase { /** * A random UUID for the tests in this class. diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/XLinkMarshallingTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/XLinkMarshallingTest.java index 118a710c0a..7506544718 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/XLinkMarshallingTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/XLinkMarshallingTest.java @@ -29,7 +29,6 @@ import org.apache.sis.util.ComparisonMode; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.xml.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; import static org.apache.sis.test.Assertions.assertSingleton; diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/cat/CodeListMarshallingTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/cat/CodeListMarshallingTest.java index 77f45a4774..d02197bdeb 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/cat/CodeListMarshallingTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/cat/CodeListMarshallingTest.java @@ -35,7 +35,6 @@ import org.apache.sis.xml.internal.shared.LegacyNamespaces; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.xml.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; // Specific to the geoapi-3.1 and geoapi-4.0 branches: import org.opengis.metadata.citation.Responsibility; diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/cat/EnumMarshallingTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/cat/EnumMarshallingTest.java index 456988d2e4..bfaf7a9932 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/cat/EnumMarshallingTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/cat/EnumMarshallingTest.java @@ -28,7 +28,6 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.xml.test.TestCase; import static org.apache.sis.test.Assertions.assertSetEquals; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; // Specific to the geoapi-4.0 branch: import java.util.EnumSet; diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/gml/TimePeriodTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/gml/TimePeriodTest.java index 6039a06282..1f96de60cf 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/gml/TimePeriodTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/gml/TimePeriodTest.java @@ -37,7 +37,6 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.xml.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; /** diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/lan/FreeTextMarshallingTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/lan/FreeTextMarshallingTest.java index 88c4aabd40..218d6230e2 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/lan/FreeTextMarshallingTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/lan/FreeTextMarshallingTest.java @@ -27,7 +27,6 @@ import org.apache.sis.xml.internal.shared.LegacyNamespaces; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.xml.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; /** diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/lan/LanguageCodeTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/lan/LanguageCodeTest.java index 7dab7b7ba6..2c55c17a55 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/lan/LanguageCodeTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/lan/LanguageCodeTest.java @@ -35,7 +35,6 @@ import org.junit.jupiter.api.TestInstance; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.test.mock.MetadataMock; import org.apache.sis.xml.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; // Specific to the geoapi-3.1 and geoapi-4.0 branches: import static org.apache.sis.test.Assertions.assertSingleton; diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/metadata/replace/QualityParameterTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/metadata/replace/QualityParameterTest.java index 6ea99d0656..4568f09813 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/metadata/replace/QualityParameterTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/metadata/replace/QualityParameterTest.java @@ -26,7 +26,6 @@ import org.apache.sis.xml.Namespaces; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.xml.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; // Specific to the geoapi-3.1 and geoapi-4.0 branches: import org.opengis.metadata.Identifier; diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/metadata/replace/ServiceParameterTest.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/metadata/replace/ServiceParameterTest.java index 4d67ae3516..5b98ab6667 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/metadata/replace/ServiceParameterTest.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/bind/metadata/replace/ServiceParameterTest.java @@ -25,7 +25,6 @@ import org.apache.sis.util.iso.Names; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.xml.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; // Specific to the geoapi-3.1 and geoapi-4.0 branches: import org.opengis.metadata.Identifier; diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/test/DocumentComparator.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/test/DocumentComparator.java index 33f828e359..c05a9c466e 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/test/DocumentComparator.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/test/DocumentComparator.java @@ -74,13 +74,12 @@ import static org.junit.jupiter.api.Assertions.*; * @author Martin Desruisseaux (Geomatys) * @author Guilhem Legal (Geomatys) * - * @see TestCase - * @see org.apache.sis.test.MetadataAssert#assertXmlEquals(Object, Object, String[]) + * @see TestCase#assertXmlEquals(Object, Object, String[]) */ public class DocumentComparator { /** * Commonly used prefixes for namespaces. Used as shorthands for calls to - * {@link org.apache.sis.test.MetadataAssert#assertXmlEquals(Object, Object, String[])}. + * {@link TestCase#assertXmlEquals(Object, Object, String[])}. * * @see #substitutePrefix(String) */ @@ -152,7 +151,7 @@ public class DocumentComparator { * "http://www.w3.org/2001/XMLSchema-instance:schemaLocation", * "http://www.w3.org/2001/XMLSchema-instance:type"</pre> * - * Note that for convenience, the {@link org.apache.sis.test.MetadataAssert#assertXmlEquals(Object, Object, String[])} + * Note that for convenience, the {@link TestCase#assertXmlEquals(Object, Object, String[])} * method automatically replaces some widely used prefixes by their full URL. */ public final Set<String> ignoredAttributes; diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/test/TestCase.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/test/TestCase.java index 567e18913f..25da015416 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/test/TestCase.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/test/TestCase.java @@ -25,6 +25,8 @@ import java.io.InputStream; import java.io.StringReader; import java.io.StringWriter; import java.io.IOException; +import javax.xml.parsers.ParserConfigurationException; +import org.xml.sax.SAXException; import jakarta.xml.bind.Marshaller; import jakarta.xml.bind.Unmarshaller; import jakarta.xml.bind.JAXBException; @@ -44,7 +46,6 @@ import org.junit.jupiter.api.parallel.Execution; import org.junit.jupiter.api.parallel.ExecutionMode; import org.junit.jupiter.api.parallel.ResourceAccessMode; import org.junit.jupiter.api.parallel.ResourceLock; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; import org.apache.sis.test.LoggingWatcher; @@ -203,6 +204,104 @@ public abstract class TestCase extends org.apache.sis.test.TestCase { } } + /** + * Parses two <abbr>XML</abbr> trees as <abbr>DOM</abbr> documents and compares the nodes. + * The inputs given to this method can be any of the following types: + * + * <ul> + * <li>{@link org.w3c.dom.Node}: used directly without further processing.</li> + * <li>{@link java.io.InputStream}: the stream is parsed as an XML document, then closed.</li> + * <li>{@link java.nio.file.Path}, {@link java.io.File}, {@link java.net.URL} or {@link java.net.URI}: + * the stream is opened, parsed as an XML document, then closed.</li> + * <li>{@link String}: The string content is parsed directly as a XML document.</li> + * </ul> + * + * The comparison will ignore comments and the optional attributes given in arguments. + * + * <h4>Ignored attributes substitution</h4> + * For convenience, this method replaces some well known prefixes in the {@code ignoredAttributes} + * array by their full namespace URLs. For example, this method replaces{@code "xsi:schemaLocation"} + * by {@code "http://www.w3.org/2001/XMLSchema-instance:schemaLocation"}. + * If such substitution is not desired, consider using {@link DocumentComparator} directly instead. + * + * <p>The current substitution map is as below (may be expanded in any future SIS version):</p> + * + * <table class="sis"> + * <caption>Predefined prefix mapping</caption> + * <tr><th>Prefix</th> <th>URL</th></tr> + * <tr><td>xmlns</td> <td>{@code "http://www.w3.org/2000/xmlns"}</td></tr> + * <tr><td>xlink</td> <td>{@value Namespaces#XLINK}</td></tr> + * <tr><td>xsi</td> <td>{@value Namespaces#XSI}</td></tr> + * <tr><td>gml</td> <td>{@value Namespaces#GML}</td></tr> + * <tr><td>gco</td> <td>{@value Namespaces#GCO}</td></tr> + * <tr><td>gmd</td> <td>{@value LegacyNamespaces#GMD}</td></tr> + * <tr><td>gmx</td> <td>{@value LegacyNamespaces#GMX}</td></tr> + * <tr><td>gmi</td> <td>{@value LegacyNamespaces#GMI}</td></tr> + * </table> + * + * <p>For example, in order to ignore the namespace, type and schema location declaration, + * the following strings can be given to the {@code ignoredAttributes} argument:</p> + * + * {@snippet : + * "xmlns:*", "xsi:schemaLocation", "xsi:type" + * } + * + * @param expected the expected XML document. + * @param actual the XML document to compare. + * @param ignoredAttributes the fully-qualified names of attributes to ignore + * (typically {@code "xmlns:*"} and {@code "xsi:schemaLocation"}). + * + * @see DocumentComparator + */ + public static void assertXmlEquals(final Object expected, final Object actual, final String... ignoredAttributes) { + assertXmlEquals(expected, actual, 0, null, ignoredAttributes); + } + + /** + * Parses two <abbr>XML</abbr> trees as <abbr>DOM</abbr> documents, and compares the nodes with the + * given tolerance threshold for numerical values. The inputs given to this method can be any of the + * types documented {@linkplain #assertXmlEquals(Object, Object, String[]) above}. This method will + * ignore comments and the optional attributes given in arguments as documented in the above method. + * + * @param expected the expected XML document. + * @param actual the XML document to compare. + * @param tolerance the tolerance threshold for comparison of numerical values. + * @param ignoredNodes the fully-qualified names of the nodes to ignore, or {@code null} if none. + * @param ignoredAttributes the fully-qualified names of attributes to ignore + * (typically {@code "xmlns:*"} and {@code "xsi:schemaLocation"}). + * + * @see DocumentComparator + */ + public static void assertXmlEquals(final Object expected, final Object actual, + final double tolerance, final String[] ignoredNodes, final String[] ignoredAttributes) + { + final DocumentComparator comparator; + try { + comparator = new DocumentComparator(expected, actual); + } catch (IOException | ParserConfigurationException | SAXException e) { + /* + * We don't throw directly those exceptions since failing to parse the XML file can + * be considered as part of test failures and the JUnit exception for such failures + * is AssertionError. Having no checked exception in "assert" methods allow us to + * declare the checked exceptions only for the library code being tested. + */ + throw new AssertionError(e); + } + comparator.tolerance = tolerance; + comparator.ignoreComments = true; + if (ignoredNodes != null) { + for (final String node : ignoredNodes) { + comparator.ignoredNodes.add(DocumentComparator.substitutePrefix(node)); + } + } + if (ignoredAttributes != null) { + for (final String attribute : ignoredAttributes) { + comparator.ignoredAttributes.add(DocumentComparator.substitutePrefix(attribute)); + } + } + comparator.compare(); + } + /** * Marshals the given object and ensures that the result is equal to the given string. * This convenience method uses a default set of attributes to ignore. diff --git a/endorsed/src/org.apache.sis.profile.france/test/org/apache/sis/xml/bind/fra/DataIdentificationTest.java b/endorsed/src/org.apache.sis.profile.france/test/org/apache/sis/xml/bind/fra/DataIdentificationTest.java index 8adb2be696..f69635221e 100644 --- a/endorsed/src/org.apache.sis.profile.france/test/org/apache/sis/xml/bind/fra/DataIdentificationTest.java +++ b/endorsed/src/org.apache.sis.profile.france/test/org/apache/sis/xml/bind/fra/DataIdentificationTest.java @@ -21,8 +21,7 @@ import jakarta.xml.bind.JAXBException; // Test dependencies import org.junit.jupiter.api.Test; import org.apache.sis.xml.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertTitleEquals; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; +import static org.apache.sis.test.Assertions.assertTitleEquals; import static org.apache.sis.test.Assertions.assertSingleton; diff --git a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/parameter/ParameterMarshallingTest.java b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/parameter/ParameterMarshallingTest.java index 2a67072385..38d0361fd9 100644 --- a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/parameter/ParameterMarshallingTest.java +++ b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/parameter/ParameterMarshallingTest.java @@ -41,7 +41,6 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.opengis.test.Validators; import org.apache.sis.xml.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; import static org.apache.sis.referencing.Assertions.assertAliasTipEquals; import static org.apache.sis.referencing.Assertions.assertEpsgNameAndIdentifierEqual; diff --git a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/ImmutableIdentifierTest.java b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/ImmutableIdentifierTest.java index 0b0365681c..032c4bc63e 100644 --- a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/ImmutableIdentifierTest.java +++ b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/ImmutableIdentifierTest.java @@ -36,8 +36,7 @@ import static org.junit.jupiter.api.Assertions.*; import org.opengis.test.Validators; import org.apache.sis.xml.test.TestCase; import static org.apache.sis.test.Assertions.assertMessageContains; -import static org.apache.sis.metadata.Assertions.assertTitleEquals; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; +import static org.apache.sis.test.Assertions.assertTitleEquals; import static org.apache.sis.referencing.Assertions.assertWktEquals; // Specific to the geoapi-3.1 and geoapi-4.0 branches: diff --git a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/crs/DefaultEngineeringCRSTest.java b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/crs/DefaultEngineeringCRSTest.java index 9b78f8428e..ed6627d0e3 100644 --- a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/crs/DefaultEngineeringCRSTest.java +++ b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/crs/DefaultEngineeringCRSTest.java @@ -31,7 +31,6 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.xml.test.TestCase; import org.apache.sis.referencing.cs.HardCodedCS; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; import static org.apache.sis.referencing.Assertions.assertWktEquals; // Specific to the geoapi-3.1 and geoapi-4.0 branches: diff --git a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/datum/DefaultGeodeticDatumTest.java b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/datum/DefaultGeodeticDatumTest.java index cc420d4e67..e96a3b4029 100644 --- a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/datum/DefaultGeodeticDatumTest.java +++ b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/datum/DefaultGeodeticDatumTest.java @@ -44,7 +44,6 @@ import org.apache.sis.xml.test.TestCase; import static org.apache.sis.test.Assertions.assertSingleton; import static org.apache.sis.test.Assertions.assertSingletonScope; import static org.apache.sis.test.Assertions.assertSerializedEquals; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; import static org.apache.sis.referencing.Assertions.assertWktEquals; import static org.apache.sis.referencing.Assertions.assertRemarksEquals; diff --git a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/datum/DefaultPrimeMeridianTest.java b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/datum/DefaultPrimeMeridianTest.java index 6268fb7638..7bd590c500 100644 --- a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/datum/DefaultPrimeMeridianTest.java +++ b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/datum/DefaultPrimeMeridianTest.java @@ -35,7 +35,6 @@ import static org.apache.sis.referencing.GeodeticObjectVerifier.*; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.xml.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; import static org.apache.sis.referencing.Assertions.assertWktEquals; import static org.apache.sis.referencing.Assertions.assertRemarksEquals; diff --git a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/datum/DefaultVerticalDatumTest.java b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/datum/DefaultVerticalDatumTest.java index de6648d87c..1cf777e918 100644 --- a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/datum/DefaultVerticalDatumTest.java +++ b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/datum/DefaultVerticalDatumTest.java @@ -34,7 +34,6 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.xml.test.TestCase; import static org.apache.sis.test.Assertions.assertSingletonScope; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; import static org.apache.sis.referencing.Assertions.assertWktEquals; import static org.apache.sis.referencing.Assertions.assertRemarksEquals; diff --git a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/legacy/DefaultImageCRSTest.java b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/legacy/DefaultImageCRSTest.java index 9b25e5ec04..6f68d1667e 100644 --- a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/legacy/DefaultImageCRSTest.java +++ b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/legacy/DefaultImageCRSTest.java @@ -32,7 +32,6 @@ import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.xml.test.TestCase; import org.apache.sis.referencing.cs.HardCodedCS; import org.apache.sis.referencing.cs.HardCodedAxes; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; import static org.apache.sis.referencing.Assertions.assertWktEquals; // Specific to the geoapi-3.1 and geoapi-4.0 branches: diff --git a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/operation/DefaultOperationMethodTest.java b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/operation/DefaultOperationMethodTest.java index 94c6e9d1ac..790aee1284 100644 --- a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/operation/DefaultOperationMethodTest.java +++ b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/operation/DefaultOperationMethodTest.java @@ -33,7 +33,7 @@ import org.apache.sis.parameter.DefaultParameterDescriptorGroup; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertTitleEquals; +import static org.apache.sis.test.Assertions.assertTitleEquals; import static org.apache.sis.referencing.Assertions.assertEpsgNameAndIdentifierEqual; import static org.apache.sis.referencing.Assertions.assertWktEquals; diff --git a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/operation/SingleOperationMarshallingTest.java b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/operation/SingleOperationMarshallingTest.java index 2242b61215..2d3815d2c8 100644 --- a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/operation/SingleOperationMarshallingTest.java +++ b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/operation/SingleOperationMarshallingTest.java @@ -49,7 +49,6 @@ import static org.apache.sis.test.Assertions.assertSingleton; import static org.apache.sis.test.Assertions.assertSingletonAuthorityCode; import static org.apache.sis.test.Assertions.assertSingletonScope; import static org.apache.sis.test.Assertions.assertSingletonDomainOfValidity; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; import static org.apache.sis.referencing.Assertions.assertMatrixEquals; // Specific to the geoapi-3.1 and geoapi-4.0 branches: diff --git a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/xml/bind/referencing/SecondDefiningParameterTest.java b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/xml/bind/referencing/SecondDefiningParameterTest.java index 153a01f3ae..a68e4cd78d 100644 --- a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/xml/bind/referencing/SecondDefiningParameterTest.java +++ b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/xml/bind/referencing/SecondDefiningParameterTest.java @@ -25,7 +25,6 @@ import org.apache.sis.referencing.datum.DefaultEllipsoid; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.xml.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; /** diff --git a/endorsed/src/org.apache.sis.storage.xml/test/org/apache/sis/storage/gpx/UpdaterTest.java b/endorsed/src/org.apache.sis.storage.xml/test/org/apache/sis/storage/gpx/UpdaterTest.java index 02ee8f6968..427187e7db 100644 --- a/endorsed/src/org.apache.sis.storage.xml/test/org/apache/sis/storage/gpx/UpdaterTest.java +++ b/endorsed/src/org.apache.sis.storage.xml/test/org/apache/sis/storage/gpx/UpdaterTest.java @@ -36,7 +36,7 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; +import static org.apache.sis.xml.test.TestCase.assertXmlEquals; // Specific to the geoapi-3.1 and geoapi-4.0 branches: import org.opengis.feature.Feature; diff --git a/endorsed/src/org.apache.sis.storage.xml/test/org/apache/sis/storage/gpx/WriterTest.java b/endorsed/src/org.apache.sis.storage.xml/test/org/apache/sis/storage/gpx/WriterTest.java index fd82afd4a7..1b213ad6e3 100644 --- a/endorsed/src/org.apache.sis.storage.xml/test/org/apache/sis/storage/gpx/WriterTest.java +++ b/endorsed/src/org.apache.sis.storage.xml/test/org/apache/sis/storage/gpx/WriterTest.java @@ -34,7 +34,7 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.test.TestUtilities; import org.apache.sis.test.TestCase; -import static org.apache.sis.metadata.Assertions.assertXmlEquals; +import static org.apache.sis.xml.test.TestCase.assertXmlEquals; // Specific to the geoapi-3.1 and geoapi-4.0 branches: import org.opengis.feature.Feature; diff --git a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/storage/aggregate/ConcatenatedFeatureSetTest.java b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/storage/aggregate/ConcatenatedFeatureSetTest.java index 18ba8edffc..cd509bf382 100644 --- a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/storage/aggregate/ConcatenatedFeatureSetTest.java +++ b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/storage/aggregate/ConcatenatedFeatureSetTest.java @@ -31,8 +31,8 @@ import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.test.TestCase; import static org.apache.sis.test.Assertions.assertSingleton; import static org.apache.sis.test.Assertions.assertSingletonFeature; -import static org.apache.sis.metadata.Assertions.assertContentInfoEquals; -import static org.apache.sis.metadata.Assertions.assertFeatureSourceEquals; +import static org.apache.sis.test.Assertions.assertContentInfoEquals; +import static org.apache.sis.test.Assertions.assertFeatureSourceEquals; // Specific to the geoapi-3.1 and geoapi-4.0 branches: import org.opengis.feature.Feature; diff --git a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/storage/base/MetadataBuilderTest.java b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/storage/base/MetadataBuilderTest.java index 7d8777bbc3..f80fc6a943 100644 --- a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/storage/base/MetadataBuilderTest.java +++ b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/storage/base/MetadataBuilderTest.java @@ -29,9 +29,9 @@ import org.apache.sis.feature.DefaultFeatureType; // Test dependencies import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; -import static org.apache.sis.metadata.Assertions.assertTitleEquals; -import static org.apache.sis.metadata.Assertions.assertPartyNameEquals; import static org.apache.sis.test.Assertions.assertSingleton; +import static org.apache.sis.test.Assertions.assertTitleEquals; +import static org.apache.sis.test.Assertions.assertPartyNameEquals; import org.apache.sis.test.TestCase; // Specific to the geoapi-3.1 and geoapi-4.0 branches: diff --git a/endorsed/src/org.apache.sis.util/test/org/apache/sis/test/Assertions.java b/endorsed/src/org.apache.sis.util/test/org/apache/sis/test/Assertions.java index 0a529c16b7..c564037de9 100644 --- a/endorsed/src/org.apache.sis.util/test/org/apache/sis/test/Assertions.java +++ b/endorsed/src/org.apache.sis.util/test/org/apache/sis/test/Assertions.java @@ -40,6 +40,8 @@ import org.opengis.metadata.extent.GeographicBoundingBox; import org.opengis.metadata.identification.Identification; import org.opengis.metadata.content.FeatureCatalogueDescription; import org.opengis.metadata.citation.Citation; +import org.opengis.metadata.maintenance.Scope; +import org.opengis.metadata.maintenance.ScopeCode; import org.opengis.referencing.IdentifiedObject; import org.opengis.util.InternationalString; import org.apache.sis.util.Utilities; @@ -51,6 +53,11 @@ import org.apache.sis.util.Classes; import static org.junit.jupiter.api.Assertions.*; import org.opengis.referencing.ObjectDomain; +// Specific to the geoapi-3.1 and geoapi-4.0 branches: +import org.opengis.metadata.citation.Responsibility; +import org.opengis.metadata.content.FeatureTypeInfo; +import org.opengis.metadata.lineage.Source; + /** * Assertion methods used by the <abbr>SIS</abbr> project in addition of the JUnit and GeoAPI assertions. @@ -183,16 +190,6 @@ public final class Assertions { return assertSingleton(identification.getResourceFormats()).getFormatSpecificationCitation().getTitle().toString(); } - /** - * Asserts that the given citation declares exactly one responsible party, and returns its name in English. - * - * @param citation the citation from which to get the responsible party. - * @return name of the responsible party in English. - */ - public static String assertSingletonResponsibleParty(final Citation citation) { - return assertSingleton(assertSingleton(citation.getCitedResponsibleParties()).getParties()).getName().toString(Locale.US); - } - /** * Asserts that the given object contains exactly one identifier, then returns the code of that identifier. * @@ -212,7 +209,7 @@ public final class Assertions { public static String assertSingletonScope(final IdentifiedObject object) { InternationalString scope = assertSingleton(object.getDomains()).getScope(); assertNotNull(scope, "Missing scope."); - return scope.toString(Locale.ENGLISH); + return scope.toString(Locale.US); } /** @@ -227,6 +224,70 @@ public final class Assertions { return assertInstanceOf(GeographicBoundingBox.class, extent); } + /** + * Asserts that the English title of the given citation is equal to the expected string. + * + * @param expected the expected English title. + * @param citation the citation to test. + * @param message the message to report in case of test failure. + */ + public static void assertTitleEquals(final String expected, final Citation citation, final String message) { + assertNotNull(citation, message); + InternationalString title = citation.getTitle(); + assertNotNull(title, message); + assertEquals(expected, title.toString(Locale.US), message); + } + + /** + * Asserts that the given citation has only one responsible party, + * and its English name is equal to the expected string. + * + * @param expected the expected English responsibly party name. + * @param citation the citation to test. + * @param message the message to report in case of test failure. + */ + public static void assertPartyNameEquals(final String expected, final Citation citation, final String message) { + assertNotNull(citation, message); + Responsibility r = assertSingleton(citation.getCitedResponsibleParties()); + InternationalString name = assertSingleton(r.getParties()).getName(); + assertNotNull(name, message); + assertEquals(expected, name.toString(Locale.US), message); + } + + /** + * Verifies that the given {@code ContentInfo} describes the given feature. + * This method expects that the given catalog contains exactly one feature info. + * + * @param name expected feature type name (possibly null). + * @param count expected feature instance count (possibly null). + * @param catalog the content info to validate. + */ + public static void assertContentInfoEquals(final String name, final Integer count, final FeatureCatalogueDescription catalog) { + final FeatureTypeInfo info = assertSingleton(catalog.getFeatureTypeInfo()); + assertEquals(name, String.valueOf(info.getFeatureTypeName()), "metadata.contentInfo.featureType"); + assertEquals(count, info.getFeatureInstanceCount(), "metadata.contentInfo.featureInstanceCount"); + } + + /** + * Verifies that the source contains the given feature type. This method expects that the given source contains + * exactly one scope description and that the hierarchical level is {@link ScopeCode#FEATURE_TYPE}. + * + * @param name expected source identifier. + * @param features expected names of feature type. + * @param source the source to validate. + */ + public static void assertFeatureSourceEquals(final String name, final String[] features, final Source source) { + assertEquals(name, String.valueOf(source.getSourceCitation().getTitle()), "metadata.lineage.source.sourceCitation.title"); + final Scope scope = source.getScope(); + assertNotNull(scope, "metadata.lineage.source.scope"); + assertEquals(ScopeCode.FEATURE_TYPE, scope.getLevel(), "metadata.lineage.source.scope.level"); + final var actual = assertSingleton(scope.getLevelDescription()).getFeatures().toArray(CharSequence[]::new); + for (int i=0; i<actual.length; i++) { + actual[i] = actual[i].toString(); + } + assertArrayEquals(features, actual, "metadata.lineage.source.scope.levelDescription.feature"); + } + /** * Asserts that the two given objects are not equal. * This method tests all {@link ComparisonMode} except {@code DEBUG}.
