diff options
author | Dan Goodliffe <daniel.goodliffe@pressassociation.com> | 2014-11-28 10:50:20 +0000 |
---|---|---|
committer | Dan Goodliffe <daniel.goodliffe@pressassociation.com> | 2014-11-28 10:50:20 +0000 |
commit | 92694b907d7575462c029723ccad14dff7d2c146 (patch) | |
tree | 28a0b50fda5bccd41dbb58a741a37f855ccffb29 | |
parent | Add .gitignore files (diff) | |
download | project2-92694b907d7575462c029723ccad14dff7d2c146.tar.bz2 project2-92694b907d7575462c029723ccad14dff7d2c146.tar.xz project2-92694b907d7575462c029723ccad14dff7d2c146.zip |
Add a unit test over config variable
Adds p2common unit tests dir
Adds a very basic test script node that accepts a simple map for values
-rw-r--r-- | project2/common/Jamfile.jam | 4 | ||||
-rw-r--r-- | project2/common/unittests/Jamfile.jam | 9 | ||||
-rw-r--r-- | project2/common/unittests/testConfig.cpp | 18 | ||||
-rw-r--r-- | project2/common/variables/config.cpp | 1 | ||||
-rw-r--r-- | project2/ut/testScriptNode.cpp | 83 | ||||
-rw-r--r-- | project2/ut/testScriptNode.h | 28 |
6 files changed, 142 insertions, 1 deletions
diff --git a/project2/common/Jamfile.jam b/project2/common/Jamfile.jam index 93c9754..6514b1e 100644 --- a/project2/common/Jamfile.jam +++ b/project2/common/Jamfile.jam @@ -7,6 +7,8 @@ lib boost_system : : <name>boost_system ; lib boost_filesystem : : <name>boost_filesystem ; lib boost_date_time : : <name>boost_date_time ; +build-project unittests ; + cpp-pch pch : pch.hpp : <include>../../libmisc <library>../lib//p2lib @@ -15,7 +17,7 @@ cpp-pch pch : pch.hpp : lib p2common : pch - [ glob-tree *.cpp ] + [ glob-tree *.cpp : unittests ] : <include>. <library>glibmm diff --git a/project2/common/unittests/Jamfile.jam b/project2/common/unittests/Jamfile.jam new file mode 100644 index 0000000..540c1e0 --- /dev/null +++ b/project2/common/unittests/Jamfile.jam @@ -0,0 +1,9 @@ +import testing ; + +unit-test testConfig : + testConfig.cpp + : + <library>../../ut//p2ut + <library>..//p2common + ; + diff --git a/project2/common/unittests/testConfig.cpp b/project2/common/unittests/testConfig.cpp new file mode 100644 index 0000000..8c25394 --- /dev/null +++ b/project2/common/unittests/testConfig.cpp @@ -0,0 +1,18 @@ +#define BOOST_TEST_MODULE Config +#include <boost/test/unit_test.hpp> +#include <testOptionsSource.h> +#include <testScriptNode.h> +#include <variables.h> + +BOOST_AUTO_TEST_CASE( config_application_value ) +{ + TestOptionsSource::LoadTestOptions({ + { "application.data", "testvalue" } + }); + Variable::VariableImplPtr c = VariableLoader::createNew("config", new TestScriptNode({ + { "name", VariableType("data") } + })); + BOOST_REQUIRE(c); + BOOST_REQUIRE_EQUAL("testvalue", c->value(NULL).as<std::string>()); +} + diff --git a/project2/common/variables/config.cpp b/project2/common/variables/config.cpp index 9b4cccb..5b36f6e 100644 --- a/project2/common/variables/config.cpp +++ b/project2/common/variables/config.cpp @@ -72,6 +72,7 @@ class VariableConfigLoader : public VariableLoader::For<VariableConfig> { opts("Variables - ModConfig options") { opts(new AppSettings()); + OptionsSets::Add(typeid(AppSettings).name(), &opts); } const Options * options() const { diff --git a/project2/ut/testScriptNode.cpp b/project2/ut/testScriptNode.cpp new file mode 100644 index 0000000..fb54c12 --- /dev/null +++ b/project2/ut/testScriptNode.cpp @@ -0,0 +1,83 @@ +#include "testScriptNode.h" +#include "variables/literal.h" +#include <logger.h> + +TestScriptNode::TestScriptNode(const Vars & v) : + ScriptNode(NULL), + vars(v) +{ +} + +bool TestScriptNode::componentNamespace() const +{ + return false; +} + +std::string TestScriptNode::get_name() const +{ + Logger()->messagebf(LOG_DEBUG, "%s", __PRETTY_FUNCTION__); + return std::string(); +} + +ScriptNodePtr TestScriptNode::child(const Glib::ustring & name, bool required) const +{ + Logger()->messagebf(LOG_DEBUG, "%s", __PRETTY_FUNCTION__); + if (required) { + throw ValueNotFound(name); + } + return NULL; +} + +ScriptNode::ScriptNodes TestScriptNode::children() const +{ + Logger()->messagebf(LOG_DEBUG, "%s", __PRETTY_FUNCTION__); + return ScriptNode::ScriptNodes(); +} + +ScriptNode::ScriptNodes TestScriptNode::childrenIn(const Glib::ustring & sub) const +{ + Logger()->messagebf(LOG_DEBUG, "%s", __PRETTY_FUNCTION__); + (void)sub; + return ScriptNode::ScriptNodes(); +} + +bool TestScriptNode::valueExists(const Glib::ustring & name) const +{ + Logger()->messagebf(LOG_DEBUG, "%s", __PRETTY_FUNCTION__); + return vars.find(name.collate_key()) != vars.end(); +} + +bool TestScriptNode::applyValue(const Glib::ustring & name, VariableType & target, ExecContext *) const +{ + Logger()->messagebf(LOG_DEBUG, "%s: %s", __PRETTY_FUNCTION__, name); + auto i = vars.find(name.collate_key()); + if (i != vars.end()) { + target = i->second; + Logger()->messagebf(LOG_DEBUG, "%s -> %s", __PRETTY_FUNCTION__, target); + return true; + } + return false; +} + +VariableImpl * TestScriptNode::variable(const boost::optional<Glib::ustring> & defaultSource) const +{ + Logger()->messagebf(LOG_DEBUG, "%s: defaultSource = %s", __PRETTY_FUNCTION__, + defaultSource ? *defaultSource : "NULL"); + (void)defaultSource; + return NULL; +} + +VariableImpl * TestScriptNode::variable(const Glib::ustring & name) const +{ + Logger()->messagebf(LOG_DEBUG, "%s: %s", __PRETTY_FUNCTION__, name); + auto i = vars.find(name.collate_key()); + if (i != vars.end()) { + return new VariableLiteral(i->second); + } + throw ValueNotFound(name); +} + +void TestScriptNode::composeWithCallbacks(const LiteralCallback &, const NodeCallback &) const +{ +} + diff --git a/project2/ut/testScriptNode.h b/project2/ut/testScriptNode.h new file mode 100644 index 0000000..d85f6db --- /dev/null +++ b/project2/ut/testScriptNode.h @@ -0,0 +1,28 @@ +#ifndef TESTSCRIPTNODE_H +#define TESTSCRIPTNODE_H + +#include <scripts.h> + +class TestScriptNode : public ScriptNode { + public: + typedef std::map<std::string, VariableType> Vars; + + TestScriptNode(const Vars &); + + bool componentNamespace() const; + std::string get_name() const; + ScriptNodePtr child(const Glib::ustring & name, bool required = true) const; + ScriptNodes children() const; + ScriptNodes childrenIn(const Glib::ustring & sub) const; + bool valueExists(const Glib::ustring & name) const; + bool applyValue(const Glib::ustring & name, VariableType & target, ExecContext *) const; + VariableImpl * variable(const boost::optional<Glib::ustring> & defaultSource = boost::optional<Glib::ustring>()) const; + VariableImpl * variable(const Glib::ustring & name) const; + void composeWithCallbacks(const LiteralCallback &, const NodeCallback &) const; + + private: + Vars vars; +}; + +#endif + |