diff --git a/jpseditor.pro b/jpseditor.pro
index aad960dfffbc4b102a7f0f1c6fb026f25101d01b..6696320b510dd6062bd62b726680adc15a070eb4 100644
--- a/jpseditor.pro
+++ b/jpseditor.pro
@@ -4,3 +4,4 @@ CONFIG+=ordered
 
 SUBDIRS = \
     src \
+    tests \
diff --git a/tests/TestMain.cpp b/tests/TestMain.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..46172794a71089321ce8cec51e19003fb1283905
--- /dev/null
+++ b/tests/TestMain.cpp
@@ -0,0 +1,5 @@
+#define CATCH_CONFIG_MAIN
+
+#include <catch2/catch.hpp>
+
+
diff --git a/tests/datamanager_tests.cpp b/tests/datamanager_tests.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d97e8bda3263d9b4598b11d824247aca5b75f8e1
--- /dev/null
+++ b/tests/datamanager_tests.cpp
@@ -0,0 +1,181 @@
+#include <catch2/catch.hpp>
+#include "../src/datamanager.h"
+#include "../src/jpsLineItem.h"
+#include "../src/jpsregion.h"
+#include "../src/jpslandmark.h"
+
+
+jpsRegion create_testregion (int &id);
+
+
+
+TEST_CASE("get functions")
+{
+    jpsDatamanager *testobject = new jpsDatamanager;
+
+    SECTION("get roomlist")
+    {
+        QList<jpsRoom *> testroomlist;
+
+        //test the length of the roomlist with get_roomlist
+        testroomlist = testobject->get_roomlist();
+        REQUIRE(testroomlist.length() == 0);
+
+        //add a room with new_room and check the length again
+        testobject->new_room();
+        testroomlist = testobject->get_roomlist();
+        REQUIRE(testroomlist.length() == 1);
+
+        testobject->new_room();
+        testroomlist = testobject->get_roomlist();
+        REQUIRE(testroomlist.length() == 2);
+
+    }
+
+    SECTION("get crossingList")            
+    {
+        //test the length of the crossingList with get_crossingList
+        REQUIRE(testobject->get_crossingList().length() == 0);
+
+
+        // add a crossingpiont (door) to the list
+        QGraphicsLineItem *testline = new  QGraphicsLineItem(qreal(0),qreal(0),qreal(2),qreal(0));
+        jpsLineItem *testLineItem_1 = new jpsLineItem(testline);
+        testLineItem_1->set_Door();
+        testobject->new_crossing(testLineItem_1);
+        REQUIRE(testobject->get_crossingList().length() == 1);
+
+
+        testline->setLine(qreal(2),qreal(2),qreal(4),qreal(2));
+        jpsLineItem *testLineItem_2 = new jpsLineItem(testline);
+        testLineItem_2->set_Door();
+        testobject->new_crossing(testLineItem_2);
+        REQUIRE(testobject->get_crossingList().length() == 2);
+
+    }
+
+    SECTION("get obstacellist")
+    {
+        //test the length of the obstaclelist with get_obstacleist
+        REQUIRE(testobject->get_obstaclelist().length() == 0);
+
+        //add a obstacle and test the length again
+        testobject->new_obstacle();
+        REQUIRE(testobject->get_obstaclelist().length() == 1);
+
+        testobject->new_obstacle();
+        REQUIRE(testobject->get_obstaclelist().length() == 2);
+    }
+
+    SECTION("get exitlist")
+    {
+        //test the length of the exitlist with get_exitlist
+        REQUIRE(testobject->get_exitList().length() == 0);
+
+        //add a exit and test the length again
+        QGraphicsLineItem *testline = new  QGraphicsLineItem(qreal(0),qreal(0),qreal(2),qreal(0));
+        jpsLineItem *testLineItem_1 = new jpsLineItem(testline);
+        testobject->new_exit(testLineItem_1);
+
+        REQUIRE(testobject->get_exitList().length() == 1);
+
+
+        testline->setLine(qreal(2),qreal(2),qreal(4),qreal(2));
+        jpsLineItem *testLineItem_2 = new jpsLineItem(testline);
+        testobject->new_exit(testLineItem_2);
+
+        REQUIRE(testobject->get_exitList().length() == 2);
+
+
+
+    }
+
+
+
+
+    SECTION("get all connections")
+    {
+        //test the length of the connection list with GetAllConnections
+        REQUIRE(testobject->GetAllConnections().length() == 0);
+
+        //add a connection and test the length again
+        jpsConnection *testconnection_1 = new jpsConnection;
+        testobject->NewConnection(testconnection_1);
+        REQUIRE(testobject->GetAllConnections().length() == 1);
+
+        jpsConnection *testconnection_2 =new jpsConnection;
+        testobject->NewConnection(testconnection_2);
+        REQUIRE(testobject->GetAllConnections().length() == 2);
+
+
+    }
+
+    SECTION("get regions and get regions counter")
+    {
+        int testid = 1;
+        REQUIRE(testobject->GetRegionCounter() == 0);
+        REQUIRE(testobject->GetRegions().length() == testobject->GetRegionCounter());
+
+        jpsRegion testregion_1 = create_testregion(testid);
+        testid ++;
+        testobject->NewRegion(&testregion_1);
+        REQUIRE(testobject->GetRegionCounter() == 1);
+        REQUIRE(testobject->GetRegions().length() == testobject->GetRegionCounter());
+
+        jpsRegion testregion_2 = create_testregion(testid);
+        testobject->NewRegion(&testregion_2);
+        REQUIRE(testobject->GetRegionCounter() == 2);
+        REQUIRE(testobject->GetRegions().length() == testobject->GetRegionCounter());
+    }
+
+    SECTION("get landmarks")
+    {
+        //test the lenght if the landmark list with get_landmarks
+        REQUIRE(testobject->get_landmarks().length() == 0);
+
+        //create and and add a landmark to the list. Then test it again
+        jpsLandmark *testlandmark_1 = new jpsLandmark;
+        testobject->new_landmark(testlandmark_1);
+        REQUIRE(testobject->get_landmarks().length() == 1);
+
+        jpsLandmark *testlandmark_2 = new jpsLandmark;
+        testobject->new_landmark(testlandmark_2);
+        REQUIRE(testobject->get_landmarks().length() == 2);
+
+//        delete testlandmark_1;
+//        delete testlandmark_2;
+
+    }
+
+
+}
+
+
+
+
+jpsRegion create_testregion (int &id)
+{
+    const QString testcaption = "testcaption";
+    const QString testtype = "Regnion";
+    const QPointF testpoint (0,0);
+    const qreal testqreal= 0;
+    jpsRegion testregion = jpsRegion(id,testcaption,testpoint,testqreal,testqreal);
+
+    return testregion;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/tests.pro b/tests/tests.pro
new file mode 100644
index 0000000000000000000000000000000000000000..c630b29bf381102d123d268db91ae987e43c86b4
--- /dev/null
+++ b/tests/tests.pro
@@ -0,0 +1,102 @@
+QT       += core gui
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TARGET = JPSeditorUnitTests
+TEMPLATE = app
+
+CONFIG += console
+CONFIG += c++11
+
+FORMS += \
+    ../src/forms/mainwindow.ui \
+    ../src/forms/roomwidget.ui \
+    ../src/forms/widgetlandmark.ui \
+    ../src/forms/widgetsettings.ui \
+    ../src/forms/inifilewidget.ui \
+    ../src/forms/settingdialog.ui
+
+
+
+
+SOURCES += TestMain.cpp \
+    datamanager_tests.cpp \
+    ../src/mainWindow.cpp \
+    ../src/GraphicView.cpp \
+    ../src/roomwidget.cpp \
+    ../src/rooms.cpp \
+    ../src/datamanager.cpp \
+    ../src/jpscrossing.cpp \
+    ../src/jpsLineItem.cpp \
+    ../src/jpsexit.cpp \
+    ../src/jpsobstacle.cpp \
+    ../src/jpslandmark.cpp \
+    ../src/dxflib/src/dl_writer_ascii.cpp \
+    ../src/dxflib/src/dl_dxf.cpp \
+    ../src/widgetlandmark.cpp \
+    ../src/graphicscene.cpp \
+    ../src/widgetsettings.cpp \
+    ../src/jpsconnection.cpp \
+    ../src/UndoFramework/actionstack.cpp \
+    ../src/UndoFramework/action.cpp \
+    ../src/UndoFramework/lineaction.cpp \
+    ../src/jpsregion.cpp \
+    ../src/AutomaticRoomIdentification/roomdefinition.cpp \
+    ../src/AutomaticRoomIdentification/roomidentification.cpp \
+    ../src/settingdialog.cpp \
+    ../src/tinyxml/tinystr.cpp \
+    ../src/tinyxml/tinyxml.cpp \
+    ../src/tinyxml/tinyxmlerror.cpp \
+    ../src/tinyxml/tinyxmlparser.cpp \
+    ../src/inifilewidget.cpp \
+
+	
+HEADERS += \
+    ../src/mainWindow.h \
+    ../src/GraphicView.h \
+    ../src/roomwidget.h \
+    ../src/rooms.h \
+    ../src/datamanager.h \
+    ../src/jpscrossing.h \
+    ../src/jpsLineItem.h \
+    ../src/jpsexit.h \
+    ../src/jpsobstacle.h \
+    ../src/jpslandmark.h \
+    ../src/dxflib/src/dl_writer_ascii.h \
+    ../src/dxflib/src/dl_writer.h \
+    ../src/dxflib/src/dl_global.h \
+    ../src/dxflib/src/dl_extrusion.h \
+    ../src/dxflib/src/dl_exception.h \
+    ../src/dxflib/src/dl_entities.h \
+    ../src/dxflib/src/dl_dxf.h \
+    ../src/dxflib/src/dl_creationinterface.h \
+    ../src/dxflib/src/dl_creationadapter.h \
+    ../src/dxflib/src/dl_codes.h \
+    ../src/dxflib/src/dl_attributes.h \
+    ../src/widgetlandmark.h \
+    ../src/graphicscene.h \
+    ../src/widgetsettings.h \
+    ../src/jpsconnection.h \
+    ../src/UndoFramework/actionstack.h \
+    ../src/UndoFramework/action.h \
+    ../src/UndoFramework/lineaction.h \
+    ../src/jpsregion.h \
+    ../src/AutomaticRoomIdentification/roomID.h\
+    ../src/AutomaticRoomIdentification/roomdefinition.h \
+    ../src/AutomaticRoomIdentification/roomidentification.h \
+    ../src/dtrace.h \
+    ../src/settingdialog.h \
+    ../src/tinyxml/tinystr.h \
+    ../src/tinyxml/tinyxml.h \
+    ../src/inifilewidget.h \
+
+
+INCLUDEPATH += \
+    ../build \
+    ../examples \
+    ../src \
+    ../examples/1_tutorial \
+    ../examples/2_mixedusage \
+    ../examples/3_bottleneck \
+
+
+DESTDIR = $$PWD/..