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 # ------------------- diff --git a/src/tests/unit/CMakeLists.txt b/src/tests/unit/CMakeLists.txt new file mode 100644 index 00000000..4b26e416 --- /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 "packetsender_unittests") + +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"