Fix a bug in move-constructor 20/257520/3
authorjh9216.park <jh9216.park@samsung.com>
Tue, 27 Apr 2021 06:46:12 +0000 (02:46 -0400)
committerjh9216.park <jh9216.park@samsung.com>
Tue, 27 Apr 2021 07:14:35 +0000 (03:14 -0400)
- Impl class should exist after moving own object using move-constructor

Change-Id: Icb524459f938f4690ca34752e8720c90f3f5a8a0
Signed-off-by: jh9216.park <jh9216.park@samsung.com>
src/bundle_cpp.cc
tests/bundle_unittests/src/test_bundle_cpp.cc

index a9233dd..a2ac393 100644 (file)
@@ -179,6 +179,8 @@ Bundle& Bundle::operator = (const Bundle& b) {
 Bundle::Bundle(Bundle&& b) noexcept {
   impl_ = std::move(b.impl_);
   impl_->parent_ = this;
+  b.impl_.reset(new Impl(&b));
+  b.impl_->handle_ = bundle_create();
 }
 
 Bundle& Bundle::operator = (Bundle&& b) noexcept {
index 54261d1..ef2f93d 100644 (file)
@@ -35,6 +35,7 @@ TEST(Bundle, CopyCtor) {
 
   Bundle b2(bundle);
   EXPECT_EQ(b2.GetString("TestKey"), "TestVal");
+  EXPECT_EQ(bundle.GetString("TestKey"), "TestVal");
 }
 
 TEST(Bundle, MoveCtor) {
@@ -43,6 +44,37 @@ TEST(Bundle, MoveCtor) {
 
   Bundle b2(std::move(bundle));
   EXPECT_EQ(b2.GetString("TestKey"), "TestVal");
+  EXPECT_EQ(bundle.GetString("TestKey"), "");
+}
+
+TEST(Bundle, CopyAssignOp) {
+  Bundle bundle;
+  bundle.Add("TestKey", "TestVal");
+
+  Bundle b2;
+  b2 = bundle;
+  EXPECT_EQ(b2.GetString("TestKey"), "TestVal");
+  EXPECT_EQ(bundle.GetString("TestKey"), "TestVal");
+}
+
+TEST(Bundle, MoveAssignOp) {
+  Bundle bundle;
+  bundle.Add("TestKey", "TestVal");
+
+  Bundle b2;
+  b2 = std::move(bundle);
+  EXPECT_EQ(b2.GetString("TestKey"), "TestVal");
+  EXPECT_EQ(bundle.GetString("TestKey"), "");
+}
+
+TEST(Bundle, MoveAndAssign) {
+  Bundle bundle;
+  bundle.Add("TestKey", "TestVal");
+
+  Bundle b2(std::move(bundle));
+  bundle = std::move(b2);
+  EXPECT_EQ(b2.GetString("TestKey"), "");
+  EXPECT_EQ(bundle.GetString("TestKey"), "TestVal");
 }
 
 TEST(Bundle, AddStringGetString) {