diff --git a/src/tests/test_config.cpp b/src/tests/test_config.cpp index db6fdef76632..d59c58379700 100644 --- a/src/tests/test_config.cpp +++ b/src/tests/test_config.cpp @@ -18,6 +18,7 @@ #include #include "config.hpp" +#include "variable_info.hpp" BOOST_AUTO_TEST_SUITE ( test_config ) @@ -172,4 +173,58 @@ BOOST_AUTO_TEST_CASE ( test_config_attribute_value ) BOOST_CHECK_EQUAL(cc["x"], c["x"]); } +BOOST_AUTO_TEST_CASE ( test_variable_info ) +{ + config c; + { + variable_access_const access("", c); + // We dotn allow empty keys + BOOST_CHECK_THROW (access.as_scalar(), invalid_variablename_exception); + } + { + variable_access_const access("some_non_existent.", c); + // We dotn allow empty keys + BOOST_CHECK_THROW (access.as_scalar(), invalid_variablename_exception); + } + { + variable_access_const access("some_non_existent[0]value", c); + // We expect '.' after ']' + BOOST_CHECK_THROW (access.as_scalar(), invalid_variablename_exception); + } + { + variable_access_const access("some_non_existent", c); + // we return empty be default + BOOST_CHECK (!access.exists_as_container()); + BOOST_CHECK_EQUAL (access.as_container(), config()); + BOOST_CHECK (!access.exists_as_attribute()); + BOOST_CHECK_EQUAL (access.as_scalar(), config::attribute_value()); + } + { + variable_access_const access("a.b[0].c[1].d.e.f[2]", c); + // we return empty be default + BOOST_CHECK (!access.exists_as_container()); + BOOST_CHECK_EQUAL (access.as_container(), config()); + // Explicit indexes can never be an attribute + BOOST_CHECK_THROW (access.as_scalar(), invalid_variablename_exception); + } + BOOST_CHECK (c.empty()); + { + config c2; + variable_access_create access("a.b[0].c[1].d.e.f[2].g", c2); + access.as_scalar() = 84; + BOOST_CHECK_EQUAL (variable_access_const("a.length", c2).as_scalar(), 1); + BOOST_CHECK_EQUAL (variable_access_const("a.b.length", c2).as_scalar(), 1); + BOOST_CHECK_EQUAL (variable_access_const("a.b.c.length", c2).as_scalar(), 2); + BOOST_CHECK_EQUAL (variable_access_const("a.b.c[1].d.e.f.length", c2).as_scalar(), 3); + // we setted g as a scalar + BOOST_CHECK_EQUAL (variable_access_const("a.b.c[1].d.e.f[2].g.length", c2).as_scalar(), 0); + BOOST_CHECK_EQUAL (variable_access_const("a.b.c[1].d.e.f[2].g", c2).as_scalar(), 84); + } + { + config c2; + variable_access_throw access("a.b[9].c", c2); + BOOST_CHECK_THROW(access.as_scalar(), invalid_variablename_exception); + } +} + BOOST_AUTO_TEST_SUITE_END()