diff --git a/.drone.yml b/.drone.yml index 867a640..6f08113 100644 --- a/.drone.yml +++ b/.drone.yml @@ -26,10 +26,12 @@ steps: - alias apt-get='rm -f /var/cache/apt/archives/lock && apt-get' - apt-get update -q - apt-get install -qq build-essential cmake + - apt-get install -qq catch - rm -rf build && mkdir -p build && cd build - - cmake -G "Unix Makefiles" .. + - cmake -G "Unix Makefiles" -DWITH_TESTS=YES .. - make VERBOSE=1 - make install DESTDIR=install + - cd tests && ctest -V volumes: - name: debian-package-cache path: /var/cache/apt/archives @@ -47,10 +49,12 @@ steps: - alias apt-get='rm -f /var/cache/apt/archives/lock && apt-get' - apt-get update -q - apt-get install -qq build-essential cmake + - apt-get install -qq catch - rm -rf build && mkdir -p build && cd build - - cmake -G "Unix Makefiles" .. + - cmake -G "Unix Makefiles" -DWITH_TESTS=YES .. - make VERBOSE=1 - make install DESTDIR=install + - cd tests && ctest -V volumes: - name: debian-package-cache path: /var/cache/apt/archives diff --git a/CMakeLists.txt b/CMakeLists.txt index 7d56a9d..5bc30ed 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ project(mastodonpp list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") # Project build options. -# option(WITH_TESTS "Compile tests." NO) +option(WITH_TESTS "Compile tests." NO) # option(WITH_DOC "Generate HTML documentation." YES) # option(WITH_EXAMPLES "Compile examples." NO) # option(WITH_DEB "Prepare for the building of .deb packages." NO) @@ -32,8 +32,8 @@ include(debug_flags) add_subdirectory(src) -# if(WITH_TESTS) -# add_subdirectory(tests) -# endif() +if(WITH_TESTS) + add_subdirectory(tests) +endif() # include(cmake/packages.cmake) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000..3f7107b --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,27 @@ +include(CTest) + +file(GLOB sources_tests test_*.cpp) + +find_package(Catch2 CONFIG) +if(Catch2_FOUND) # Catch 2.x + include(Catch) + add_executable(all_tests main.cpp ${sources_tests}) + target_link_libraries(all_tests + PRIVATE Catch2::Catch2 ${PROJECT_NAME}) + target_include_directories(all_tests PRIVATE "/usr/include/catch2") + catch_discover_tests(all_tests EXTRA_ARGS "${EXTRA_TEST_ARGS}") +else() # Catch 1.x + if(EXISTS "/usr/include/catch.hpp") + message(STATUS "Catch 1.x found.") + foreach(src ${sources_tests}) + get_filename_component(bin ${src} NAME_WE) + add_executable(${bin} main.cpp ${src}) + target_link_libraries(${bin} + PRIVATE ${PROJECT_NAME}) + add_test(${bin} ${bin} "${EXTRA_TEST_ARGS}") + endforeach() + else() + message(FATAL_ERROR + "Neither Catch 2.x nor Catch 1.x could be found.") + endif() +endif() diff --git a/tests/main.cpp b/tests/main.cpp new file mode 100644 index 0000000..162dfdf --- /dev/null +++ b/tests/main.cpp @@ -0,0 +1,19 @@ +/* This file is part of mastodonpp. + * Copyright © 2020 tastytea + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#define CATCH_CONFIG_MAIN + +#include diff --git a/tests/test_instanciation.cpp b/tests/test_instanciation.cpp new file mode 100644 index 0000000..3fbc0f3 --- /dev/null +++ b/tests/test_instanciation.cpp @@ -0,0 +1,51 @@ +/* This file is part of mastodonpp. + * Copyright © 2020 tastytea + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#include "mastodonpp.hpp" + +#include + +#include +#include + +namespace mastodonpp +{ + +using std::string; + +SCENARIO ("API can be instantiated.") +{ + bool exception = false; + + GIVEN ("One instanciation.") + { + try + { + API masto("example.com", ""); + } + catch (const std::exception &e) + { + exception = true; + } + + THEN ("No exception is thrown") + { + REQUIRE_FALSE(exception); + } + } +} + +} // namespace mastodonpp