aboutsummaryrefslogtreecommitdiff
path: root/test/unit/test_c_api.cpp
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2021-03-12 22:43:42 +0100
committerEven Rouault <even.rouault@spatialys.com>2021-03-15 16:16:31 +0100
commit5ddddfac622f40a4de920460b64e88e7b9cb5b68 (patch)
tree9474e0fc32b5ab2360c048190f06453350ac3d12 /test/unit/test_c_api.cpp
parent1b07ef00c55525420cfbc9467016959e709e6862 (diff)
downloadPROJ-5ddddfac622f40a4de920460b64e88e7b9cb5b68.tar.gz
PROJ-5ddddfac622f40a4de920460b64e88e7b9cb5b68.zip
Add C/C++ API to get SQL statements to insert a CRS into database
Diffstat (limited to 'test/unit/test_c_api.cpp')
-rw-r--r--test/unit/test_c_api.cpp88
1 files changed, 88 insertions, 0 deletions
diff --git a/test/unit/test_c_api.cpp b/test/unit/test_c_api.cpp
index 1b08e884..120f8627 100644
--- a/test/unit/test_c_api.cpp
+++ b/test/unit/test_c_api.cpp
@@ -5227,4 +5227,92 @@ TEST_F(CApi, proj_crs_is_derived) {
}
}
+// ---------------------------------------------------------------------------
+
+TEST_F(CApi, proj_suggests_code_for) {
+ {
+ auto session = proj_insert_object_session_create(nullptr);
+ EXPECT_NE(session, nullptr);
+
+ EXPECT_EQ(proj_insert_object_session_create(nullptr), nullptr);
+
+ proj_insert_object_session_destroy(nullptr, session);
+ }
+
+ { proj_insert_object_session_destroy(nullptr, nullptr); }
+ {
+ auto wkt = "GEOGCRS[\"myGDA2020\",\n"
+ " DATUM[\"GDA2020\",\n"
+ " ELLIPSOID[\"GRS_1980\",6378137,298.257222101,\n"
+ " LENGTHUNIT[\"metre\",1]]],\n"
+ " PRIMEM[\"Greenwich\",0,\n"
+ " ANGLEUNIT[\"Degree\",0.0174532925199433]],\n"
+ " CS[ellipsoidal,2],\n"
+ " AXIS[\"geodetic latitude (Lat)\",north,\n"
+ " ORDER[1],\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433]],\n"
+ " AXIS[\"geodetic longitude (Lon)\",east,\n"
+ " ORDER[2],\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433]]]";
+ auto crs = proj_create_from_wkt(m_ctxt, wkt, nullptr, nullptr, nullptr);
+ ObjectKeeper keeper_from_wkt(crs);
+ EXPECT_NE(crs, nullptr);
+
+ {
+ char *code =
+ proj_suggests_code_for(m_ctxt, crs, "HOBU", false, nullptr);
+ ASSERT_NE(code, nullptr);
+ EXPECT_EQ(std::string(code), "MYGDA2020");
+ proj_string_destroy(code);
+ }
+
+ {
+ char *code =
+ proj_suggests_code_for(m_ctxt, crs, "HOBU", true, nullptr);
+ ASSERT_NE(code, nullptr);
+ EXPECT_EQ(std::string(code), "1");
+ proj_string_destroy(code);
+ }
+
+ // No session specified: we use a temporary session
+ for (int i = 0; i < 2; i++) {
+ auto list = proj_get_insert_statements(m_ctxt, nullptr, crs, "HOBU",
+ "XXXX", false, nullptr);
+ ASSERT_NE(list, nullptr);
+ ASSERT_NE(list[0], nullptr);
+ EXPECT_EQ(std::string(list[0]),
+ "INSERT INTO geodetic_datum VALUES('HOBU',"
+ "'GEODETIC_DATUM_XXXX','GDA2020','','EPSG','7019',"
+ "'EPSG','8901',NULL,NULL,NULL,0);");
+ proj_string_list_destroy(list);
+ }
+
+ auto session = proj_insert_object_session_create(m_ctxt);
+ EXPECT_NE(session, nullptr);
+
+ {
+ auto list = proj_get_insert_statements(m_ctxt, session, crs, "HOBU",
+ "XXXX", false, nullptr);
+ ASSERT_NE(list, nullptr);
+ ASSERT_NE(list[0], nullptr);
+ EXPECT_EQ(std::string(list[0]),
+ "INSERT INTO geodetic_datum VALUES('HOBU',"
+ "'GEODETIC_DATUM_XXXX','GDA2020','','EPSG','7019',"
+ "'EPSG','8901',NULL,NULL,NULL,0);");
+ proj_string_list_destroy(list);
+ }
+
+ // Object already inserted: return empty list
+ {
+ auto list = proj_get_insert_statements(m_ctxt, session, crs, "HOBU",
+ "XXXX", false, nullptr);
+ ASSERT_NE(list, nullptr);
+ ASSERT_EQ(list[0], nullptr);
+ proj_string_list_destroy(list);
+ }
+
+ proj_insert_object_session_destroy(m_ctxt, session);
+ }
+}
+
} // namespace