diff options
| -rw-r--r-- | .lcovrc | 1 | ||||
| -rw-r--r-- | CMakeLists.txt | 1 | ||||
| -rw-r--r-- | app/CMakeLists.txt | 22 | ||||
| -rw-r--r-- | app/include/turns/app/windows/main.hpp | 23 | ||||
| -rw-r--r-- | app/src/application.cpp | 4 | ||||
| -rw-r--r-- | app/src/windows/main.cpp | 16 | ||||
| -rw-r--r-- | app/tests/windows/main.cpp | 34 | ||||
| -rw-r--r-- | res/CMakeLists.txt | 4 | ||||
| -rw-r--r-- | res/windows/main_window.ui | 2 | ||||
| -rw-r--r-- | res/windows/windows.cmb | 2 | ||||
| -rw-r--r-- | test_support/CMakeLists.txt | 14 | ||||
| -rw-r--r-- | test_support/src/gtk_main.cpp (renamed from res/tests/main.cpp) | 0 |
12 files changed, 117 insertions, 6 deletions
@@ -3,5 +3,6 @@ exclude = /usr/include/* exclude = */catch2/* exclude = */tests/* +exclude = app/src/application.cpp ignore_errors = unused,empty
\ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 2b6ae2a..1a15236 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,6 +54,7 @@ include("Catch") add_subdirectory("app") add_subdirectory("domain") add_subdirectory("res") +add_subdirectory("test_support") # License diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 88dea68..824e107 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -2,6 +2,7 @@ add_library("app" "src/application.cpp" + "src/windows/main.cpp" ) add_library("turns::app" ALIAS "app") @@ -11,6 +12,9 @@ target_compile_options("app" PUBLIC "$<$<CXX_COMPILER_ID:GNU,Clang>:-Wextra>" "$<$<CXX_COMPILER_ID:GNU,Clang>:-Werror>" "$<$<CXX_COMPILER_ID:GNU,Clang>:-pedantic-errors>" + PRIVATE + "$<$<AND:$<CXX_COMPILER_ID:GNU,Clang>,$<CONFIG:Debug>>:-fprofile-arcs>" + "$<$<AND:$<CXX_COMPILER_ID:GNU,Clang>,$<CONFIG:Debug>>:-ftest-coverage>" ) target_include_directories("app" PUBLIC @@ -18,6 +22,8 @@ target_include_directories("app" PUBLIC ) target_link_libraries("app" PUBLIC + "$<$<AND:$<CXX_COMPILER_ID:GNU,Clang>,$<CONFIG:Debug>>:gcov>" + "PkgConfig::adwaita" "PkgConfig::gtkmm" @@ -51,4 +57,18 @@ configure_file("desktop.in" install(FILES "${CMAKE_CURRENT_BINARY_DIR}/turns.desktop" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications" -)
\ No newline at end of file +) + +# Tests + +add_executable("app-tests" + "tests/windows/main.cpp" +) + +target_link_libraries("app-tests" PRIVATE + "Catch2::Catch2" + "turns::app" + "turns::gtk-test-main" +) + +catch_discover_tests("app-tests")
\ No newline at end of file diff --git a/app/include/turns/app/windows/main.hpp b/app/include/turns/app/windows/main.hpp new file mode 100644 index 0000000..9d2e1c3 --- /dev/null +++ b/app/include/turns/app/windows/main.hpp @@ -0,0 +1,23 @@ +#ifndef TURNS_APP_WINDOWS_MAIN_WINDOW_HPP +#define TURNS_APP_WINDOWS_MAIN_WINDOW_HPP + +#include <adwaita.h> +#include <glibmm/refptr.h> +#include <gtkmm/applicationwindow.h> +#include <gtkmm/builder.h> + +namespace turns::app::windows +{ + + struct main : Gtk::ApplicationWindow + { + main(BaseObjectType * base, Glib::RefPtr<Gtk::Builder> const builder); + + private: + AdwApplicationWindow * m_adw; + AdwWindowTitle * m_title; + }; + +} // namespace turns::app + +#endif
\ No newline at end of file diff --git a/app/src/application.cpp b/app/src/application.cpp index 014171e..660782e 100644 --- a/app/src/application.cpp +++ b/app/src/application.cpp @@ -1,5 +1,7 @@ #include "turns/app/application.hpp" +#include "turns/app/windows/main.hpp" + #include <glibmm.h> #include <gtkmm/builder.h> #include <gtkmm/window.h> @@ -18,7 +20,7 @@ namespace turns::app : Gtk::Application{"ch.arknet.Turns"} { auto builder = Gtk::Builder::create_from_resource("/turns/windows/main_window.ui"); - auto main_window = builder->get_widget<Gtk::ApplicationWindow>("main_window"); + auto main_window = Gtk::Builder::get_widget_derived<windows::main>(builder, "main_window"); m_main_window = ADW_APPLICATION_WINDOW(main_window->gobj()); diff --git a/app/src/windows/main.cpp b/app/src/windows/main.cpp new file mode 100644 index 0000000..f8437a6 --- /dev/null +++ b/app/src/windows/main.cpp @@ -0,0 +1,16 @@ +#include "turns/app/windows/main.hpp" + +#include <adwaita.h> + +namespace turns::app::windows +{ + + main::main(BaseObjectType * base, Glib::RefPtr<Gtk::Builder> const builder) + : Gtk::ApplicationWindow{base} + , m_adw{ADW_APPLICATION_WINDOW(gobj())} + , m_title(ADW_WINDOW_TITLE(builder->get_widget<Gtk::Widget>("title")->gobj())) + { + adw_window_title_set_subtitle(m_title, "No active turn-order"); + } + +} // namespace turns::app::windows
\ No newline at end of file diff --git a/app/tests/windows/main.cpp b/app/tests/windows/main.cpp new file mode 100644 index 0000000..d2ad60e --- /dev/null +++ b/app/tests/windows/main.cpp @@ -0,0 +1,34 @@ +#include "turns/app/windows/main.hpp" + +#include <catch2/catch_test_macros.hpp> + +#include <string> + +#include <adwaita.h> +#include <gtkmm/builder.h> +#include <gtkmm/widget.h> + +using namespace std::string_literals; + +namespace turns::app::windows::tests +{ + + TEST_CASE("Newly constructed main window", "[windows]") + { + auto builder = Gtk::Builder::create_from_resource("/turns/windows/main_window.ui"); + auto instance = Gtk::Builder::get_widget_derived<main>(builder, "main_window"); + + SECTION("construction via builder succeeds") + { + REQUIRE(instance); + } + + SECTION("the window title is not empty") + { + auto widget = builder->get_widget<Gtk::Widget>("title"); + auto adw = ADW_WINDOW_TITLE(widget->gobj()); + REQUIRE(adw_window_title_get_subtitle(adw) != ""s); + } + } + +} // namespace turns::app::windows::tests
\ No newline at end of file diff --git a/res/CMakeLists.txt b/res/CMakeLists.txt index 4969787..f823bec 100644 --- a/res/CMakeLists.txt +++ b/res/CMakeLists.txt @@ -29,16 +29,16 @@ add_library("turns::res" ALIAS "res") # Tests add_executable("res-tests" - "tests/main.cpp" "tests/windows.cpp" ) -target_link_libraries("res-tests" +target_link_libraries("res-tests" PRIVATE "Catch2::Catch2" "$<$<CXX_COMPILER_ID:GNU,Clang>:-Wl,--whole-archive>" "turns::res" "$<$<CXX_COMPILER_ID:GNU,Clang>:-Wl,--no-whole-archive>" + "turns::gtk-test-main" ) catch_discover_tests("res-tests")
\ No newline at end of file diff --git a/res/windows/main_window.ui b/res/windows/main_window.ui index 5489996..c9dbf26 100644 --- a/res/windows/main_window.ui +++ b/res/windows/main_window.ui @@ -18,7 +18,7 @@ <child type="top"> <object class="AdwHeaderBar" id="header"> <property name="title-widget"> - <object class="AdwWindowTitle"> + <object class="AdwWindowTitle" id="title"> <property name="title">Turns</property> </object> </property> diff --git a/res/windows/windows.cmb b/res/windows/windows.cmb index e911ec0..8236b71 100644 --- a/res/windows/windows.cmb +++ b/res/windows/windows.cmb @@ -14,7 +14,7 @@ (1,3,"AdwHeaderBar","header",2,None,"top",None,-1,None,None), (1,4,"GtkScrolledWindow",None,2,None,None,None,-1,None,None), (1,5,"GtkListBox","entry_list",4,None,None,None,-1,None,None), - (1,6,"AdwWindowTitle",None,3,None,None,None,-1,None,None), + (1,6,"AdwWindowTitle","title",3,None,None,None,-1,None,None), (1,7,"GtkMenuButton","open_menu",3,None,"start",None,None,None,None), (1,8,"GtkButton","add_participant",3,None,"start",None,None,None,None), (1,9,"(menu)","main_menu",None,None,None,None,-1,None,None), diff --git a/test_support/CMakeLists.txt b/test_support/CMakeLists.txt new file mode 100644 index 0000000..04bb256 --- /dev/null +++ b/test_support/CMakeLists.txt @@ -0,0 +1,14 @@ +add_library("test_support-gtk" OBJECT + "src/gtk_main.cpp" +) + +add_library("turns::gtk-test-main" ALIAS "test_support-gtk") + +target_compile_features("test_support-gtk" PRIVATE + "cxx_std_23" +) + +target_link_libraries("test_support-gtk" PUBLIC + "PkgConfig::adwaita" + "PkgConfig::gtkmm" +)
\ No newline at end of file diff --git a/res/tests/main.cpp b/test_support/src/gtk_main.cpp index 02173f9..02173f9 100644 --- a/res/tests/main.cpp +++ b/test_support/src/gtk_main.cpp |
