// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "base/property_bag.h" #include "testing/gtest/include/gtest/gtest.h" namespace base { TEST(PropertyBagTest, AddQueryRemove) { PropertyBag bag; PropertyAccessor adaptor; // Should be no match initially. EXPECT_TRUE(adaptor.GetProperty(&bag) == NULL); // Add the value and make sure we get it back. const int kFirstValue = 1; adaptor.SetProperty(&bag, kFirstValue); ASSERT_TRUE(adaptor.GetProperty(&bag)); EXPECT_EQ(kFirstValue, *adaptor.GetProperty(&bag)); // Set it to a new value. const int kSecondValue = 2; adaptor.SetProperty(&bag, kSecondValue); ASSERT_TRUE(adaptor.GetProperty(&bag)); EXPECT_EQ(kSecondValue, *adaptor.GetProperty(&bag)); // Remove the value and make sure it's gone. adaptor.DeleteProperty(&bag); EXPECT_TRUE(adaptor.GetProperty(&bag) == NULL); } TEST(PropertyBagTest, Copy) { PropertyAccessor adaptor1; PropertyAccessor adaptor2; // Create a bag with property type 1 in it. PropertyBag copy; adaptor1.SetProperty(©, 22); const int kType1Value = 10; const double kType2Value = 2.7; { // Create a bag with property types 1 and 2 in it. PropertyBag initial; adaptor1.SetProperty(&initial, kType1Value); adaptor2.SetProperty(&initial, kType2Value); // Assign to the original. copy = initial; } // Verify the copy got the two properties. ASSERT_TRUE(adaptor1.GetProperty(©)); ASSERT_TRUE(adaptor2.GetProperty(©)); EXPECT_EQ(kType1Value, *adaptor1.GetProperty(©)); EXPECT_EQ(kType2Value, *adaptor2.GetProperty(©)); // Clear it out, neither property should be left. copy = PropertyBag(); EXPECT_TRUE(adaptor1.GetProperty(©) == NULL); EXPECT_TRUE(adaptor2.GetProperty(©) == NULL); } } // namespace base