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. 4 5#include "ios/public/consumer/base/supports_user_data.h" 6 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" 11 12namespace ios { 13 14namespace { 15 const char* kTestData1Key = "test_data1"; 16 const char* kTestData2Key = "test_data2"; 17} // namespace 18 19class TestData : public SupportsUserData::Data { 20 public: 21 TestData(bool* was_destroyed) 22 : was_destroyed_(was_destroyed) { 23 *was_destroyed_ = false; 24 } 25 virtual ~TestData() { 26 *was_destroyed_ = true; 27 } 28 29 private: 30 bool* was_destroyed_; 31}; 32 33class TestSupportsUserData : public SupportsUserData { 34 public: 35 TestSupportsUserData() {} 36 virtual ~TestSupportsUserData() {} 37}; 38 39class SupportsUserDataTest : public PlatformTest { 40 public: 41 virtual void SetUp() OVERRIDE { 42 PlatformTest::SetUp(); 43 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()); 49 } 50 51 virtual void TearDown() OVERRIDE { 52 if (!test_data1_was_destroyed_ && 53 supports_user_data_ && 54 supports_user_data_->GetUserData(kTestData1Key) != test_data1_) 55 delete test_data1_; 56 if (!test_data2_was_destroyed_ && 57 supports_user_data_ && 58 supports_user_data_->GetUserData(kTestData2Key) != test_data2_) 59 delete test_data2_; 60 61 PlatformTest::TearDown(); 62 } 63 64 protected: 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_; 70}; 71 72TEST_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_); 76} 77 78TEST_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_); 84} 85 86TEST_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_); 92} 93 94TEST_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_); 100} 101 102TEST_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_); 107 108 supports_user_data_->RemoveUserData(kTestData2Key); 109 EXPECT_FALSE(test_data1_was_destroyed_); 110 EXPECT_TRUE(test_data2_was_destroyed_); 111 112 supports_user_data_.reset(); 113 EXPECT_TRUE(test_data1_was_destroyed_); 114} 115 116} // namespace ios 117