From 5e5e33a709994dc1d15f2c04acd04f71e1fde375 Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Sun, 11 Dec 2016 00:43:00 +0100 Subject: [PATCH] test: merging memory --- test/node/node_test.cpp | 57 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/test/node/node_test.cpp b/test/node/node_test.cpp index 035f1d0..b6c5739 100644 --- a/test/node/node_test.cpp +++ b/test/node/node_test.cpp @@ -495,5 +495,62 @@ TEST_F(NodeEmitterTest, NestFlowMapListNode) { ExpectOutput("{position: [1.01, 2.01, 3.01]}", mapNode); } + +TEST(NodeTest, ChildNodesAliveAfterOwnerNodeExitsScope) { + + Node node; + { + Node tmp; + Node n = tmp["Message"]; + n["Hello"] = "World"; + node = tmp; + } + + EXPECT_TRUE(node.IsMap()); + EXPECT_TRUE(node["Message"].IsMap()); + EXPECT_TRUE(node["Message"]["Hello"].IsScalar()); + EXPECT_EQ(node["Message"]["Hello"].Scalar(), "World"); +} + +TEST(NodeTest, AdvancedMemoryMerging) { + + { + Node src; + src["A"] = "a"; + { + Node dst; + dst["B"] = "b"; + dst = src["A"]; + } + printf("dropped dst\n"); + EXPECT_TRUE(src.IsMap()); + EXPECT_EQ(src["A"].Scalar(), "a"); + } + { + Node src; + src["A"] = "a"; + { + Node dst; + dst["A"] = src["A"]; + } + printf("dropped dst\n"); + EXPECT_TRUE(src.IsMap()); + EXPECT_EQ(src["A"].Scalar(), "a"); + } + { + Node src; + src["A"] = "a"; + { + Node dst; + for (const auto& entry : src) { + dst[entry.first] = entry.second; + } + } + printf("dropped dst\n"); + EXPECT_TRUE(src.IsMap()); + EXPECT_EQ(src["A"].Scalar(), "a"); + } +} + } }