diff --git a/CMakeLists.txt b/CMakeLists.txt index 48038a6..93ec00c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,3 +9,8 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|FreeBSD|OpenBSD|NetBSD") install(FILES "${CMAKE_SOURCE_DIR}/share/juci.desktop" DESTINATION "${CMAKE_INSTALL_PREFIX}/share/applications") endif() + +if(ENABLE_TESTING) + enable_testing() + add_subdirectory(tests) +endif() diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000..f9fc5d5 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,57 @@ +add_definitions(-DBOOST_LOG_DYN_LINK) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread -Wall -Wextra -Wno-unused-parameter -Wno-reorder") + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DJUCI_TESTS_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}\\\"") + +if(APPLE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -undefined dynamic_lookup") + link_directories(/usr/local/lib /usr/local/opt/gettext/lib) + include_directories(/usr/local/opt/gettext/include) + set(CMAKE_MACOSX_RPATH 1) + set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/usr/local/lib/pkgconfig:/opt/X11/lib/pkgconfig") +endif() + +find_package(Boost 1.54 COMPONENTS regex system filesystem REQUIRED) +set(LIBCLANGMM_INCLUDE_DIR ../libclangmm/src) + +include(FindPkgConfig) +pkg_check_modules(GTKMM gtkmm-3.0 REQUIRED) + +set(global_includes + ${Boost_INCLUDE_DIRS} + ${GTKMM_INCLUDE_DIRS} + ${GTKSVMM_INCLUDE_DIRS} + ../src + ../tiny-process-library +) + +set(global_libraries + ${GTKMM_LIBRARIES} + ${GTKSVMM_LIBRARIES} + ${Boost_LIBRARIES} +) + +set(stub_sources + stubs/config.cc + stubs/dialogs.cc + stubs/dispatcher.cc + stubs/info.cc + stubs/terminal.cc +) + +include_directories(${global_includes}) + +add_library(stubs_library ${stub_sources}) + +add_executable(cmake_test cmake_test.cc + ../src/filesystem.cc ../src/cmake.cc ../src/project_build.cc) +target_link_libraries(cmake_test ${global_libraries} stubs_library) +add_test(cmake_test cmake_test) + +#Added for example only, and requires display server to work +#However, it is possible to use the Broadway backend if the test is run in a pure terminal environment: +#broadwayd& +#make test +add_executable(example_test example_test.cc) +target_link_libraries(example_test ${global_libraries} stubs_library) +add_test(example_test example_test) diff --git a/tests/cmake_test.cc b/tests/cmake_test.cc new file mode 100644 index 0000000..2276bde --- /dev/null +++ b/tests/cmake_test.cc @@ -0,0 +1,18 @@ +#include +#include "cmake.h" +#include "project_build.h" +#include + +int main() { + CMake cmake(JUCI_TESTS_PATH); + + g_assert(cmake.project_path.filename()=="jucipp"); + + auto functions_parameters=cmake.get_functions_parameters("project"); + g_assert(functions_parameters.at(0).second.at(0)=="juci"); + + g_assert(cmake.get_executable(boost::filesystem::path(JUCI_TESTS_PATH)/"cmake_test.cc").filename()=="cmake_test"); + + auto build=Project::Build::create(JUCI_TESTS_PATH); + g_assert(dynamic_cast(build.get())); +} diff --git a/tests/example_test.cc b/tests/example_test.cc new file mode 100644 index 0000000..2f50b4c --- /dev/null +++ b/tests/example_test.cc @@ -0,0 +1,16 @@ +#include "terminal.h" +#include "info.h" +#include + +//In case one has to test functions that include Terminal::print or Info::print +//Requires display server to work +//However, it is possible to use the Broadway backend if the test is run in a pure terminal environment: +//broadwayd& +//make test + +int main() { + auto app=Gtk::Application::create(); + Terminal::get().print("some message"); + Info::get().print("some message"); + g_assert(true); +} diff --git a/tests/stubs/config.cc b/tests/stubs/config.cc new file mode 100644 index 0000000..a84fe7a --- /dev/null +++ b/tests/stubs/config.cc @@ -0,0 +1,3 @@ +#include "config.h" + +Config::Config() {} diff --git a/tests/stubs/dialogs.cc b/tests/stubs/dialogs.cc new file mode 100644 index 0000000..7ed8fd0 --- /dev/null +++ b/tests/stubs/dialogs.cc @@ -0,0 +1,7 @@ +#include "dialogs.h" + +Dialog::Message::Message(const std::string &text): Gtk::MessageDialog(text, false, Gtk::MessageType::MESSAGE_INFO, Gtk::ButtonsType::BUTTONS_NONE, true) {} + +bool Dialog::Message::on_delete_event(GdkEventAny *event) { + return true; +} diff --git a/tests/stubs/dispatcher.cc b/tests/stubs/dispatcher.cc new file mode 100644 index 0000000..8c04845 --- /dev/null +++ b/tests/stubs/dispatcher.cc @@ -0,0 +1,5 @@ +#include "dispatcher.h" + +Dispatcher::Dispatcher() {} + +Dispatcher::~Dispatcher() {} diff --git a/tests/stubs/info.cc b/tests/stubs/info.cc new file mode 100644 index 0000000..efd146e --- /dev/null +++ b/tests/stubs/info.cc @@ -0,0 +1,5 @@ +#include "info.h" + +Info::Info() {} + +void Info::print(const std::string &text) {} diff --git a/tests/stubs/terminal.cc b/tests/stubs/terminal.cc new file mode 100644 index 0000000..f96f60a --- /dev/null +++ b/tests/stubs/terminal.cc @@ -0,0 +1,15 @@ +#include "terminal.h" + +Terminal::Terminal() {} + +bool Terminal::on_motion_notify_event(GdkEventMotion* motion_event) {return false;} +bool Terminal::on_button_press_event(GdkEventButton* button_event) {return false;} +bool Terminal::on_key_press_event(GdkEventKey *event) {return false;} + +int Terminal::process(const std::string &command, const boost::filesystem::path &path, bool use_pipes) { + return 0; +} + +size_t Terminal::print(const std::string &message, bool bold) { + return 0; +}