diff --git a/bin/test/data/ProjectSettingsTestSuite/settings.xml b/bin/test/data/SettingsTestSuite/settings.xml
similarity index 51%
rename from bin/test/data/ProjectSettingsTestSuite/settings.xml
rename to bin/test/data/SettingsTestSuite/settings.xml
index 7f3fd6fd..bd91952e 100644
--- a/bin/test/data/ProjectSettingsTestSuite/settings.xml
+++ b/bin/test/data/SettingsTestSuite/settings.xml
@@ -1,5 +1,10 @@
+ 1
+ 42
+ 3.1416
+ Hello World!
+
data
diff --git a/bin/test/data/log/test_log.txt b/bin/test/data/log/test_log.txt
index 5db5f892..e4f5dfca 100644
--- a/bin/test/data/log/test_log.txt
+++ b/bin/test/data/log/test_log.txt
@@ -3,6 +3,21 @@ Token.cpp ERROR: Location Id was not referenced by this Token.
Node.cpp WARNING: Cannot change NodeType after it was already set from namespace to class
Edge.cpp ERROR: Nodes are not plain copies.
Graph.cpp ERROR: Can't remove member edge, without removing the child node.
+Settings.cpp WARNING: File for Settings not found.
+ConfigManager.cpp ERROR: value Bool is not present in config.
+ConfigManager.cpp ERROR: value Int is not present in config.
+ConfigManager.cpp ERROR: value Float is not present in config.
+ConfigManager.cpp ERROR: value String is not present in config.
+Settings.cpp WARNING: File for Settings not found.
+ConfigManager.cpp ERROR: value Bool is not present in config.
+ConfigManager.cpp ERROR: value Int is not present in config.
+ConfigManager.cpp ERROR: value Float is not present in config.
+ConfigManager.cpp ERROR: value String is not present in config.
+ConfigManager.cpp ERROR: value Bool is not present in config.
+ConfigManager.cpp ERROR: value Int is not present in config.
+ConfigManager.cpp ERROR: value Float is not present in config.
+ConfigManager.cpp ERROR: value String is not present in config.
+ConfigManager.cpp ERROR: value NewBool is not present in config.
TextAccess.cpp WARNING: Index 'firstLine' has to be lower or equal index 'lastLine', is 3 > 2
TextAccess.cpp WARNING: Tried to access index 10. Maximum index is 8
TextAccess.cpp WARNING: Tried to access index 10. Maximum index is 8
diff --git a/src/lib/Settings.cpp b/src/lib/Settings.cpp
index dda0db21..f5565ece 100644
--- a/src/lib/Settings.cpp
+++ b/src/lib/Settings.cpp
@@ -6,6 +6,7 @@
Settings::Settings()
{
+ clear();
}
Settings::~Settings()
diff --git a/src/lib/Settings.h b/src/lib/Settings.h
index 690ff13e..c13c9f5f 100644
--- a/src/lib/Settings.h
+++ b/src/lib/Settings.h
@@ -16,6 +16,7 @@ public:
void save(const std::string& filePath);
void clear();
+protected:
template
T getValue(const std::string& key, T defaultValue) const;
diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt
index fc36d12c..ee118fac 100644
--- a/src/test/CMakeLists.txt
+++ b/src/test/CMakeLists.txt
@@ -8,7 +8,7 @@ add_files(
GraphTestSuite.h
LogManagerTestSuite.h
MessageQueueTestSuite.h
- ProjectSettingsTestSuite.h
+ SettingsTestSuite.h
TestSuiteFixture.cpp
TestSuiteFixture.h
TextAccessTestSuite.h
diff --git a/src/test/ProjectSettingsTestSuite.h b/src/test/ProjectSettingsTestSuite.h
deleted file mode 100644
index b6d9299a..00000000
--- a/src/test/ProjectSettingsTestSuite.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#include
-
-#include "ProjectSettings.h"
-
-class ProjectSettingsTestSuite : public CxxTest::TestSuite
-{
-public:
- void test_loading_projectSettings_from_file()
- {
- TS_ASSERT(ProjectSettings::getInstance()->load("data/ProjectSettingsTestSuite/settings.xml"));
- }
-
- void test_load_sourcepath_from_file()
- {
- ProjectSettings::getInstance()->load("data/ProjectSettingsTestSuite/settings.xml");
- TS_ASSERT_EQUALS(ProjectSettings::getInstance()->getSourcePath(), "data");
- }
-};
diff --git a/src/test/SettingsTestSuite.h b/src/test/SettingsTestSuite.h
new file mode 100644
index 00000000..c6c84d02
--- /dev/null
+++ b/src/test/SettingsTestSuite.h
@@ -0,0 +1,175 @@
+#include
+
+#include "ProjectSettings.h"
+#include "Settings.h"
+
+class SettingsTestSuite : public CxxTest::TestSuite
+{
+public:
+ void test_settings_get_loaded_from_file()
+ {
+ Settings settings;
+ TS_ASSERT(settings.load("data/SettingsTestSuite/settings.xml"));
+ }
+
+ void test_settings_get_not_loaded_from_file()
+ {
+ Settings settings;
+ TS_ASSERT(!settings.load("data/SettingsTestSuite/wrong_settings.xml"));
+ }
+
+ void test_settings_get_loaded_value()
+ {
+ TestSettings settings;
+ TS_ASSERT(settings.load("data/SettingsTestSuite/settings.xml"));
+
+ TS_ASSERT_EQUALS(settings.getBool(), true);
+ TS_ASSERT_EQUALS(settings.getInt(), 42);
+ TS_ASSERT_EQUALS(settings.getFloat(), 3.1416f);
+ TS_ASSERT_EQUALS(settings.getString(), "Hello World!");
+ }
+
+ void test_settings_get_default_value_when_not_loaded()
+ {
+ TestSettings settings;
+ TS_ASSERT_EQUALS(settings.getBool(), false);
+ TS_ASSERT_EQUALS(settings.getInt(), -1);
+ TS_ASSERT_EQUALS(settings.getFloat(), 0.01f);
+ TS_ASSERT_EQUALS(settings.getString(), "");
+ }
+
+ void test_settings_get_default_value_when_wrongly_loaded()
+ {
+ TestSettings settings;
+ TS_ASSERT(!settings.load("data/SettingsTestSuite/wrong_settings.xml"));
+
+ TS_ASSERT_EQUALS(settings.getBool(), false);
+ TS_ASSERT_EQUALS(settings.getInt(), -1);
+ TS_ASSERT_EQUALS(settings.getFloat(), 0.01f);
+ TS_ASSERT_EQUALS(settings.getString(), "");
+ }
+
+ void test_settings_get_default_value_after_clearing()
+ {
+ TestSettings settings;
+ TS_ASSERT(settings.load("data/SettingsTestSuite/settings.xml"));
+
+ settings.clear();
+ TS_ASSERT_EQUALS(settings.getBool(), false);
+ TS_ASSERT_EQUALS(settings.getInt(), -1);
+ TS_ASSERT_EQUALS(settings.getFloat(), 0.01f);
+ TS_ASSERT_EQUALS(settings.getString(), "");
+ }
+
+ void test_settings_can_be_set_when_not_loaded()
+ {
+ TestSettings settings;
+
+ TS_ASSERT(settings.setBool(false));
+ TS_ASSERT_EQUALS(settings.getBool(), false);
+
+ TS_ASSERT(settings.setInt(2));
+ TS_ASSERT_EQUALS(settings.getInt(), 2);
+
+ TS_ASSERT(settings.setFloat(2.5f));
+ TS_ASSERT_EQUALS(settings.getFloat(), 2.5f);
+
+ TS_ASSERT(settings.setString("foobar"));
+ TS_ASSERT_EQUALS(settings.getString(), "foobar");
+ }
+
+ void test_settings_can_be_replaced_when_loaded()
+ {
+ TestSettings settings;
+ TS_ASSERT(settings.load("data/SettingsTestSuite/settings.xml"));
+
+ TS_ASSERT(settings.setBool(false));
+ TS_ASSERT_EQUALS(settings.getBool(), false);
+
+ TS_ASSERT(settings.setInt(2));
+ TS_ASSERT_EQUALS(settings.getInt(), 2);
+
+ TS_ASSERT(settings.setFloat(2.5f));
+ TS_ASSERT_EQUALS(settings.getFloat(), 2.5f);
+
+ TS_ASSERT(settings.setString("foobar"));
+ TS_ASSERT_EQUALS(settings.getString(), "foobar");
+ }
+
+ void test_settings_can_be_added_when_loaded()
+ {
+ TestSettings settings;
+ TS_ASSERT(settings.load("data/SettingsTestSuite/settings.xml"));
+
+ TS_ASSERT_EQUALS(settings.getNewBool(), false);
+ TS_ASSERT(settings.setNewBool(true));
+ TS_ASSERT_EQUALS(settings.getNewBool(), true);
+ }
+
+ void test_load_project_settings_from_file()
+ {
+ TS_ASSERT(ProjectSettings::getInstance()->load("data/SettingsTestSuite/settings.xml"));
+ }
+
+ void test_load_source_path_from_file()
+ {
+ ProjectSettings::getInstance()->load("data/SettingsTestSuite/settings.xml");
+ TS_ASSERT_EQUALS(ProjectSettings::getInstance()->getSourcePath(), "data");
+ }
+
+private:
+ class TestSettings
+ : public Settings
+ {
+ public:
+ bool getBool() const
+ {
+ return getValue("Bool", false);
+ }
+
+ bool setBool(bool value)
+ {
+ return setValue("Bool", value);
+ }
+
+ int getInt() const
+ {
+ return getValue("Int", -1);
+ }
+
+ bool setInt(int value)
+ {
+ return setValue("Int", value);
+ }
+
+ float getFloat() const
+ {
+ return getValue("Float", 0.01f);
+ }
+
+ bool setFloat(float value)
+ {
+ return setValue("Float", value);
+ }
+
+ std::string getString() const
+ {
+ return getValue("String", "");
+ }
+
+ bool setString(const std::string& value)
+ {
+ return setValue("String", value);
+ }
+
+ bool getNewBool() const
+ {
+ return getValue("NewBool", false);
+ }
+
+ bool setNewBool(bool value)
+ {
+ return setValue("NewBool", value);
+ }
+ };
+};