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