aboutsummaryrefslogtreecommitdiff
path: root/test/unit
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2021-09-28 14:47:09 +0200
committerEven Rouault <even.rouault@spatialys.com>2021-09-28 14:47:09 +0200
commite6e6e4ca345e774910afa5bbe485c3d9f7851cd4 (patch)
treedd1cd3df30565228b932bbfc1d8d97e142111344 /test/unit
parentf982d9d3104731727c445930bf14008d1c572d0a (diff)
downloadPROJ-e6e6e4ca345e774910afa5bbe485c3d9f7851cd4.tar.gz
PROJ-e6e6e4ca345e774910afa5bbe485c3d9f7851cd4.zip
Add a mapping for versioned authorities, so that one can use IAU:xxxx or IAU_2015:xxxx transparently
Diffstat (limited to 'test/unit')
-rw-r--r--test/unit/test_crs.cpp47
-rw-r--r--test/unit/test_io.cpp16
2 files changed, 63 insertions, 0 deletions
diff --git a/test/unit/test_crs.cpp b/test/unit/test_crs.cpp
index 42e6018b..449da2bf 100644
--- a/test/unit/test_crs.cpp
+++ b/test/unit/test_crs.cpp
@@ -747,6 +747,53 @@ TEST(crs, EPSG_4268_geogcrs_deprecated_as_WKT1_GDAL) {
// ---------------------------------------------------------------------------
+TEST(crs, IAU_1000_as_WKT2) {
+ auto dbContext = DatabaseContext::create();
+ auto factory = AuthorityFactory::create(dbContext, "IAU_2015");
+ auto crs = factory->createCoordinateReferenceSystem("1000");
+ WKTFormatterNNPtr f(
+ WKTFormatter::create(WKTFormatter::Convention::WKT2_2019, dbContext));
+ auto wkt = crs->exportToWKT(f.get());
+ // Check that IAU_2015 is split into a authority name and version
+ EXPECT_TRUE(wkt.find("ID[\"IAU\",1000,2015]") != std::string::npos) << wkt;
+
+ auto obj = createFromUserInput(wkt, dbContext);
+ auto crs2 = nn_dynamic_pointer_cast<CRS>(obj);
+ ASSERT_TRUE(crs2 != nullptr);
+ auto wkt2 = crs2->exportToWKT(f.get());
+ // Check that IAU_2015 is split into a authority name and version
+ EXPECT_TRUE(wkt2.find("ID[\"IAU\",1000,2015]") != std::string::npos)
+ << wkt2;
+}
+
+// ---------------------------------------------------------------------------
+
+TEST(crs, IAU_1000_as_PROJJSON) {
+ auto dbContext = DatabaseContext::create();
+ auto factory = AuthorityFactory::create(dbContext, "IAU_2015");
+ auto crs = factory->createCoordinateReferenceSystem("1000");
+ auto projjson = crs->exportToJSON(JSONFormatter::create(dbContext).get());
+ // Check that IAU_2015 is split into a authority name and version
+ EXPECT_TRUE(projjson.find("\"authority\": \"IAU\",") != std::string::npos)
+ << projjson;
+ EXPECT_TRUE(projjson.find("\"code\": 1000,") != std::string::npos)
+ << projjson;
+ EXPECT_TRUE(projjson.find("\"version\": 2015") != std::string::npos)
+ << projjson;
+
+ auto obj = createFromUserInput(projjson, dbContext);
+ auto crs2 = nn_dynamic_pointer_cast<CRS>(obj);
+ ASSERT_TRUE(crs2 != nullptr);
+ WKTFormatterNNPtr f(
+ WKTFormatter::create(WKTFormatter::Convention::WKT2_2019, dbContext));
+ auto wkt2 = crs2->exportToWKT(f.get());
+ // Check that IAU_2015 is split into a authority name and version
+ EXPECT_TRUE(wkt2.find("ID[\"IAU\",1000,2015]") != std::string::npos)
+ << wkt2;
+}
+
+// ---------------------------------------------------------------------------
+
TEST(crs, EPSG_2008_projcrs_deprecated_as_WKT1_GDAL) {
auto dbContext = DatabaseContext::create();
auto factory = AuthorityFactory::create(dbContext, "EPSG");
diff --git a/test/unit/test_io.cpp b/test/unit/test_io.cpp
index f9a54f3c..646a990a 100644
--- a/test/unit/test_io.cpp
+++ b/test/unit/test_io.cpp
@@ -10495,6 +10495,8 @@ TEST(io, createFromUserInput) {
EXPECT_NO_THROW(createFromUserInput("epsg:4326", dbContext));
EXPECT_NO_THROW(
createFromUserInput("urn:ogc:def:crs:EPSG::4326", dbContext));
+ EXPECT_NO_THROW(
+ createFromUserInput("urn:ogc:def:crs:EPSG:10:4326", dbContext));
EXPECT_THROW(createFromUserInput("urn:ogc:def:crs:EPSG::4326", nullptr),
ParsingException);
EXPECT_NO_THROW(createFromUserInput(
@@ -10508,6 +10510,20 @@ TEST(io, createFromUserInput) {
EXPECT_NO_THROW(
createFromUserInput("urn:ogc:def:ellipsoid:EPSG::7030", dbContext));
+ EXPECT_NO_THROW(createFromUserInput("IAU:1000", dbContext));
+ EXPECT_NO_THROW(createFromUserInput("IAU_2015:1000", dbContext));
+ EXPECT_NO_THROW(
+ createFromUserInput("urn:ogc:def:crs:IAU::1000", dbContext));
+ EXPECT_NO_THROW(
+ createFromUserInput("urn:ogc:def:crs:IAU_2015::1000", dbContext));
+ EXPECT_NO_THROW(
+ createFromUserInput("urn:ogc:def:crs:IAU:2015:1000", dbContext));
+
+ EXPECT_THROW(createFromUserInput("urn:ogc:def:crs:IAU_2015::xxxx", nullptr),
+ ParsingException);
+ EXPECT_THROW(createFromUserInput("urn:ogc:def:crs:IAU:xxxx:1000", nullptr),
+ ParsingException);
+
// Found as srsName in some GMLs...
EXPECT_NO_THROW(
createFromUserInput("URN:OGC:DEF:CRS:OGC:1.3:CRS84", dbContext));