You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by de...@apache.org on 2022/12/06 18:23:28 UTC

[sis] 02/02: Fix JUnit test failures when the tests are run without EPSG database.

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 d438a0d1b60f5d185c2b0297ac2a84cc53c44e59
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Tue Dec 6 18:50:47 2022 +0100

    Fix JUnit test failures when the tests are run without EPSG database.
---
 .../org/apache/sis/console/CRSCommandTest.java     | 14 ++++++-----
 .../sis/internal/simple/CitationConstant.java      | 12 ++++++++--
 .../java/org/apache/sis/xml/NilObjectHandler.java  |  7 +++---
 .../sis/referencing/GeodeticObjectVerifier.java    |  6 ++---
 .../factory/CommonAuthorityFactoryTest.java        | 27 ++++++++++++++--------
 pom.xml                                            |  2 +-
 6 files changed, 43 insertions(+), 25 deletions(-)

diff --git a/application/sis-console/src/test/java/org/apache/sis/console/CRSCommandTest.java b/application/sis-console/src/test/java/org/apache/sis/console/CRSCommandTest.java
index afc92ed5ce..63b572a08c 100644
--- a/application/sis-console/src/test/java/org/apache/sis/console/CRSCommandTest.java
+++ b/application/sis-console/src/test/java/org/apache/sis/console/CRSCommandTest.java
@@ -29,7 +29,7 @@ import static org.junit.Assert.*;
  * Tests the {@link CRSCommand} sub-command.
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.0
+ * @version 1.3
  * @since   0.8
  * @module
  */
