diff options
Diffstat (limited to 'test/unit/test_c_api.cpp')
| -rw-r--r-- | test/unit/test_c_api.cpp | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/test/unit/test_c_api.cpp b/test/unit/test_c_api.cpp index 8c9f114b..6c22cade 100644 --- a/test/unit/test_c_api.cpp +++ b/test/unit/test_c_api.cpp @@ -809,6 +809,22 @@ TEST_F(CApi, proj_obj_get_source_target_crs_transformation) { // --------------------------------------------------------------------------- +TEST_F(CApi, proj_obj_get_source_crs_of_projected_crs) { + auto crs = proj_obj_create_from_wkt( + m_ctxt, + createProjectedCRS()->exportToWKT(WKTFormatter::create().get()).c_str(), + nullptr); + ASSERT_NE(crs, nullptr); + ObjectKeeper keeper(crs); + + auto sourceCRS = proj_obj_get_source_crs(crs); + ASSERT_NE(sourceCRS, nullptr); + ObjectKeeper keeper_sourceCRS(sourceCRS); + EXPECT_EQ(std::string(proj_obj_get_name(sourceCRS)), "WGS 84"); +} + +// --------------------------------------------------------------------------- + TEST_F(CApi, proj_obj_get_source_target_crs_conversion_without_crs) { auto obj = proj_obj_create_from_database( m_ctxt, "EPSG", "16031", PJ_OBJ_CATEGORY_COORDINATE_OPERATION, false, @@ -1955,4 +1971,69 @@ TEST_F(CApi, proj_obj_create_projections) { /* END: Generated by scripts/create_c_api_projections.py*/ } +// --------------------------------------------------------------------------- + +TEST_F(CApi, proj_obj_cs_get_axis_info) { + { + auto crs = proj_obj_create_from_database( + m_ctxt, "EPSG", "4326", PJ_OBJ_CATEGORY_CRS, false, nullptr); + ASSERT_NE(crs, nullptr); + ObjectKeeper keeper(crs); + + auto cs = proj_obj_crs_get_coordinate_system(crs); + ASSERT_NE(cs, nullptr); + ObjectKeeper keeperCs(cs); + + const char *type = proj_obj_cs_get_type(cs); + ASSERT_NE(type, nullptr); + EXPECT_EQ(std::string(type), "Ellipsoidal"); + + EXPECT_EQ(proj_obj_cs_get_axis_count(cs), 2); + + EXPECT_FALSE(proj_obj_cs_get_axis_info(cs, -1, nullptr, nullptr, + nullptr, nullptr, nullptr)); + + EXPECT_FALSE(proj_obj_cs_get_axis_info(cs, 2, nullptr, nullptr, nullptr, + nullptr, nullptr)); + + EXPECT_TRUE(proj_obj_cs_get_axis_info(cs, 0, nullptr, nullptr, nullptr, + nullptr, nullptr)); + + const char *name = nullptr; + const char *abbrev = nullptr; + const char *direction = nullptr; + double unitConvFactor = 0.0; + const char *unitName = nullptr; + + EXPECT_TRUE(proj_obj_cs_get_axis_info(cs, 0, &name, &abbrev, &direction, + &unitConvFactor, &unitName)); + ASSERT_NE(name, nullptr); + ASSERT_NE(abbrev, nullptr); + ASSERT_NE(direction, nullptr); + ASSERT_NE(unitName, nullptr); + EXPECT_EQ(std::string(name), "Geodetic latitude"); + EXPECT_EQ(std::string(abbrev), "Lat"); + EXPECT_EQ(std::string(direction), "north"); + EXPECT_EQ(unitConvFactor, 0.017453292519943295) << unitConvFactor; + EXPECT_EQ(std::string(unitName), "degree"); + } + + // Non CRS object + { + auto obj = proj_obj_create_from_database( + m_ctxt, "EPSG", "1170", PJ_OBJ_CATEGORY_COORDINATE_OPERATION, false, + nullptr); + ASSERT_NE(obj, nullptr); + ObjectKeeper keeper(obj); + EXPECT_EQ(proj_obj_crs_get_coordinate_system(obj), nullptr); + + EXPECT_EQ(proj_obj_cs_get_type(obj), nullptr); + + EXPECT_EQ(proj_obj_cs_get_axis_count(obj), -1); + + EXPECT_FALSE(proj_obj_cs_get_axis_info(obj, 0, nullptr, nullptr, + nullptr, nullptr, nullptr)); + } +} + } // namespace |
