// Custom includes
#include "Config.hh"
-#include <fstream>
#include "ScopedDirectory.hh"
#include "ParsedCommand.hh"
+#include "ConfigFile.hh"
+#include "ProgramOptions.hh"
#include <boost/filesystem/operations.hpp>
#include "../Utils/auto_unit_test.hh"
///////////////////////////////cc.p////////////////////////////////////////
namespace {
+ std::string val1;
+ bool val2 (false);
- int var1 (0);
- bool var2 (false);
-
- void fun1(int v) { var1 = v; }
- void fun2() { var2 = true; }
+ void fun1(std::string p)
+ { val1 = p; }
+
+ void fun2()
+ { val2 = true; }
class TempFile
{
std::string name_;
std::ofstream file_;
};
-
-
}
-BOOST_AUTO_UNIT_TEST(configFile)
+BOOST_AUTO_UNIT_TEST(configBundle)
{
- TempFile cfgf ("test.cfg");
- cfgf << "dir1/fun1 10;\n"
- << TempFile::close;
-
- senf::console::ScopedDirectory<> dir1;
- senf::console::root().add("dir1", dir1);
- dir1.add("fun1",&fun1);
+ senf::console::ScopedDirectory<> root;
+ senf::console::root().add("root",root);
- {
- senf::console::ConfigFile cfg (cfgf.name());
+ root.mkdir("dir1").add("fun1",&fun1);
+ root.add("fun2",&fun2);
- var1 = 0;
- SENF_CHECK_NO_THROW( cfg.parse() )
- BOOST_CHECK_EQUAL( var1, 10 );
+ TempFile cfg ("test.cfg");
+ cfg << "dir1/fun1 foo; fun2;" << TempFile::close;
- var1 = 0;
- SENF_CHECK_NO_THROW( cfg.parse() )
- BOOST_CHECK_EQUAL( var1, 0 );
+ char * argv[] = { "", "--dir1-fun1=bar" };
- var1 = 0;
- cfg.reset();
- SENF_CHECK_NO_THROW( cfg.parse() )
- BOOST_CHECK_EQUAL( var1, 10 );
- }
-}
+ senf::console::ConfigBundle bundle(root);
+ bundle.add( senf::console::FileConfig(cfg.name()) );
+ bundle.add( senf::console::OptionsConfig(sizeof(argv)/sizeof(argv[0]), argv) );
-BOOST_AUTO_UNIT_TEST(configFileRestrict)
-{
- TempFile cfgf ("test.cfg");
- cfgf << "dir1/fun1 10;\n"
- << "dir2/fun2;\n"
- << TempFile::close;
-
- senf::console::ScopedDirectory<> dir1;
- senf::console::root().add("dir1", dir1);
- dir1.add("fun1",&fun1);
-
- {
- var1 = 0;
- var2 = false;
- senf::console::ConfigFile cfg (cfgf.name());
- SENF_CHECK_NO_THROW( cfg.parse(dir1) );
- BOOST_CHECK_EQUAL( var1, 10 );
- BOOST_CHECK_EQUAL( var2, false );
- BOOST_CHECK( cfg.parsed(dir1) );
- BOOST_CHECK( ! cfg.complete() );
-
- senf::console::ScopedDirectory<> dir2;
- senf::console::root().add("dir2", dir2);
- dir2.add("fun2",&fun2);
-
- var1 = 0;
- var2 = false;
- SENF_CHECK_NO_THROW( cfg.parse() );
- BOOST_CHECK_EQUAL( var1, 0 );
- BOOST_CHECK_EQUAL( var2, true );
- BOOST_CHECK( cfg.complete() );
- }
-}
-
-BOOST_AUTO_UNIT_TEST(configFileSkipGroup)
-{
- TempFile cfgf ("test.cfg");
- cfgf << "dir1/fun1 10;\n"
- << "dir2 { dir3 { fun2; } fun1 5; }"
- << TempFile::close;
-
- senf::console::ScopedDirectory<> dir1;
- senf::console::root().add("dir1", dir1);
- dir1.add("fun1",&fun1);
-
- senf::console::ScopedDirectory<> dir2;
- senf::console::root().add("dir2", dir2);
-
- dir2.mkdir("dir3").add("fun2", &fun2);
- dir2.add("fun1", &fun1);
-
- {
- var1 = 0;
- var2 = false;
- senf::console::ConfigFile cfg (cfgf.name());
- SENF_CHECK_NO_THROW( cfg.parse(dir1) );
- BOOST_CHECK_EQUAL( var1, 10 );
- BOOST_CHECK_EQUAL( var2, false );
- BOOST_CHECK( cfg.parsed(dir1) );
-
- var1 = 0;
- var2 = false;
- SENF_CHECK_NO_THROW( cfg.parse(dir2["dir3"]) );
- BOOST_CHECK_EQUAL( var1, 0 );
- BOOST_CHECK_EQUAL( var2, true );
- BOOST_CHECK( ! cfg.parsed(dir2) );
-
- var1 = 0;
- var2 = false;
- SENF_CHECK_NO_THROW( cfg.parse() );
- BOOST_CHECK_EQUAL( var1, 5 );
- BOOST_CHECK_EQUAL( var2, false );
- }
+ SENF_CHECK_NO_THROW( bundle.parse() );
+ BOOST_CHECK_EQUAL( val1, "bar" );
+ BOOST_CHECK_EQUAL( val2, true );
}
///////////////////////////////cc.e////////////////////////////////////////