From 2cb8c731fd5bce6a85da1a1e66ee5122918e0554 Mon Sep 17 00:00:00 2001 From: Tomas Gallucci Date: Mon, 2 Mar 2026 15:34:38 -0600 Subject: [PATCH 1/3] make `src/CMakeLists.txt` aware of unit tests --- src/CMakeLists.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index de821e2a..2c5a26f1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -156,6 +156,17 @@ if(APPLE) ) endif() +# ==================== UNIT TESTS (QtTest) ==================== +option(PACKETSENDER_BUILD_TESTS "Build unit tests (QtTest)" OFF) + +if(PACKETSENDER_BUILD_TESTS) + find_package(Qt6 REQUIRED COMPONENTS Test) + + enable_testing() + + add_subdirectory(tests/unit) +endif() + # ------------------- # Packaging # ------------------- From c44fb61ba7caa198a181d62a4bb5b06b42da5746 Mon Sep 17 00:00:00 2001 From: Tomas Gallucci Date: Mon, 2 Mar 2026 15:36:36 -0600 Subject: [PATCH 2/3] add first unit test to project --- src/tests/unit/CMakeLists.txt | 24 +++++++++++++++++ src/tests/unit/translation_test.cpp | 40 +++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 src/tests/unit/CMakeLists.txt create mode 100644 src/tests/unit/translation_test.cpp diff --git a/src/tests/unit/CMakeLists.txt b/src/tests/unit/CMakeLists.txt new file mode 100644 index 00000000..12e80457 --- /dev/null +++ b/src/tests/unit/CMakeLists.txt @@ -0,0 +1,24 @@ +set(CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "Forced architecture" FORCE) + +set(TEST_NAME "translation_test") + +add_executable(${TEST_NAME} + translation_test.cpp + + ../../translations.h + ../../translations.cpp +) + +target_include_directories(${TEST_NAME} PRIVATE + ${CMAKE_SOURCE_DIR} # so #include "translations.h" works cleanly +) + +target_link_libraries(${TEST_NAME} PRIVATE + Qt6::Core + Qt6::Gui + Qt6::Widgets # needed because installLanguage uses QApplication + Qt6::Test +) + +# Make ctest run it +add_test(NAME ${TEST_NAME} COMMAND ${TEST_NAME}) diff --git a/src/tests/unit/translation_test.cpp b/src/tests/unit/translation_test.cpp new file mode 100644 index 00000000..5c70b2ea --- /dev/null +++ b/src/tests/unit/translation_test.cpp @@ -0,0 +1,40 @@ +// +// Created by Tomas Gallucci on 3/2/26. +// + +#include +#include "translations.h" + +class TranslationTest : public QObject +{ + Q_OBJECT + +private slots: + void testInstallLanguage_data() + { + QTest::addColumn("language"); + QTest::addColumn("expected"); + + QTest::newRow("empty → system default") << "" << true; + QTest::newRow("unsupported") << "Klingon" << false; + QTest::newRow("Spanish (supported)") << "Spanish" << true; + QTest::newRow("German (supported)") << "German" << true; + QTest::newRow("French (supported)") << "French" << true; + QTest::newRow("Italian (supported)") << "Italian" << true; + QTest::newRow("Chinese (supported)") << "Chinese" << true; + } + + void testInstallLanguage() + { + QFETCH(QString, language); + QFETCH(bool, expected); + + // This exercises both loadAndInstallTranslators() and the map lookup + bool result = Translations::installLanguage(language); + + QCOMPARE(result, expected); + } +}; + +QTEST_MAIN(TranslationTest) +#include "translation_test.moc" From 9695db24b293be9be3aa1eb7251023492b2edd3a Mon Sep 17 00:00:00 2001 From: Tomas Gallucci Date: Mon, 2 Mar 2026 16:37:01 -0600 Subject: [PATCH 3/3] rename unt test CMake test target --- src/tests/unit/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests/unit/CMakeLists.txt b/src/tests/unit/CMakeLists.txt index 12e80457..4b26e416 100644 --- a/src/tests/unit/CMakeLists.txt +++ b/src/tests/unit/CMakeLists.txt @@ -1,6 +1,6 @@ set(CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "Forced architecture" FORCE) -set(TEST_NAME "translation_test") +set(TEST_NAME "packetsender_unittests") add_executable(${TEST_NAME} translation_test.cpp