Utils/Logger: BUGFIX: Include local auto_unit_test header
[senf.git] / Console / Config.test.cc
index df5c070..58d5c1b 100644 (file)
 
 // 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
     {
@@ -61,96 +64,28 @@ namespace {
         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);
 
-    {
-        var1 = 0;
-        senf::console::ConfigFile cfg (cfgf.name());
-        SENF_CHECK_NO_THROW( cfg.parse() )
-        BOOST_CHECK_EQUAL( var1, 10 );
-    }
-}
+    root.mkdir("dir1").add("fun1",&fun1);
+    root.add("fun2",&fun2);
 
-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.node()) );
-        BOOST_CHECK_EQUAL( var1, 10 );
-        BOOST_CHECK_EQUAL( var2, false );
-
-        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 );
-    }
-}
+    TempFile cfg ("test.cfg");
+    cfg << "dir1/fun1 foo; fun2;" << TempFile::close;
 
-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);
+    char * argv[] = { "", "--dir1-fun1=bar" };
 
-    {
-        var1 = 0;
-        var2 = false;
-        senf::console::ConfigFile cfg (cfgf.name());
-        SENF_CHECK_NO_THROW( cfg.parse(dir1.node()) );
-        BOOST_CHECK_EQUAL( var1, 10 );
-        BOOST_CHECK_EQUAL( var2, false );
-
-        var1 = 0;
-        var2 = false;
-        SENF_CHECK_NO_THROW( cfg.parse(dir2["dir3"]) );
-        BOOST_CHECK_EQUAL( var1, 0 );
-        BOOST_CHECK_EQUAL( var2, true );
-
-        var1 = 0;
-        var2 = false;
-        SENF_CHECK_NO_THROW( cfg.parse() );
-        BOOST_CHECK_EQUAL( var1, 5 );
-        BOOST_CHECK_EQUAL( var2, false );
-    }
+    senf::console::ConfigBundle bundle(root);
+    bundle.add( senf::console::FileConfig(cfg.name()) );
+    bundle.add( senf::console::OptionsConfig(sizeof(argv)/sizeof(argv[0]), argv) );
+
+    SENF_CHECK_NO_THROW( bundle.parse() );
+    BOOST_CHECK_EQUAL( val1, "bar" );
+    BOOST_CHECK_EQUAL( val2, true );
 }
 
 ///////////////////////////////cc.e////////////////////////////////////////