Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add proj_errno_string() to proj.def #1050

Merged
merged 2 commits into from Jun 21, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/proj.def
Expand Up @@ -157,3 +157,5 @@ EXPORTS
proj_context_errno @141

pj_isnan @142

proj_errno_string @143
9 changes: 9 additions & 0 deletions test/unit/CMakeLists.txt
Expand Up @@ -58,6 +58,15 @@ target_link_libraries(proj_test_unit
${PROJ_LIBRARIES})
add_test(NAME proj_test_unit COMMAND proj_test_unit)

add_executable(proj_errno_string_test
main.cpp
proj_errno_string_test.cpp)
target_link_libraries(proj_errno_string_test
gtest
${PROJ_LIBRARIES})
add_test(NAME proj_errno_string_test COMMAND proj_errno_string_test)


if (MSVC AND BUILD_LIBPROJ_SHARED)
# ph_phi2_test not compatible of a .dll build
else()
Expand Down
9 changes: 8 additions & 1 deletion test/unit/Makefile.am
Expand Up @@ -9,6 +9,7 @@ AM_CXXFLAGS = @CXX_WFLAGS@ @NO_ZERO_AS_NULL_POINTER_CONSTANT_FLAG@

bin_PROGRAMS = basic_test
bin_PROGRAMS += pj_phi2_test
bin_PROGRAMS += proj_errno_string_test

basic_test_SOURCES = basic_test.cpp main.cpp
basic_test_LDADD = ../../src/libproj.la ../../test/googletest/libgtest.la
Expand All @@ -22,5 +23,11 @@ pj_phi2_test_LDADD = ../../src/libproj.la ../../test/googletest/libgtest.la
pj_phi2_test-check: pj_phi2_test
./pj_phi2_test

proj_errno_string_test_SOURCES = proj_errno_string_test.cpp main.cpp
proj_errno_string_test_LDADD= ../../src/libproj.la ../../test/googletest/libgtest.la

proj_errno_string_test-check: proj_errno_string_test
./proj_errno_string_test

check-local: basic_test-check
check-local: pj_phi2_test-check
check-local: pj_phi2_test-check proj_errno_string_test-check
68 changes: 68 additions & 0 deletions test/unit/proj_errno_string_test.cpp
@@ -0,0 +1,68 @@
/******************************************************************************
*
* Project: PROJ
* Purpose: Unit test for proj_errno_string()
* Author: Kristian Evers <kristianevers@gmail.com>
*
******************************************************************************
* Copyright (c) 2018, Kristian Evers.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
****************************************************************************/

#include <cstring>

#include "proj.h"

#include "gtest_include.h"

namespace {

TEST(ProjErrnoStringTest, NoError) {
EXPECT_EQ(0, 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
constexpr 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));
}

TEST(ProjErrnoStringTest, SystemErrnos) {
constexpr 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
}

} // namespace