From 0869796c24836e065ad453eb34e7047f9ff48f06 Mon Sep 17 00:00:00 2001 From: Christoph Lehmann <christoph.lehmann@ufz.de> Date: Sun, 24 Jan 2016 11:15:06 +0100 Subject: [PATCH] [T] added move and checkAndInvalidate tests --- Tests/BaseLib/TestConfigTree.cpp | 62 ++++++++++++++++++++++++++------ 1 file changed, 52 insertions(+), 10 deletions(-) diff --git a/Tests/BaseLib/TestConfigTree.cpp b/Tests/BaseLib/TestConfigTree.cpp index a91915f834b..69dd1c88bb3 100644 --- a/Tests/BaseLib/TestConfigTree.cpp +++ b/Tests/BaseLib/TestConfigTree.cpp @@ -244,8 +244,11 @@ TEST(BaseLibConfigTree, IncompleteParse) EXPECT_ERR_WARN(cbs, false, false); EXPECT_EQ(1.0, pt2.getConfAttribute<double>("y")); EXPECT_ERR_WARN(cbs, false, false); + + BaseLib::checkAndInvalidate(pt2); + EXPECT_ERR_WARN(cbs, false, true); // attribute "z" not read } - EXPECT_ERR_WARN(cbs, false, true); // attribute "z" not read + EXPECT_ERR_WARN(cbs, false, false); } // ConfigTree destroyed here EXPECT_ERR_WARN(cbs, false, true); // expect warning because I didn't read everything @@ -477,7 +480,8 @@ TEST(BaseLibConfigTree, MoveConstruct) { const char xml[] = "<s>test</s>" - "<t>Test</t>"; + "<t>Test</t>" + "<u>data</u>"; auto const ptree = readXml(xml); Callbacks cbs; @@ -487,6 +491,20 @@ TEST(BaseLibConfigTree, MoveConstruct) EXPECT_EQ("test", conf.getConfParam<std::string>("s", "XX")); EXPECT_ERR_WARN(cbs, false, false); + auto u = conf.getConfSubtree("u"); + EXPECT_ERR_WARN(cbs, false, false); + + EXPECT_EQ("data", u.getValue<std::string>()); + EXPECT_ERR_WARN(cbs, false, false); + + // test that read status of data is transferred in move construction + { + BaseLib::ConfigTreeNew u2(std::move(u)); + EXPECT_ERR_WARN(cbs, false, false); + } + EXPECT_ERR_WARN(cbs, false, false); + + // test that read status of children is transferred in move construction BaseLib::ConfigTreeNew conf2(std::move(conf)); EXPECT_EQ("XX", conf2.getConfParam<std::string>("n", "XX")); @@ -494,6 +512,9 @@ TEST(BaseLibConfigTree, MoveConstruct) conf2.checkConfParam("t", "Test"); EXPECT_ERR_WARN(cbs, false, false); + + BaseLib::checkAndInvalidate(conf2); + EXPECT_ERR_WARN(cbs, false, false); } // ConfigTree destroyed here EXPECT_ERR_WARN(cbs, false, false); } @@ -503,7 +524,8 @@ TEST(BaseLibConfigTree, MoveAssign) { const char xml[] = "<s>test</s>" - "<t>Test</t>"; + "<t>Test</t>" + "<u>data</u>"; auto const ptree = readXml(xml); Callbacks cbs; @@ -513,16 +535,36 @@ TEST(BaseLibConfigTree, MoveAssign) EXPECT_EQ("test", conf.getConfParam<std::string>("s", "XX")); EXPECT_ERR_WARN(cbs, false, false); - BaseLib::ConfigTreeNew conf2(ptree, cbs.get_error_cb(), cbs.get_warning_cb()); - conf2 = std::move(conf); - // Expect warning because config tree has not been traversed - // entirely before. - EXPECT_ERR_WARN(cbs, false, true); + auto u = conf.getConfSubtree("u"); + EXPECT_ERR_WARN(cbs, false, false); - EXPECT_EQ("XX", conf2.getConfParam<std::string>("n", "XX")); + EXPECT_EQ("data", u.getValue<std::string>()); EXPECT_ERR_WARN(cbs, false, false); - conf2.checkConfParam("t", "Test"); + // test that read status of data is transferred in move assignment + { + BaseLib::ConfigTreeNew u2(ptree, cbs.get_error_cb(), cbs.get_warning_cb()); + u2 = std::move(u); + // Expect warning because u2 has not been traversed + // entirely before assignment. + EXPECT_ERR_WARN(cbs, false, true); + } + EXPECT_ERR_WARN(cbs, false, false); + + // test that read status of children is transferred in move construction + { + BaseLib::ConfigTreeNew conf2(ptree, cbs.get_error_cb(), cbs.get_warning_cb()); + conf2 = std::move(conf); + // Expect warning because conf2 has not been traversed + // entirely before assignment. + EXPECT_ERR_WARN(cbs, false, true); + + EXPECT_EQ("XX", conf2.getConfParam<std::string>("n", "XX")); + EXPECT_ERR_WARN(cbs, false, false); + + conf2.checkConfParam("t", "Test"); + EXPECT_ERR_WARN(cbs, false, false); + } EXPECT_ERR_WARN(cbs, false, false); } // ConfigTree destroyed here EXPECT_ERR_WARN(cbs, false, false); -- GitLab