diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2019-07-01 11:22:54 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2019-07-01 18:09:13 +0200 |
| commit | 74932008096b3135317d8c45cb9c9fabb5ab8c6b (patch) | |
| tree | b136036ee3e557903374cd9797ce76ef1b101329 /test/unit/test_c_api.cpp | |
| parent | a9c3567cf5f69d08a869bf17a9e284e8c8142956 (diff) | |
| download | PROJ-74932008096b3135317d8c45cb9c9fabb5ab8c6b.tar.gz PROJ-74932008096b3135317d8c45cb9c9fabb5ab8c6b.zip | |
C API: add proj_concatoperation_get_step_count() and proj_concatoperation_get_step()
Diffstat (limited to 'test/unit/test_c_api.cpp')
| -rw-r--r-- | test/unit/test_c_api.cpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/test/unit/test_c_api.cpp b/test/unit/test_c_api.cpp index 99904fd4..82974e13 100644 --- a/test/unit/test_c_api.cpp +++ b/test/unit/test_c_api.cpp @@ -3420,4 +3420,73 @@ TEST_F(CApi, proj_get_scope) { } } +// --------------------------------------------------------------------------- + +TEST_F(CApi, proj_concatoperation_get_step) { + // Test on a non concatenated operation + { + auto co = proj_create_from_database(m_ctxt, "EPSG", "8048", + PJ_CATEGORY_COORDINATE_OPERATION, + false, nullptr); + ObjectKeeper keeper(co); + ASSERT_NE(co, nullptr); + ASSERT_NE(proj_get_type(co), PJ_TYPE_CONCATENATED_OPERATION); + + ASSERT_EQ(proj_concatoperation_get_step_count(m_ctxt, co), 0); + ASSERT_EQ(proj_concatoperation_get_step(m_ctxt, co, 0), nullptr); + } + // Test on a concatenated operation + { + auto ctxt = proj_create_operation_factory_context(m_ctxt, nullptr); + ASSERT_NE(ctxt, nullptr); + ContextKeeper keeper_ctxt(ctxt); + + // GDA94 / MGA zone 56 + auto source_crs = proj_create_from_database( + m_ctxt, "EPSG", "28356", PJ_CATEGORY_CRS, false, nullptr); + ASSERT_NE(source_crs, nullptr); + ObjectKeeper keeper_source_crs(source_crs); + + // GDA2020 / MGA zone 56 + auto target_crs = proj_create_from_database( + m_ctxt, "EPSG", "7856", PJ_CATEGORY_CRS, false, nullptr); + ASSERT_NE(target_crs, nullptr); + ObjectKeeper keeper_target_crs(target_crs); + + proj_operation_factory_context_set_spatial_criterion( + m_ctxt, ctxt, PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION); + + proj_operation_factory_context_set_grid_availability_use( + m_ctxt, ctxt, PROJ_GRID_AVAILABILITY_IGNORED); + + auto res = proj_create_operations(m_ctxt, source_crs, target_crs, ctxt); + ASSERT_NE(res, nullptr); + ObjListKeeper keeper_res(res); + + ASSERT_GT(proj_list_get_count(res), 0); + + auto op = proj_list_get(m_ctxt, res, 0); + ASSERT_NE(op, nullptr); + ObjectKeeper keeper_op(op); + + ASSERT_EQ(proj_get_type(op), PJ_TYPE_CONCATENATED_OPERATION); + ASSERT_EQ(proj_concatoperation_get_step_count(m_ctxt, op), 3); + + EXPECT_EQ(proj_concatoperation_get_step(m_ctxt, op, -1), nullptr); + EXPECT_EQ(proj_concatoperation_get_step(m_ctxt, op, 3), nullptr); + + auto step = proj_concatoperation_get_step(m_ctxt, op, 1); + ASSERT_NE(step, nullptr); + ObjectKeeper keeper_step(step); + + const char* scope = proj_get_scope(step); + EXPECT_NE(scope, nullptr); + EXPECT_NE(std::string(scope), std::string()); + + const char* remarks = proj_get_remarks(step); + EXPECT_NE(remarks, nullptr); + EXPECT_NE(std::string(remarks), std::string()); + } +} + } // namespace |
