diff --git a/.github/workflows/asan.yml b/.github/workflows/asan.yml index 6e4e77de580..3e0f09d5003 100644 --- a/.github/workflows/asan.yml +++ b/.github/workflows/asan.yml @@ -56,7 +56,6 @@ jobs: sudo ./llvm.sh 19 - name: Install Qt ${{ env.QT_VERSION }} - if: false uses: jurplel/install-qt-action@v4 with: version: ${{ env.QT_VERSION }} @@ -73,7 +72,7 @@ jobs: # TODO: disable all warnings - name: CMake run: | - cmake -S . -B cmake.output -DCMAKE_BUILD_TYPE=RelWithDebInfo -DHAVE_RULES=On -DBUILD_TESTS=On -DBUILD_GUI=Off -DUSE_QT6=On -DWITH_QCHART=On -DUSE_MATCHCOMPILER=Verify -DANALYZE_ADDRESS=On -DENABLE_CHECK_INTERNAL=On -DUSE_BOOST=On -DCPPCHK_GLIBCXX_DEBUG=Off -DCMAKE_DISABLE_PRECOMPILE_HEADERS=On -DCMAKE_GLOBAL_AUTOGEN_TARGET=On -DDISABLE_DMAKE=On -DFILESDIR= -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache + cmake -S . -B cmake.output -DCMAKE_BUILD_TYPE=RelWithDebInfo -DHAVE_RULES=On -DBUILD_TESTS=On -DBUILD_GUI=On -DUSE_QT6=On -DWITH_QCHART=On -DUSE_MATCHCOMPILER=Verify -DANALYZE_ADDRESS=On -DENABLE_CHECK_INTERNAL=On -DUSE_BOOST=On -DCPPCHK_GLIBCXX_DEBUG=Off -DCMAKE_DISABLE_PRECOMPILE_HEADERS=On -DCMAKE_GLOBAL_AUTOGEN_TARGET=On -DDISABLE_DMAKE=On -DFILESDIR= -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache env: CC: clang-19 CXX: clang++-19 @@ -86,6 +85,10 @@ jobs: run: | cmake --build cmake.output --target testrunner -- -j $(nproc) + - name: Build GUI tests + run: | + cmake --build cmake.output --target gui-tests -- -j $(nproc) + - name: Run tests run: ./cmake.output/bin/testrunner @@ -93,9 +96,7 @@ jobs: run: | cmake --build cmake.output --target checkcfg -- -j $(nproc) - # TODO: we should use CTest instead to parallelize tests but the start-up overhead will slow things down - name: Run CTest - if: false run: | ctest --test-dir cmake.output --output-on-failure -j$(nproc) diff --git a/.github/workflows/tsan.yml b/.github/workflows/tsan.yml index b681217b3b3..8a38e18eb5d 100644 --- a/.github/workflows/tsan.yml +++ b/.github/workflows/tsan.yml @@ -56,7 +56,6 @@ jobs: sudo ./llvm.sh 19 - name: Install Qt ${{ env.QT_VERSION }} - if: false uses: jurplel/install-qt-action@v4 with: version: ${{ env.QT_VERSION }} @@ -72,7 +71,7 @@ jobs: - name: CMake run: | - cmake -S . -B cmake.output -DCMAKE_BUILD_TYPE=RelWithDebInfo -DHAVE_RULES=On -DBUILD_TESTS=On -DBUILD_GUI=Off -DUSE_QT6=On -DWITH_QCHART=On -DUSE_MATCHCOMPILER=Verify -DANALYZE_THREAD=On -DENABLE_CHECK_INTERNAL=On -DUSE_BOOST=On -DCPPCHK_GLIBCXX_DEBUG=Off -DCMAKE_DISABLE_PRECOMPILE_HEADERS=On -DCMAKE_GLOBAL_AUTOGEN_TARGET=Off -DDISABLE_DMAKE=On -DFILESDIR= -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache + cmake -S . -B cmake.output -DCMAKE_BUILD_TYPE=RelWithDebInfo -DHAVE_RULES=On -DBUILD_TESTS=On -DBUILD_GUI=On -DUSE_QT6=On -DWITH_QCHART=On -DUSE_MATCHCOMPILER=Verify -DANALYZE_THREAD=On -DENABLE_CHECK_INTERNAL=On -DUSE_BOOST=On -DCPPCHK_GLIBCXX_DEBUG=Off -DCMAKE_DISABLE_PRECOMPILE_HEADERS=On -DCMAKE_GLOBAL_AUTOGEN_TARGET=Off -DDISABLE_DMAKE=On -DFILESDIR= -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache env: CC: clang-19 CXX: clang++-19 @@ -85,6 +84,10 @@ jobs: run: | cmake --build cmake.output --target testrunner -- -j $(nproc) + - name: Build GUI tests + run: | + cmake --build cmake.output --target gui-tests -- -j $(nproc) + - name: Run tests run: ./cmake.output/bin/testrunner @@ -92,9 +95,8 @@ jobs: run: | cmake --build cmake.output --target checkcfg -- -j $(nproc) - # TODO: we should use CTest instead to parallelize tests but the start-up overhead will slow things down - name: Run CTest - if: false + if: false # TODO: test-filelist fails with data race in pthread_cond_destroy run: | ctest --test-dir cmake.output --output-on-failure -j$(nproc) diff --git a/.github/workflows/ubsan.yml b/.github/workflows/ubsan.yml index 921cbaee27c..fcdf322b0de 100644 --- a/.github/workflows/ubsan.yml +++ b/.github/workflows/ubsan.yml @@ -85,6 +85,10 @@ jobs: run: | cmake --build cmake.output --target testrunner -- -j $(nproc) + - name: Build GUI tests + run: | + cmake --build cmake.output --target gui-tests -- -j $(nproc) + - name: Run tests run: ./cmake.output/bin/testrunner @@ -92,9 +96,7 @@ jobs: run: | cmake --build cmake.output --target checkcfg -- -j $(nproc) - # TODO: we should use CTest instead to parallelize tests but the start-up overhead will slow things down - name: Run CTest - if: false run: | ctest --test-dir cmake.output --output-on-failure -j$(nproc) diff --git a/gui/test/CMakeLists.txt b/gui/test/CMakeLists.txt index 52f3d95023b..b2e63c08f86 100644 --- a/gui/test/CMakeLists.txt +++ b/gui/test/CMakeLists.txt @@ -1,3 +1,5 @@ +add_custom_target(gui-tests) + add_subdirectory(cppchecklibrarydata) add_subdirectory(filelist) add_subdirectory(projectfile) diff --git a/gui/test/cppchecklibrarydata/CMakeLists.txt b/gui/test/cppchecklibrarydata/CMakeLists.txt index 94e661195cd..b27e270ffc6 100644 --- a/gui/test/cppchecklibrarydata/CMakeLists.txt +++ b/gui/test/cppchecklibrarydata/CMakeLists.txt @@ -19,4 +19,6 @@ endif() if (REGISTER_GUI_TESTS) add_test(NAME test-cppchecklibrarydata COMMAND $) -endif() \ No newline at end of file +endif() + +add_dependencies(gui-tests test-cppchecklibrarydata) \ No newline at end of file diff --git a/gui/test/filelist/CMakeLists.txt b/gui/test/filelist/CMakeLists.txt index 4131b3316e6..ecc8ebabfe6 100644 --- a/gui/test/filelist/CMakeLists.txt +++ b/gui/test/filelist/CMakeLists.txt @@ -22,4 +22,6 @@ endif() if (REGISTER_GUI_TESTS) add_test(NAME test-filelist COMMAND $) -endif() \ No newline at end of file +endif() + +add_dependencies(gui-tests test-filelist) \ No newline at end of file diff --git a/gui/test/projectfile/CMakeLists.txt b/gui/test/projectfile/CMakeLists.txt index 1e87916f6d4..60d3dcd65ad 100644 --- a/gui/test/projectfile/CMakeLists.txt +++ b/gui/test/projectfile/CMakeLists.txt @@ -17,4 +17,6 @@ endif() if (REGISTER_GUI_TESTS) add_test(NAME test-projectfile COMMAND $) -endif() \ No newline at end of file +endif() + +add_dependencies(gui-tests test-projectfile) \ No newline at end of file diff --git a/gui/test/resultstree/CMakeLists.txt b/gui/test/resultstree/CMakeLists.txt index 7e788499965..bc7f42be2e4 100644 --- a/gui/test/resultstree/CMakeLists.txt +++ b/gui/test/resultstree/CMakeLists.txt @@ -1,4 +1,11 @@ -qt_wrap_cpp(test-resultstree_SRC testresultstree.h ${CMAKE_SOURCE_DIR}/gui/resultstree.h) +qt_wrap_cpp(test-resultstree_SRC + testresultstree.h + ${CMAKE_SOURCE_DIR}/gui/resultstree.h + ${CMAKE_SOURCE_DIR}/gui/applicationlist.h + ${CMAKE_SOURCE_DIR}/gui/projectfile.h + ${CMAKE_SOURCE_DIR}/gui/threadhandler.h + ${CMAKE_SOURCE_DIR}/gui/threadresult.h +) add_custom_target(build-resultstree-deps SOURCES ${test-resultstree_SRC}) add_dependencies(gui-build-deps build-resultstree-deps) add_executable(test-resultstree @@ -19,9 +26,13 @@ target_link_libraries(test-resultstree ${QT_CORE_LIB} ${QT_GUI_LIB} ${QT_WIDGETS if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") # Q_UNUSED() in generated code target_compile_options_safe(test-resultstree -Wno-extra-semi-stmt) + # caused by mocks + target_compile_options_safe(test-resultstree -Wno-missing-noreturn) endif() if (REGISTER_GUI_TESTS) # TODO: does not work in the CI # add_test(NAME test-resultstree COMMAND $) endif() + +add_dependencies(gui-tests test-resultstree) diff --git a/gui/test/resultstree/testresultstree.cpp b/gui/test/resultstree/testresultstree.cpp index 003fce9b445..de60cb6e3bd 100644 --- a/gui/test/resultstree/testresultstree.cpp +++ b/gui/test/resultstree/testresultstree.cpp @@ -66,6 +66,7 @@ class TestReport : public Report { }; // Mock GUI... +ProjectFile::ProjectFile(QObject *parent) : QObject(parent) {} ProjectFile *ProjectFile::mActiveProject; void ProjectFile::addSuppression(const SuppressionList::Suppression & /*unused*/) {} QString ProjectFile::getWarningTags(std::size_t /*unused*/) const { @@ -78,12 +79,22 @@ bool ProjectFile::write(const QString & /*unused*/) { std::string severityToString(Severity severity) { return std::to_string((int)severity); } +ApplicationList::ApplicationList(QObject *parent) : QObject(parent) {} +ApplicationList::~ApplicationList() = default; int ApplicationList::getApplicationCount() const { return 0; } +ThreadHandler::ThreadHandler(QObject *parent) : QObject(parent) {} +ThreadHandler::~ThreadHandler() = default; bool ThreadHandler::isChecking() const { return false; } +void ThreadHandler::stop() { + throw 1; +} +void ThreadHandler::threadDone() { + throw 1; +} Application& ApplicationList::getApplication(const int /*unused*/) { throw 1; } @@ -101,6 +112,15 @@ QString XmlReport::unquoteMessage(const QString &message) { return message; } XmlReport::XmlReport(const QString& filename) : Report(filename) {} +void ThreadResult::fileChecked(const QString & /*unused*/) { + throw 1; +} +void ThreadResult::reportOut(const std::string & /*unused*/, Color /*unused*/) { + throw 1; +} +void ThreadResult::reportErr(const ErrorMessage & /*unused*/) { + throw 1; +} // Mock LIB... bool Path::isHeader(std::string const& /*unused*/) { diff --git a/gui/test/translationhandler/CMakeLists.txt b/gui/test/translationhandler/CMakeLists.txt index 4cfc29f170f..e595755721e 100644 --- a/gui/test/translationhandler/CMakeLists.txt +++ b/gui/test/translationhandler/CMakeLists.txt @@ -18,4 +18,6 @@ endif() if (REGISTER_GUI_TESTS) # TODO: requires X session - run with QT_QPA_PLATFORM=offscreen? #add_test(NAME test-translationhandler COMMAND $) -endif() \ No newline at end of file +endif() + +add_dependencies(gui-tests test-translationhandler) \ No newline at end of file diff --git a/gui/test/xmlreportv2/CMakeLists.txt b/gui/test/xmlreportv2/CMakeLists.txt index b1c66660d12..478e527ec5d 100644 --- a/gui/test/xmlreportv2/CMakeLists.txt +++ b/gui/test/xmlreportv2/CMakeLists.txt @@ -35,3 +35,5 @@ endif() if (REGISTER_GUI_TESTS) add_test(NAME test-xmlreportv2 COMMAND $) endif() + +add_dependencies(gui-tests test-xmlreportv2)