Utils: Document new utilities
[senf.git] / Console / Config.test.cc
index df5c070..df3383b 100644 (file)
@@ -76,8 +76,18 @@ BOOST_AUTO_UNIT_TEST(configFile)
     dir1.add("fun1",&fun1);
 
     {
-        var1 = 0;
         senf::console::ConfigFile cfg (cfgf.name());
+
+        var1 = 0;
+        SENF_CHECK_NO_THROW( cfg.parse() )
+        BOOST_CHECK_EQUAL( var1, 10 );
+
+        var1 = 0;
+        SENF_CHECK_NO_THROW( cfg.parse() )
+        BOOST_CHECK_EQUAL( var1, 0 );
+
+        var1 = 0;
+        cfg.reset();
         SENF_CHECK_NO_THROW( cfg.parse() )
         BOOST_CHECK_EQUAL( var1, 10 );
     }
@@ -98,9 +108,11 @@ BOOST_AUTO_UNIT_TEST(configFileRestrict)
         var1 = 0;
         var2 = false;
         senf::console::ConfigFile cfg (cfgf.name());
-        SENF_CHECK_NO_THROW( cfg.parse(dir1.node()) );
+        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);
@@ -111,6 +123,7 @@ BOOST_AUTO_UNIT_TEST(configFileRestrict)
         SENF_CHECK_NO_THROW( cfg.parse() );
         BOOST_CHECK_EQUAL( var1, 0 );
         BOOST_CHECK_EQUAL( var2, true );
+        BOOST_CHECK( cfg.complete() );
     }
 }
 
@@ -135,15 +148,17 @@ BOOST_AUTO_UNIT_TEST(configFileSkipGroup)
         var1 = 0;
         var2 = false;
         senf::console::ConfigFile cfg (cfgf.name());
-        SENF_CHECK_NO_THROW( cfg.parse(dir1.node()) );
+        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;
@@ -153,6 +168,40 @@ BOOST_AUTO_UNIT_TEST(configFileSkipGroup)
     }
 }
 
+BOOST_AUTO_UNIT_TEST(configRestrictAndLink)
+{
+    TempFile cfgf ("test.cfg");
+    cfgf << "dir1/fun1 10;\n"
+         << "link1 { dir3 { fun2; } fun1 5; }"
+         << TempFile::close;
+    
+    senf::console::ScopedDirectory<> dir1;
+    senf::console::root().add("dir1", dir1);
+    dir1.add("fun1",&fun1);
+    
+    senf::console::ScopedDirectory<> dir2;
+    dir1.add("dir2", dir2);
+    
+    dir2.mkdir("dir3").add("fun2", &fun2);
+    dir2.add("fun1", &fun1);
+
+    senf::console::ScopedDirectory<> dir4;
+    senf::console::root().add("dir4", dir4);
+    dir4.link("link1", dir2);
+
+    {
+        senf::console::ConfigFile cfg (cfgf.name(), dir4);
+
+        var1 = 0;
+        var2 = false;
+        SENF_CHECK_NO_THROW( cfg.parse(dir2["dir3"]) );
+        BOOST_CHECK_EQUAL( var1, 0 );
+        BOOST_CHECK_EQUAL( var2, true );
+
+        BOOST_CHECK_THROW( cfg.parse(), senf::console::SyntaxErrorException );
+    }
+}
+
 ///////////////////////////////cc.e////////////////////////////////////////
 #undef prefix_