From 6cd6efaca918d3f0b7fc1e542a4a5d1498b8a784 Mon Sep 17 00:00:00 2001 From: Simon De Backer Date: Tue, 8 Dec 2020 12:18:20 +0100 Subject: [PATCH] Add Catch2 and Google Test on Cmake ToDo: - Add compiling QElectroTech on Cmake (help needed) - more Tests? - Qt Test - Boost Test to test run qtcreator File > open => CMakeLists.txt --- CMakeLists.txt | 50 ++++++++++++++++++++++ tests/.gitignore | 73 ++++++++++++++++++++++++++++++++ tests/CMakeLists.txt | 28 ++++++++++++ tests/catch/.clang-format | 67 +++++++++++++++++++++++++++++ tests/catch/.gitignore | 73 ++++++++++++++++++++++++++++++++ tests/catch/CMakeLists.txt | 72 +++++++++++++++++++++++++++++++ tests/catch/main.cpp | 9 ++++ tests/catch/tst_My_test.cpp | 22 ++++++++++ tests/googletest/.clang-format | 67 +++++++++++++++++++++++++++++ tests/googletest/.gitignore | 73 ++++++++++++++++++++++++++++++++ tests/googletest/CMakeLists.txt | 61 ++++++++++++++++++++++++++ tests/googletest/main.cpp | 15 +++++++ tests/googletest/tst_My_test.cpp | 5 +++ 13 files changed, 615 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 tests/.gitignore create mode 100644 tests/CMakeLists.txt create mode 100644 tests/catch/.clang-format create mode 100644 tests/catch/.gitignore create mode 100644 tests/catch/CMakeLists.txt create mode 100644 tests/catch/main.cpp create mode 100644 tests/catch/tst_My_test.cpp create mode 100644 tests/googletest/.clang-format create mode 100644 tests/googletest/.gitignore create mode 100644 tests/googletest/CMakeLists.txt create mode 100644 tests/googletest/main.cpp create mode 100644 tests/googletest/tst_My_test.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..7365418f4 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,50 @@ +# Copyright 2006 The QElectroTech Team +# This file is part of QElectroTech. +# +# QElectroTech is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# QElectroTech is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with QElectroTech. If not, see . + +cmake_minimum_required(VERSION 3.5) + +message( + "_____________________________________________________________________" + "\nCopyright 2006 The QElectroTech Team" + "\nThis file is part of QElectroTech." + + "\n\nQElectroTech is free software: you can redistribute it and/or modify" + "\nit under the terms of the GNU General Public License as published by" + "\nthe Free Software Foundation, either version 2 of the License, or" + "\n(at your option) any later version." + + "\nQElectroTech is distributed in the hope that it will be useful," + "\nbut WITHOUT ANY WARRANTY; without even the implied warranty of" + "\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the" + "\nGNU General Public License for more details." + + "\n\nYou should have received a copy of the GNU General Public License" + "\nalong with QElectroTech. If not, see .\n" + "_____________________________________________________________________") +project(qelectrotech + VERSION 0.8.0 + DESCRIPTION "QET is a CAD/CAE editor focusing on schematics drawing features." + HOMEPAGE_URL "https://qelectrotech.org/" + LANGUAGES CXX) + +set(QET_DIR ${PROJECT_SOURCE_DIR}) + +message("PROJECT_NAME: " ${PROJECT_NAME}) +message("PROJECT_SOURCE_DIR: " ${PROJECT_SOURCE_DIR}) +message("QET_DIR: " ${QET_DIR}) + +# Add sub directories +add_subdirectory(tests) diff --git a/tests/.gitignore b/tests/.gitignore new file mode 100644 index 000000000..fab7372d7 --- /dev/null +++ b/tests/.gitignore @@ -0,0 +1,73 @@ +# This file is used to ignore files which are generated +# ---------------------------------------------------------------------------- + +*~ +*.autosave +*.a +*.core +*.moc +*.o +*.obj +*.orig +*.rej +*.so +*.so.* +*_pch.h.cpp +*_resource.rc +*.qm +.#* +*.*# +core +!core/ +tags +.DS_Store +.directory +*.debug +Makefile* +*.prl +*.app +moc_*.cpp +ui_*.h +qrc_*.cpp +Thumbs.db +*.res +*.rc +/.qmake.cache +/.qmake.stash + +# qtcreator generated files +*.pro.user* + +# xemacs temporary files +*.flc + +# Vim temporary files +.*.swp + +# Visual Studio generated files +*.ib_pdb_index +*.idb +*.ilk +*.pdb +*.sln +*.suo +*.vcproj +*vcproj.*.*.user +*.ncb +*.sdf +*.opensdf +*.vcxproj +*vcxproj.* + +# MinGW generated files +*.Debug +*.Release + +# Python byte code +*.pyc + +# Binaries +# -------- +*.dll +*.exe + diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 000000000..753d0a39b --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,28 @@ +# Copyright 2006 The QElectroTech Team +# This file is part of QElectroTech. +# +# QElectroTech is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# QElectroTech is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with QElectroTech. If not, see . + +cmake_minimum_required(VERSION 3.5) + +message("_____________________________________________________________________") +project(unittests LANGUAGES CXX) + +message("PROJECT_NAME: " ${PROJECT_NAME}) +message("PROJECT_SOURCE_DIR: " ${PROJECT_SOURCE_DIR}) +message("QET_DIR: " ${QET_DIR}) + +# Add sub directories +add_subdirectory(catch) +add_subdirectory(googletest) diff --git a/tests/catch/.clang-format b/tests/catch/.clang-format new file mode 100644 index 000000000..3f1da8525 --- /dev/null +++ b/tests/catch/.clang-format @@ -0,0 +1,67 @@ +--- +BasedOnStyle: LLVM +AlignAfterOpenBracket: AlwaysBreak +AlignConsecutiveMacros: 'true' +AlignConsecutiveAssignments: 'true' +AlignConsecutiveDeclarations: 'true' +AlignEscapedNewlines: Right +AlignOperands: 'true' +AlignTrailingComments: 'true' +AllowAllArgumentsOnNextLine: 'false' +AllowAllConstructorInitializersOnNextLine: 'true' +AllowAllParametersOfDeclarationOnNextLine: 'true' +AllowShortBlocksOnASingleLine: 'true' +AllowShortCaseLabelsOnASingleLine: 'true' +AllowShortFunctionsOnASingleLine: All +AllowShortIfStatementsOnASingleLine: Always +AllowShortLambdasOnASingleLine: All +AllowShortLoopsOnASingleLine: 'true' +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: 'true' +AlwaysBreakTemplateDeclarations: 'Yes' +BinPackArguments: 'false' +BinPackParameters: 'false' +BreakAfterJavaFieldAnnotations: 'true' +BreakBeforeBinaryOperators: NonAssignment +BreakBeforeBraces: Allman +BreakBeforeTernaryOperators: 'false' +BreakConstructorInitializers: AfterColon +BreakInheritanceList: AfterColon +BreakStringLiterals: 'true' +ColumnLimit: '80' +CompactNamespaces: 'false' +ConstructorInitializerAllOnOneLineOrOnePerLine: 'true' +Cpp11BracedListStyle: 'true' +FixNamespaceComments: 'true' +IncludeBlocks: Regroup +IndentCaseLabels: 'false' +IndentPPDirectives: AfterHash +IndentWidth: '4' +JavaScriptWrapImports: 'true' +Language: Cpp +MaxEmptyLinesToKeep: '1' +NamespaceIndentation: All +PointerAlignment: Left +ReflowComments: 'true' +SortIncludes: 'true' +SortUsingDeclarations: 'true' +SpaceAfterCStyleCast: 'true' +SpaceAfterLogicalNot: 'true' +SpaceAfterTemplateKeyword: 'true' +SpaceBeforeAssignmentOperators: 'true' +SpaceBeforeCpp11BracedList: 'true' +SpaceBeforeCtorInitializerColon: 'true' +SpaceBeforeInheritanceColon: 'true' +SpaceBeforeParens: ControlStatements +SpaceBeforeRangeBasedForLoopColon: 'true' +SpaceInEmptyParentheses: 'false' +SpacesInAngles: 'false' +SpacesInCStyleCastParentheses: 'false' +SpacesInContainerLiterals: 'false' +SpacesInParentheses: 'false' +SpacesInSquareBrackets: 'false' +Standard: Cpp11 +TabWidth: '4' +UseTab: Always + +... diff --git a/tests/catch/.gitignore b/tests/catch/.gitignore new file mode 100644 index 000000000..fab7372d7 --- /dev/null +++ b/tests/catch/.gitignore @@ -0,0 +1,73 @@ +# This file is used to ignore files which are generated +# ---------------------------------------------------------------------------- + +*~ +*.autosave +*.a +*.core +*.moc +*.o +*.obj +*.orig +*.rej +*.so +*.so.* +*_pch.h.cpp +*_resource.rc +*.qm +.#* +*.*# +core +!core/ +tags +.DS_Store +.directory +*.debug +Makefile* +*.prl +*.app +moc_*.cpp +ui_*.h +qrc_*.cpp +Thumbs.db +*.res +*.rc +/.qmake.cache +/.qmake.stash + +# qtcreator generated files +*.pro.user* + +# xemacs temporary files +*.flc + +# Vim temporary files +.*.swp + +# Visual Studio generated files +*.ib_pdb_index +*.idb +*.ilk +*.pdb +*.sln +*.suo +*.vcproj +*vcproj.*.*.user +*.ncb +*.sdf +*.opensdf +*.vcxproj +*vcxproj.* + +# MinGW generated files +*.Debug +*.Release + +# Python byte code +*.pyc + +# Binaries +# -------- +*.dll +*.exe + diff --git a/tests/catch/CMakeLists.txt b/tests/catch/CMakeLists.txt new file mode 100644 index 000000000..26b75e338 --- /dev/null +++ b/tests/catch/CMakeLists.txt @@ -0,0 +1,72 @@ +# Copyright 2006 The QElectroTech Team +# This file is part of QElectroTech. +# +# QElectroTech is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# QElectroTech is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with QElectroTech. If not, see . + +cmake_minimum_required(VERSION 3.5) + +message("_____________________________________________________________________") +project(C_unittests LANGUAGES CXX) + +if(DEFINED ENV{QET_DIR}) + set(QET_DIR "../..") + message("QET_DIR is not set, assuming QET is ../..") +endif() + +message("PROJECT_NAME: " ${PROJECT_NAME}) +message("PROJECT_SOURCE_DIR: " ${PROJECT_SOURCE_DIR}) +message("QET_DIR: " ${QET_DIR}) + +SET(CMAKE_CXX_STANDARD 17) + +find_package(Qt5Gui REQUIRED) +find_package(Qt5Xml REQUIRED) +find_package(Qt5Widgets REQUIRED) + +Include(FetchContent) + +FetchContent_Declare( + Catch2 + GIT_REPOSITORY https://github.com/catchorg/Catch2.git + GIT_TAG v2.13.1) + +FetchContent_MakeAvailable(Catch2) + +add_executable( + ${PROJECT_NAME} + tst_My_test.cpp + main.cpp + ${QET_DIR}/sources/borderproperties.h + ${QET_DIR}/sources/borderproperties.cpp) + +target_link_libraries( + ${PROJECT_NAME} + PUBLIC + Catch2::Catch2 + PRIVATE + Qt5::Gui + Qt5::Xml + Qt5::Widgets) + +if (DEFINED ENV{CATCH_INCLUDE_DIR}) + set(CATCH_INCLUDE_DIR $ENV{CATCH_INCLUDE_DIR}) +else () + set(CATCH_INCLUDE_DIR "") # set by Qt Creator wizard +endif () +if (CATCH_INCLUDE_DIR STREQUAL "") + message("CATCH_INCLUDE_DIR is not set," + "assuming Catch2 can be found automatically in your system") +elseif (EXISTS ${CATCH_INCLUDE_DIR}) + include_directories(${CATCH_INCLUDE_DIR}) +endif () diff --git a/tests/catch/main.cpp b/tests/catch/main.cpp new file mode 100644 index 000000000..d21ec02b2 --- /dev/null +++ b/tests/catch/main.cpp @@ -0,0 +1,9 @@ +#define CATCH_CONFIG_RUNNER +#include +#include + +int main(int argc, char** argv) +{ + QGuiApplication app(argc, argv); + return Catch::Session().run(argc, argv); +} diff --git a/tests/catch/tst_My_test.cpp b/tests/catch/tst_My_test.cpp new file mode 100644 index 000000000..5d2303511 --- /dev/null +++ b/tests/catch/tst_My_test.cpp @@ -0,0 +1,22 @@ +#include "../../sources/borderproperties.h" + +#include + +TEST_CASE("My first test with Catch2", "[fancy]") { REQUIRE(0 == 0); } + +TEST_CASE("BorderProperties") +{ + int var = 5; + BorderProperties My; + My.columns_count = var; + My.columns_header_height = var; + + CHECK(My.columns_count - 1 == var); // test zal falen maar test de vogende + CHECK( + My.columns_header_height - 1 + == var); // test zal falen maar test de vogende + REQUIRE(0 == 0); + REQUIRE(1 == 0); // test zal falen en stopt + REQUIRE(0 == 0); // not testit + REQUIRE(1 == 0); // not testit +} diff --git a/tests/googletest/.clang-format b/tests/googletest/.clang-format new file mode 100644 index 000000000..3f1da8525 --- /dev/null +++ b/tests/googletest/.clang-format @@ -0,0 +1,67 @@ +--- +BasedOnStyle: LLVM +AlignAfterOpenBracket: AlwaysBreak +AlignConsecutiveMacros: 'true' +AlignConsecutiveAssignments: 'true' +AlignConsecutiveDeclarations: 'true' +AlignEscapedNewlines: Right +AlignOperands: 'true' +AlignTrailingComments: 'true' +AllowAllArgumentsOnNextLine: 'false' +AllowAllConstructorInitializersOnNextLine: 'true' +AllowAllParametersOfDeclarationOnNextLine: 'true' +AllowShortBlocksOnASingleLine: 'true' +AllowShortCaseLabelsOnASingleLine: 'true' +AllowShortFunctionsOnASingleLine: All +AllowShortIfStatementsOnASingleLine: Always +AllowShortLambdasOnASingleLine: All +AllowShortLoopsOnASingleLine: 'true' +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: 'true' +AlwaysBreakTemplateDeclarations: 'Yes' +BinPackArguments: 'false' +BinPackParameters: 'false' +BreakAfterJavaFieldAnnotations: 'true' +BreakBeforeBinaryOperators: NonAssignment +BreakBeforeBraces: Allman +BreakBeforeTernaryOperators: 'false' +BreakConstructorInitializers: AfterColon +BreakInheritanceList: AfterColon +BreakStringLiterals: 'true' +ColumnLimit: '80' +CompactNamespaces: 'false' +ConstructorInitializerAllOnOneLineOrOnePerLine: 'true' +Cpp11BracedListStyle: 'true' +FixNamespaceComments: 'true' +IncludeBlocks: Regroup +IndentCaseLabels: 'false' +IndentPPDirectives: AfterHash +IndentWidth: '4' +JavaScriptWrapImports: 'true' +Language: Cpp +MaxEmptyLinesToKeep: '1' +NamespaceIndentation: All +PointerAlignment: Left +ReflowComments: 'true' +SortIncludes: 'true' +SortUsingDeclarations: 'true' +SpaceAfterCStyleCast: 'true' +SpaceAfterLogicalNot: 'true' +SpaceAfterTemplateKeyword: 'true' +SpaceBeforeAssignmentOperators: 'true' +SpaceBeforeCpp11BracedList: 'true' +SpaceBeforeCtorInitializerColon: 'true' +SpaceBeforeInheritanceColon: 'true' +SpaceBeforeParens: ControlStatements +SpaceBeforeRangeBasedForLoopColon: 'true' +SpaceInEmptyParentheses: 'false' +SpacesInAngles: 'false' +SpacesInCStyleCastParentheses: 'false' +SpacesInContainerLiterals: 'false' +SpacesInParentheses: 'false' +SpacesInSquareBrackets: 'false' +Standard: Cpp11 +TabWidth: '4' +UseTab: Always + +... diff --git a/tests/googletest/.gitignore b/tests/googletest/.gitignore new file mode 100644 index 000000000..fab7372d7 --- /dev/null +++ b/tests/googletest/.gitignore @@ -0,0 +1,73 @@ +# This file is used to ignore files which are generated +# ---------------------------------------------------------------------------- + +*~ +*.autosave +*.a +*.core +*.moc +*.o +*.obj +*.orig +*.rej +*.so +*.so.* +*_pch.h.cpp +*_resource.rc +*.qm +.#* +*.*# +core +!core/ +tags +.DS_Store +.directory +*.debug +Makefile* +*.prl +*.app +moc_*.cpp +ui_*.h +qrc_*.cpp +Thumbs.db +*.res +*.rc +/.qmake.cache +/.qmake.stash + +# qtcreator generated files +*.pro.user* + +# xemacs temporary files +*.flc + +# Vim temporary files +.*.swp + +# Visual Studio generated files +*.ib_pdb_index +*.idb +*.ilk +*.pdb +*.sln +*.suo +*.vcproj +*vcproj.*.*.user +*.ncb +*.sdf +*.opensdf +*.vcxproj +*vcxproj.* + +# MinGW generated files +*.Debug +*.Release + +# Python byte code +*.pyc + +# Binaries +# -------- +*.dll +*.exe + diff --git a/tests/googletest/CMakeLists.txt b/tests/googletest/CMakeLists.txt new file mode 100644 index 000000000..c52a8046f --- /dev/null +++ b/tests/googletest/CMakeLists.txt @@ -0,0 +1,61 @@ +# Copyright 2006 The QElectroTech Team +# This file is part of QElectroTech. +# +# QElectroTech is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# QElectroTech is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with QElectroTech. If not, see . + +cmake_minimum_required(VERSION 3.5) + +message("_____________________________________________________________________") +project(G_unittests LANGUAGES CXX) + +if(DEFINED ENV{QET_DIR}) + set(QET_DIR "../..") + message("QET_DIR is not set, assuming QET is ../..") +endif() + +message("PROJECT_NAME: " ${PROJECT_NAME}) +message("PROJECT_SOURCE_DIR: " ${PROJECT_SOURCE_DIR}) +message("QET_DIR: " ${QET_DIR}) + +SET(CMAKE_CXX_STANDARD 17) + +find_package(Qt5Gui REQUIRED) +find_package(Qt5Xml REQUIRED) +find_package(Qt5Widgets REQUIRED) + +Include(FetchContent) + +FetchContent_Declare( + GTest + GIT_REPOSITORY https://github.com/google/googletest.git + GIT_TAG release-1.10.0) + +FetchContent_MakeAvailable(GTest) + +add_executable( + ${PROJECT_NAME} + tst_My_test.cpp + main.cpp + ${QET_DIR}/sources/borderproperties.h + ${QET_DIR}/sources/borderproperties.cpp) + +target_link_libraries( + ${PROJECT_NAME} + PUBLIC + gtest gtest_main + PRIVATE + Qt5::Gui + Qt5::Xml + Qt5::Widgets) + diff --git a/tests/googletest/main.cpp b/tests/googletest/main.cpp new file mode 100644 index 000000000..218f98008 --- /dev/null +++ b/tests/googletest/main.cpp @@ -0,0 +1,15 @@ +#include +#include + +int main(int argc, char** argv) +{ + QGuiApplication app(argc, argv); + + // disable the whole debug output (we want only the output from gtest) + // Debug::instance()->setDebugLevelLogFile(Debug::DebugLevel_t::Nothing); + // Debug::instance()->setDebugLevelStderr(Debug::DebugLevel_t::Nothing); + + // init gtest and run all tests + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/tests/googletest/tst_My_test.cpp b/tests/googletest/tst_My_test.cpp new file mode 100644 index 000000000..a420bb618 --- /dev/null +++ b/tests/googletest/tst_My_test.cpp @@ -0,0 +1,5 @@ +#include "../../sources/borderproperties.h" + +#include + +TEST(googletest, sample_test) { EXPECT_EQ(1, 1); }