summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt58
-rwxr-xr-xlib/download_dependencies.sh6
-rw-r--r--src/main.cpp17
-rw-r--r--src/model/GraphNode.cpp54
-rw-r--r--src/model/GraphNode.hpp68
-rw-r--r--src/model/domain/Domain.cpp20
-rw-r--r--src/model/domain/Domain.hpp40
-rw-r--r--test/model/GraphNode.cpp34
8 files changed, 282 insertions, 15 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index da91330..f4cceee 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,17 +4,57 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8.9)
SET(CMAKE_AUTOMOC ON)
FIND_PACKAGE(Qt5Widgets REQUIRED)
-INCLUDE_DIRECTORIES(src/)
-
# Enable C++11 and all warnings
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic -std=c++11")
-ADD_EXECUTABLE(basicwriter
- src/main.cpp
- src/gui/notepad.cpp
- src/gui/components/UIPaneFrame.cpp
-# src/gui/components/UIGrid.cpp
-# src/gui/components/GridTree.cpp
+# Option for enabling testing. Turn on with 'cmake -Dtest=ON'.
+OPTION(test "Build all tests." OFF) # Makes boolean 'test' available.
+
+# Unit test handling
+if(test)
+ # Compile gtest
+ add_subdirectory(lib/gtest-1.7.0)
+
+ # Enable testing and declare some variables used for compiling the test cases
+ enable_testing()
+ set(GTEST_INCLUDE_DIR ${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR})
+ set(GTEST_LIBRARIES gtest gtest_main)
+endif()
+
+INCLUDE_DIRECTORIES(src/)
+
+ADD_LIBRARY(ousia_core
+ src/model/GraphNode
+)
+
+ADD_EXECUTABLE(ousia
+ src/main
+)
+
+TARGET_LINK_LIBRARIES(ousia
+ ousia_core
)
-QT5_USE_MODULES(basicwriter Widgets)
+QT5_USE_MODULES(ousia Widgets)
+
+if(test)
+ # Include the gtest include files and the src directory
+ INCLUDE_DIRECTORIES(
+ ${GTEST_INCLUDE_DIR}
+ src/
+ )
+
+ # Add all unit test files
+ ADD_EXECUTABLE(ousia_test
+ test/model/GraphNode
+ )
+
+ TARGET_LINK_LIBRARIES(ousia_test
+ ${GTEST_LIBRARIES}
+ ousia_core
+ )
+
+ # Register the unit test
+ ADD_TEST(ousia_test ousia_test)
+endif()
+
diff --git a/lib/download_dependencies.sh b/lib/download_dependencies.sh
new file mode 100755
index 0000000..369c514
--- /dev/null
+++ b/lib/download_dependencies.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+# Download and unzip googletest
+wget https://googletest.googlecode.com/files/gtest-1.7.0.zip
+unzip gtest-1.7.0.zip
+
diff --git a/src/main.cpp b/src/main.cpp
index efe3031..5c01bc3 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1,4 +1,3 @@
-#include <gui/notepad.hpp>
#include <QApplication>
#include <QFile>
#include <QIODevice>
@@ -7,11 +6,18 @@
#include <vector>
#include <iostream>
+#include <model/GraphNode.hpp>
+
+using namespace ousia;
+
int main(int argc, char *argv[])
{
- QApplication a(argc, argv);
- Notepad w;
- w.show();
+ std::shared_ptr<GraphNode> nd1{new GraphNode("node1")};
+ std::shared_ptr<GraphNode> nd2{new GraphNode("node2", nd1)};
+
+ std::cout << nd2->getParent()->getName() << std::endl;
+
+ return 0;
// Open the file given as first argument
/* QFile file(argv[1]);
@@ -31,6 +37,5 @@ int main(int argc, char *argv[])
return 1;
}
return 0;*/
-
- return a.exec();
}
+
diff --git a/src/model/GraphNode.cpp b/src/model/GraphNode.cpp
new file mode 100644
index 0000000..affc3af
--- /dev/null
+++ b/src/model/GraphNode.cpp
@@ -0,0 +1,54 @@
+/*
+ Ousía
+ Copyright (C) 2014 Benjamin Paaßen, Andreas Stöckel
+
+ This program 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 3 of the License, or
+ (at your option) any later version.
+
+ This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "GraphNode.hpp"
+
+#include <iostream>
+#include <sstream>
+
+namespace ousia {
+
+GraphNode::GraphNode() :
+ parent(nullptr)
+{
+ // Do nothing here
+}
+
+GraphNode::GraphNode(std::shared_ptr<GraphNode> parent) :
+ parent(parent)
+{
+ // Do nothing here
+}
+
+GraphNode::GraphNode(const std::string &name, std::shared_ptr<GraphNode> parent) :
+ name(name), parent(parent)
+{
+ // Do nothing here
+}
+
+const std::string GraphNode::getFullyQualifiedName()
+{
+ if (parent) {
+ std::stringstream ss;
+ ss << parent->getFullyQualifiedName() << "." << name;
+ return ss.str();
+ }
+ return name;
+}
+
+}
diff --git a/src/model/GraphNode.hpp b/src/model/GraphNode.hpp
new file mode 100644
index 0000000..39770dd
--- /dev/null
+++ b/src/model/GraphNode.hpp
@@ -0,0 +1,68 @@
+/*
+ Ousía
+ Copyright (C) 2014 Benjamin Paaßen, Andreas Stöckel
+
+ This program 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 3 of the License, or
+ (at your option) any later version.
+
+ This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _GRAPH_NODE_HPP_
+#define _GRAPH_NODE_HPP_
+
+#include <string>
+#include <memory>
+
+namespace ousia {
+
+class GraphNode {
+
+private:
+ std::string name;
+ std::shared_ptr<GraphNode> parent;
+
+public:
+ GraphNode();
+
+ GraphNode(std::shared_ptr<GraphNode> parent);
+
+ GraphNode(const std::string &name, std::shared_ptr<GraphNode> parent = nullptr);
+
+ const std::string& getName()
+ {
+ return name;
+ }
+
+ const std::string getFullyQualifiedName();
+
+ void setName(const std::string &name)
+ {
+ this->name = name;
+ }
+
+ std::shared_ptr<GraphNode> getParent()
+ {
+ return std::shared_ptr<GraphNode>(parent);
+ }
+
+ void setParent(std::shared_ptr<GraphNode> parent)
+ {
+ this->parent = parent;
+ }
+
+
+};
+
+}
+
+#endif /* _GRAPH_NODE_HPP_ */
+
diff --git a/src/model/domain/Domain.cpp b/src/model/domain/Domain.cpp
new file mode 100644
index 0000000..110e367
--- /dev/null
+++ b/src/model/domain/Domain.cpp
@@ -0,0 +1,20 @@
+/*
+ BasicWriter
+ Copyright (C) 2014 Benjamin Paaßen, Andreas Stöckel
+
+ This program 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 3 of the License, or
+ (at your option) any later version.
+
+ This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+
+
diff --git a/src/model/domain/Domain.hpp b/src/model/domain/Domain.hpp
new file mode 100644
index 0000000..98b440a
--- /dev/null
+++ b/src/model/domain/Domain.hpp
@@ -0,0 +1,40 @@
+/*
+ Ousía
+ Copyright (C) 2014 Benjamin Paaßen, Andreas Stöckel
+
+ This program 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 3 of the License, or
+ (at your option) any later version.
+
+ This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include <model/GraphNode.hpp>
+
+namespace ousia {
+namespace domain {
+
+class Domain : public GraphNode {
+
+private:
+ std::shared_ptr<Class> root;
+ std::vector<std::shared_ptr<Structure>> structures;
+ std::vector<std::shared_ptr<Category>> categories;
+ std::vector<std::shared_ptr<Layer>> layers;
+
+};
+
+}
+}
+
diff --git a/test/model/GraphNode.cpp b/test/model/GraphNode.cpp
new file mode 100644
index 0000000..a5596f5
--- /dev/null
+++ b/test/model/GraphNode.cpp
@@ -0,0 +1,34 @@
+/*
+ Ousía
+ Copyright (C) 2014 Benjamin Paaßen, Andreas Stöckel
+
+ This program 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 3 of the License, or
+ (at your option) any later version.
+
+ This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <gtest/gtest.h>
+
+#include <model/GraphNode.hpp>
+
+namespace ousia {
+
+TEST(GraphNodeTest, FullyQuallifiedNameTest)
+{
+ std::shared_ptr<GraphNode> nd1{new GraphNode("node1")};
+ std::shared_ptr<GraphNode> nd2{new GraphNode("node2", nd1)};
+
+ ASSERT_STREQ("node1.node2", nd2->getFullyQualifiedName().c_str());
+}
+
+}
+