1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "ios/public/consumer/base/supports_user_data.h"
7 #include "base/memory/scoped_ptr.h"
8 #include "testing/gmock/include/gmock/gmock.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "testing/platform_test.h"
15 const char* kTestData1Key
= "test_data1";
16 const char* kTestData2Key
= "test_data2";
19 class TestData
: public SupportsUserData::Data
{
21 TestData(bool* was_destroyed
)
22 : was_destroyed_(was_destroyed
) {
23 *was_destroyed_
= false;
26 *was_destroyed_
= true;
33 class TestSupportsUserData
: public SupportsUserData
{
35 TestSupportsUserData() {}
36 virtual ~TestSupportsUserData() {}
39 class SupportsUserDataTest
: public PlatformTest
{
41 virtual void SetUp() override
{
42 PlatformTest::SetUp();
44 test_data1_was_destroyed_
= false;
45 test_data1_
= new TestData(&test_data1_was_destroyed_
);
46 test_data2_was_destroyed_
= false;
47 test_data2_
= new TestData(&test_data2_was_destroyed_
);
48 supports_user_data_
.reset(new TestSupportsUserData());
51 virtual void TearDown() override
{
52 if (!test_data1_was_destroyed_
&&
53 supports_user_data_
&&
54 supports_user_data_
->GetUserData(kTestData1Key
) != test_data1_
)
56 if (!test_data2_was_destroyed_
&&
57 supports_user_data_
&&
58 supports_user_data_
->GetUserData(kTestData2Key
) != test_data2_
)
61 PlatformTest::TearDown();
65 scoped_ptr
<TestSupportsUserData
> supports_user_data_
;
66 bool test_data1_was_destroyed_
;
67 TestData
* test_data1_
;
68 bool test_data2_was_destroyed_
;
69 TestData
* test_data2_
;
72 TEST_F(SupportsUserDataTest
, SetAndGetData
) {
73 EXPECT_FALSE(supports_user_data_
->GetUserData(kTestData1Key
));
74 supports_user_data_
->SetUserData(kTestData1Key
, test_data1_
);
75 EXPECT_EQ(supports_user_data_
->GetUserData(kTestData1Key
), test_data1_
);
78 TEST_F(SupportsUserDataTest
, DataDestroyedOnDestruction
) {
79 EXPECT_FALSE(supports_user_data_
->GetUserData(kTestData1Key
));
80 supports_user_data_
->SetUserData(kTestData1Key
, test_data1_
);
81 EXPECT_FALSE(test_data1_was_destroyed_
);
82 supports_user_data_
.reset();
83 EXPECT_TRUE(test_data1_was_destroyed_
);
86 TEST_F(SupportsUserDataTest
, DataDestroyedOnRemoval
) {
87 EXPECT_FALSE(supports_user_data_
->GetUserData(kTestData1Key
));
88 supports_user_data_
->SetUserData(kTestData1Key
, test_data1_
);
89 EXPECT_FALSE(test_data1_was_destroyed_
);
90 supports_user_data_
->RemoveUserData(kTestData1Key
);
91 EXPECT_TRUE(test_data1_was_destroyed_
);
94 TEST_F(SupportsUserDataTest
, DistinctDataStoredSeparately
) {
95 EXPECT_FALSE(supports_user_data_
->GetUserData(kTestData2Key
));
96 supports_user_data_
->SetUserData(kTestData1Key
, test_data1_
);
97 EXPECT_FALSE(supports_user_data_
->GetUserData(kTestData2Key
));
98 supports_user_data_
->SetUserData(kTestData2Key
, test_data2_
);
99 EXPECT_EQ(supports_user_data_
->GetUserData(kTestData2Key
), test_data2_
);
102 TEST_F(SupportsUserDataTest
, DistinctDataDestroyedSeparately
) {
103 supports_user_data_
->SetUserData(kTestData1Key
, test_data1_
);
104 supports_user_data_
->SetUserData(kTestData2Key
, test_data2_
);
105 EXPECT_FALSE(test_data1_was_destroyed_
);
106 EXPECT_FALSE(test_data2_was_destroyed_
);
108 supports_user_data_
->RemoveUserData(kTestData2Key
);
109 EXPECT_FALSE(test_data1_was_destroyed_
);
110 EXPECT_TRUE(test_data2_was_destroyed_
);
112 supports_user_data_
.reset();
113 EXPECT_TRUE(test_data1_was_destroyed_
);