Home | History | Annotate | Download | only in base
      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 
     12 namespace ios {
     13 
     14 namespace {
     15   const char* kTestData1Key = "test_data1";
     16   const char* kTestData2Key = "test_data2";
     17 }  // namespace
     18 
     19 class 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 
     33 class TestSupportsUserData : public SupportsUserData {
     34  public:
     35   TestSupportsUserData() {}
     36   virtual ~TestSupportsUserData() {}
     37 };
     38 
     39 class 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 
     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_);
     76 }
     77 
     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_);
     84 }
     85 
     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_);
     92 }
     93 
     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_);
    100 }
    101 
    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_);
    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