aboutsummaryrefslogtreecommitdiff
path: root/test/unit
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2020-12-16 15:12:51 +0100
committerGitHub <noreply@github.com>2020-12-16 15:12:51 +0100
commit5e077729274f5d28e137e1a41f7d3350146614ef (patch)
treed1ef799526f06828328b58ce8ee92c028f723b6a /test/unit
parent8b1ef9504d0bcfbd8433df943e307bbd1aa30c4f (diff)
parenta27c0255e7b8e6aab1b91e49fd7870d1ee4e1a80 (diff)
downloadPROJ-5e077729274f5d28e137e1a41f7d3350146614ef.tar.gz
PROJ-5e077729274f5d28e137e1a41f7d3350146614ef.zip
Merge pull request #2487 from rouault/error_mgt_improvements
Error management: revise error codes and expose them to the public API
Diffstat (limited to 'test/unit')
-rw-r--r--test/unit/gie_self_tests.cpp44
-rw-r--r--test/unit/proj_errno_string_test.cpp43
2 files changed, 47 insertions, 40 deletions
diff --git a/test/unit/gie_self_tests.cpp b/test/unit/gie_self_tests.cpp
index f9252137..4244766e 100644
--- a/test/unit/gie_self_tests.cpp
+++ b/test/unit/gie_self_tests.cpp
@@ -46,9 +46,8 @@ TEST(gie, cart_selftest) {
PJ_CONTEXT *ctx;
PJ *P;
PJ_COORD a, b, obs[2];
- PJ_COORD coord[2];
+ PJ_COORD coord[3];
- int err;
size_t n, sz;
double dist, h, t;
const char *const args[3] = {"proj=utm", "zone=32", "ellps=GRS80"};
@@ -89,16 +88,6 @@ TEST(gie, cart_selftest) {
/* Clear any previous error */
proj_errno_reset(P);
- /* Invalid projection */
- a = proj_trans(P, static_cast<PJ_DIRECTION>(42), a);
- ASSERT_EQ(a.lpz.lam, HUGE_VAL);
-
- err = proj_errno(P);
- ASSERT_NE(err, 0);
-
- /* Clear error again */
- proj_errno_reset(P);
-
/* Clean up */
proj_destroy(P);
@@ -211,7 +200,7 @@ TEST(gie, cart_selftest) {
coord[0] = proj_coord(proj_torad(12), proj_torad(55), 45, 0);
coord[1] = proj_coord(proj_torad(12), proj_torad(56), 50, 0);
- ASSERT_FALSE(proj_trans_array(P, PJ_FWD, 2, coord));
+ ASSERT_EQ(proj_trans_array(P, PJ_FWD, 2, coord), 0);
ASSERT_EQ(a.lpz.lam, coord[0].lpz.lam);
ASSERT_EQ(a.lpz.phi, coord[0].lpz.phi);
@@ -220,6 +209,35 @@ TEST(gie, cart_selftest) {
ASSERT_EQ(b.lpz.phi, coord[1].lpz.phi);
ASSERT_EQ(b.lpz.z, coord[1].lpz.z);
+ /* test proj_trans_array () with two failed points for the same reason */
+
+ coord[0] =
+ proj_coord(proj_torad(12), proj_torad(95), 45, 0); // invalid latitude
+ coord[1] = proj_coord(proj_torad(12), proj_torad(56), 50, 0);
+ coord[2] =
+ proj_coord(proj_torad(12), proj_torad(95), 45, 0); // invalid latitude
+ ASSERT_EQ(proj_trans_array(P, PJ_FWD, 3, coord),
+ PROJ_ERR_COORD_TRANSFM_INVALID_COORD);
+
+ ASSERT_EQ(HUGE_VAL, coord[0].lpz.lam);
+ ASSERT_EQ(HUGE_VAL, coord[0].lpz.phi);
+ ASSERT_EQ(HUGE_VAL, coord[0].lpz.z);
+ ASSERT_EQ(b.lpz.lam, coord[1].lpz.lam);
+ ASSERT_EQ(b.lpz.phi, coord[1].lpz.phi);
+ ASSERT_EQ(b.lpz.z, coord[1].lpz.z);
+ ASSERT_EQ(HUGE_VAL, coord[2].lpz.lam);
+ ASSERT_EQ(HUGE_VAL, coord[2].lpz.phi);
+ ASSERT_EQ(HUGE_VAL, coord[2].lpz.z);
+
+ /* test proj_trans_array () with two failed points for different reasons */
+
+ coord[0] =
+ proj_coord(proj_torad(12), proj_torad(95), 45, 0); // invalid latitude
+ coord[1] =
+ proj_coord(proj_torad(105), proj_torad(0), 45,
+ 0); // in the equatorial axis, at 90° of the central meridian
+ ASSERT_EQ(proj_trans_array(P, PJ_FWD, 2, coord), PROJ_ERR_COORD_TRANSFM);
+
/* Clean up after proj_trans_* tests */
proj_destroy(P);
}
diff --git a/test/unit/proj_errno_string_test.cpp b/test/unit/proj_errno_string_test.cpp
index a592b31f..d58c5e3f 100644
--- a/test/unit/proj_errno_string_test.cpp
+++ b/test/unit/proj_errno_string_test.cpp
@@ -35,37 +35,26 @@
namespace {
-TEST(ProjErrnoStringTest, NoError) { EXPECT_EQ(0, proj_errno_string(0)); }
+TEST(ProjErrnoStringTest, NoError) { EXPECT_EQ(nullptr, proj_errno_string(0)); }
TEST(ProjErrnoStringTest, ProjErrnos) {
- EXPECT_STREQ("no arguments in initialization list", proj_errno_string(-1));
- EXPECT_STREQ("invalid projection system error (-1000)",
- proj_errno_string(-1000));
- EXPECT_STREQ("invalid projection system error (-9999)",
- proj_errno_string(-9999));
- // for errnos < -9999, -9999 is always returned
- const int min = std::numeric_limits<int>::min();
- EXPECT_STREQ("invalid projection system error (-9999)",
- proj_errno_string(min));
- EXPECT_STREQ("invalid projection system error (-9999)",
- proj_errno_string(-10000));
+ EXPECT_STREQ("Unknown error (code -1)", proj_errno_string(-1));
+ EXPECT_STREQ("Invalid PROJ string syntax",
+ proj_errno_string(PROJ_ERR_INVALID_OP_WRONG_SYNTAX));
+ EXPECT_STREQ(
+ "Unspecified error related to coordinate operation initialization",
+ proj_errno_string(PROJ_ERR_INVALID_OP));
+ EXPECT_STREQ("Unspecified error related to coordinate transformation",
+ proj_errno_string(PROJ_ERR_COORD_TRANSFM));
}
-TEST(ProjErrnoStringTest, SystemErrnos) {
- const int max = std::numeric_limits<int>::max();
-
-#ifdef HAVE_STRERROR
- EXPECT_STREQ(strerror(5), proj_errno_string(5));
- EXPECT_STREQ(strerror(9999), proj_errno_string(9999));
- EXPECT_STREQ(strerror(10000), proj_errno_string(10000));
- EXPECT_STREQ(strerror(max), proj_errno_string(max));
-#else
- EXPECT_STREQ("no system list, errno: 5\n", proj_errno_string(5));
- EXPECT_STREQ("no system list, errno: 9999\n", proj_errno_string(9999));
- // for errnos > 9999, 9999 is always returned
- EXPECT_STREQ("no system list, errno: 9999\n", proj_errno_string(10000));
- EXPECT_STREQ("no system list, errno: 9999\n", proj_errno_string(max));
-#endif
+TEST(ProjErrnoStringTest, proj_context_errno_string) {
+ EXPECT_STREQ("Unknown error (code -1)",
+ proj_context_errno_string(nullptr, -1));
+ PJ_CONTEXT *ctx = proj_context_create();
+ EXPECT_STREQ("Unknown error (code -999)",
+ proj_context_errno_string(ctx, -999));
+ proj_context_destroy(ctx);
}
} // namespace