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); }