@@ -46,18 +46,20 @@ public final strictfp class CRSCommandTest extends TestCase {
      * Creates a new test.
      */
     public CRSCommandTest() {
-        WGS84 =
-            "\\QGeodeticCRS[\"WGS 84\",\n" +
+        final String name = "\"WGS\\E\\s?(?:19)?\\Q84\"";                                       // Accept "WGS 84" or "WGS 1984".
+        WGS84 = "(?m)\\Q" +                                                                     // Multilines.
+            "GeodeticCRS[" + name + ",\n" +
             "  Datum[\"World Geodetic System 1984\",\n" +
-            "    Ellipsoid[\"WGS 84\", 6378137.0, 298.257223563]],\n" +
+            "    Ellipsoid[" + name + ", 6378137.0, 298.257223563]],\n" +
             "  CS[ellipsoidal, 2],\n" +
             "    Axis[\"Latitude (B)\", north],\n" +
             "    Axis[\"Longitude (L)\", east],\n" +
             "    Unit[\"degree\", 0.017453292519943295],\n" +
-            "  Scope[\"Horizontal component of 3D system.\\E.*\\Q\"],\n" +                      // EPSG geodetic dataset provides more details here.
+            "\\E(?:  Scope\\[\".+\"\\],\n)?\\Q" +                                               // Ignore SCOPE[…] if present.
             "  Area[\"\\E.*\\Q\"],\n" +                                                         // Language may vary because of SIS localization.
             "  BBox[-90.00, -180.00, 90.00, 180.00],\n" +
-            "  Id[\"EPSG\", 4326,\\E.*\\Q URI[\"urn:ogc:def:crs:EPSG:\\E.*\\Q:4326\"]]]\n\\E";  // Version number of EPSG dataset may vary.
+            "  Id[\"EPSG\", 4326,\\E.*\\Q URI[\"urn:ogc:def:crs:EPSG:\\E.*\\Q:4326\"]]" +       // Version number of EPSG dataset may vary.
+            "\\E(?:,\n  Remark\\[\".+\"\\])?\\]\n";                                             // Ignore trailing REMARK[…] if present.
         /*
          * Insert the native line separator in the expected string. We modify the expected string
          * instead of modifying the `test.outputBuffer` result because we want to verify that the
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/CitationConstant.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/CitationConstant.java
index 34095c93f9..ee0d2641f5 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/CitationConstant.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/CitationConstant.java
@@ -46,7 +46,7 @@ import static java.util.logging.Logger.getLogger;
  * is available, then that simple primary key will be used as the citation title.
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 1.0
+ * @version 1.3
  *
  * @see IdentifierSpace
  * @see Citations
@@ -193,12 +193,20 @@ public class CitationConstant extends SimpleCitation {
         return c;
     }
 
+    /**
+     * Returns the title, which is mandatory.
+     */
+    @Override
+    public InternationalString getTitle() {
+        InternationalString title = delegate().getTitle();
+        return (title != null) ? title : super.getTitle();
+    }
+
     /**
      * Redirects the call to the delegate citation (the instance which actually contain the data).
      *
      * @return the value returned by the delegate.
      */
-    @Override public InternationalString                        getTitle()                   {return delegate().getTitle();}
     @Override public Collection<? extends InternationalString>  getAlternateTitles()         {return delegate().getAlternateTitles();}
     @Override public Collection<? extends CitationDate>         getDates()                   {return delegate().getDates();}
     @Override public InternationalString                        getEdition()                 {return delegate().getEdition();}
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/xml/NilObjectHandler.java b/core/sis-metadata/src/main/java/org/apache/sis/xml/NilObjectHandler.java
index 4cb46aeeb6..d06fac68c8 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/xml/NilObjectHandler.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/xml/NilObjectHandler.java
@@ -20,6 +20,7 @@ import java.util.Map;
 import java.util.List;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Objects;
 import java.lang.reflect.Proxy;
 import java.lang.reflect.Method;
@@ -47,7 +48,7 @@ import org.apache.sis.internal.jaxb.ModifiableIdentifierMap;
  * For now, it doesn't seem worth to cache the handlers.</div>
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.3
+ * @version 1.3
  * @since   0.3
  * @module
  */
@@ -130,11 +131,11 @@ final class NilObjectHandler implements InvocationHandler {
                     return (attribute instanceof NilReason) ? (NilReason) attribute : null;
                 }
                 case "getIdentifierMap": {
-                    return (attribute instanceof IdentifierMap) ? (IdentifierMap) attribute : null;
+                    return (attribute instanceof IdentifierMap) ? (IdentifierMap) attribute : Collections.emptyMap();
                 }
                 case "getIdentifiers": {
                     return (attribute instanceof IdentifierMapAdapter) ?
-                            ((IdentifierMapAdapter) attribute).getIdentifiers(method.getReturnType()) : null;
+                            ((IdentifierMapAdapter) attribute).getIdentifiers(method.getReturnType()) : Collections.emptyList();
                 }
                 case "toString": {
                     return Strings.bracket(getInterface(proxy), attribute);
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/referencing/GeodeticObjectVerifier.java b/core/sis-referencing/src/test/java/org/apache/sis/referencing/GeodeticObjectVerifier.java
index a5ca080a42..51b22b649f 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/referencing/GeodeticObjectVerifier.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/referencing/GeodeticObjectVerifier.java
@@ -42,7 +42,7 @@ import static org.apache.sis.test.Assert.*;
  * because IOGP allows implementations to modify non-essential properties.
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.8
+ * @version 1.3
  * @since   0.4
  * @module
  *
@@ -181,8 +181,8 @@ public final strictfp class GeodeticObjectVerifier {
      * @param  ellipsoid  the ellipsoid to verify.
      */
     public static void assertIsWGS84(final Ellipsoid ellipsoid) {
-        assertEquals("name",              "WGS 84",          ellipsoid.getName().getCode());
-        assertEquals("axisUnit",          Units.METRE,          ellipsoid.getAxisUnit());
+        assertTrue  ("name",              ellipsoid.getName().getCode().matches("WGS\\s?(?:19)?84"));
+        assertEquals("axisUnit",          Units.METRE,       ellipsoid.getAxisUnit());
         assertEquals("semiMajorAxis",     6378137,           ellipsoid.getSemiMajorAxis(),     STRICT);
         assertEquals("semiMinorAxis",     6356752.314245179, ellipsoid.getSemiMinorAxis(),     0.001);
         assertEquals("inverseFlattening", 298.257223563,     ellipsoid.getInverseFlattening(), STRICT);
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/CommonAuthorityFactoryTest.java b/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/CommonAuthorityFactoryTest.java
index 310db89267..4217d64240 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/CommonAuthorityFactoryTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/referencing/factory/CommonAuthorityFactoryTest.java
@@ -234,8 +234,12 @@ public final strictfp class CommonAuthorityFactoryTest extends TestCase {
         assertSame("When the given parameters match exactly the UTM central meridian and latitude of origin,"
                 + " the CRS created by AUTO:42002 should be the same than the CRS created by AUTO:42001.",
                 crs, factory.createProjectedCRS("AUTO2:42002,1,-123,0"));
-
-        assertEpsgNameAndIdentifierEqual("WGS 84 / UTM zone 10N", 32610, crs);
+        /*
+         * Do not use `assertEpsgNameAndIdentifierEqual(…)` because the "EPSG" authority is missing
+         * (actually is "Subset of EPSG") if the CRS was built from the fallback factory.
+         */
+        assertEquals("name", "WGS 84 / UTM zone 10N", crs.getName().getCode());
+        assertEquals("identifier", "32610", getSingleton(crs.getIdentifiers()).getCode());
         final ParameterValueGroup p = crs.getConversionFromBase().getParameterValues();
         assertEquals(TransverseMercator.NAME, crs.getConversionFromBase().getMethod().getName().getCode());
         assertAxisDirectionsEqual("CS", crs.getCoordinateSystem(), AxisDirection.EAST, AxisDirection.NORTH);
@@ -368,30 +372,33 @@ public final strictfp class CommonAuthorityFactoryTest extends TestCase {
     @Test
     @DependsOnMethod("testCRS84")
     public void testWKT() throws FactoryException {
+        final String WGS84 = "“WGS\\E\\s?(?:19)?\\Q84”";                // Accept "WGS 84" or "WGS 1984"
         GeographicCRS crs = factory.createGeographicCRS("CRS:84");
-        assertWktEquals(Convention.WKT1,
-                "GEOGCS[“WGS 84”,\n" +
+        assertWktEqualsRegex(Convention.WKT1, "(?m)\\Q" +               // Multilines
+                "GEOGCS[" + WGS84 + ",\n" +
                 "  DATUM[“World Geodetic System 1984”,\n" +
-                "    SPHEROID[“WGS 84”, 6378137.0, 298.257223563]],\n" +
+                "    SPHEROID[" + WGS84 + ", 6378137.0, 298.257223563]],\n" +
                 "    PRIMEM[“Greenwich”, 0.0],\n" +
                 "  UNIT[“degree”, 0.017453292519943295],\n" +
                 "  AXIS[“Longitude”, EAST],\n" +
                 "  AXIS[“Latitude”, NORTH],\n" +
-                "  AUTHORITY[“CRS”, “84”]]", crs);
+                "  AUTHORITY[“CRS”, “84”]]\\E", crs);
 
         assertWktEqualsRegex(Convention.WKT2, "(?m)\\Q" +
-                "GEODCRS[“WGS 84”,\n" +
+                "GEODCRS[" + WGS84 + ",\n" +
                 "  DATUM[“World Geodetic System 1984”,\n" +
-                "    ELLIPSOID[“WGS 84”, 6378137.0, 298.257223563, LENGTHUNIT[“metre”, 1]]],\n" +
+                "    ELLIPSOID[" + WGS84 + ", 6378137.0, 298.257223563, LENGTHUNIT[“metre”, 1]]],\n" +
                 "    PRIMEM[“Greenwich”, 0.0, ANGLEUNIT[“degree”, 0.017453292519943295]],\n" +
                 "  CS[ellipsoidal, 2],\n" +
                 "    AXIS[“Longitude (L)”, east, ORDER[1]],\n" +
                 "    AXIS[“Latitude (B)”, north, ORDER[2]],\n" +
                 "    ANGLEUNIT[“degree”, 0.017453292519943295],\n" +
-                "  SCOPE[“Horizontal component of 3D system.\\E.*\\Q”],\n" +
+                "\\E(?:  SCOPE\\[“.+”\\],\n)?\\Q" +                     // Ignore SCOPE[…] if present.
                 "  AREA[“World\\E.*\\Q”],\n" +
                 "  BBOX[-90.00, -180.00, 90.00, 180.00],\n" +
-                "  ID[“CRS”, 84, CITATION[“OGC:WMS”], URI[“urn:ogc:def:crs:OGC:1.3:CRS84”]]]\\E", crs);
+                "  ID[“CRS”, 84, CITATION[“OGC:WMS”], URI[“urn:ogc:def:crs:OGC:1.3:CRS84”]]" +
+                "\\E(?:,\n  REMARK\\[“.+”\\])?\\]",                     // Ignore trailing REMARK[…] if present.
+                crs);
         /*
          * Note: the WKT specification defines the ID element as:
          *
diff --git a/pom.xml b/pom.xml
index aaed720b9d..e4b29020f4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -890,7 +890,7 @@
             </group>
             <group>
               <title>Applications</title>
-              <packages>org.apache.sis.console*:org.apache.sis.services*</packages>
+              <packages>org.apache.sis.gui*:org.apache.sis.console*:org.apache.sis.services*:org.apache.sis.openoffice*</packages>
             </group>
             <group>
               <title>Data storage</title>