summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.lcovrc1
-rw-r--r--CMakeLists.txt1
-rw-r--r--app/CMakeLists.txt22
-rw-r--r--app/include/turns/app/windows/main.hpp23
-rw-r--r--app/src/application.cpp4
-rw-r--r--app/src/windows/main.cpp16
-rw-r--r--app/tests/windows/main.cpp34
-rw-r--r--res/CMakeLists.txt4
-rw-r--r--res/windows/main_window.ui2
-rw-r--r--res/windows/windows.cmb2
-rw-r--r--test_support/CMakeLists.txt14
-rw-r--r--test_support/src/gtk_main.cpp (renamed from res/tests/main.cpp)0
12 files changed, 117 insertions, 6 deletions
diff --git a/.lcovrc b/.lcovrc
index b65ebd3..fd6c8bc 100644
--- a/.lcovrc
+++ b/.lcovrc
@@ -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