Home | History | Annotate | Download | only in shelf
      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 "ash/shelf/scoped_observer_with_duplicated_sources.h"
      6 
      7 #include "base/memory/scoped_ptr.h"
      8 #include "testing/gtest/include/gtest/gtest.h"
      9 
     10 class TestObserver {
     11  public:
     12   TestObserver() {}
     13   ~TestObserver() {}
     14 
     15  private:
     16   DISALLOW_COPY_AND_ASSIGN(TestObserver);
     17 };
     18 
     19 class TestSource {
     20  public:
     21   TestSource() : observer_count_(0) {}
     22   ~TestSource() {}
     23 
     24   void AddObserver(TestObserver* observer) {
     25     observer_count_++;
     26   }
     27   void RemoveObserver(TestObserver* observer) {
     28     observer_count_--;
     29   }
     30 
     31   int GetObserverCount() {
     32     return observer_count_;
     33   }
     34 
     35  private:
     36   int observer_count_;
     37 
     38   DISALLOW_COPY_AND_ASSIGN(TestSource);
     39 };
     40 
     41 TEST(ScopedObserverWithDuplicatedSourcesTest, DuplicatedSource) {
     42   TestObserver observer;
     43   TestSource source1;
     44   TestSource source2;
     45 
     46   ScopedObserverWithDuplicatedSources<TestSource, TestObserver>
     47       observers(&observer);
     48   EXPECT_EQ(0, source1.GetObserverCount());
     49   EXPECT_FALSE(observers.IsObserving(&source1));
     50   EXPECT_EQ(0, source2.GetObserverCount());
     51   EXPECT_FALSE(observers.IsObserving(&source2));
     52 
     53   // Add |source1|.
     54   observers.Add(&source1);
     55   EXPECT_EQ(1, source1.GetObserverCount());
     56   EXPECT_TRUE(observers.IsObserving(&source1));
     57   // AddObserver of TestSource is called only once.
     58   observers.Add(&source1);
     59   EXPECT_EQ(1, source1.GetObserverCount());
     60   EXPECT_TRUE(observers.IsObserving(&source1));
     61 
     62   // Add |source2|.
     63   observers.Add(&source2);
     64   EXPECT_EQ(1, source2.GetObserverCount());
     65   EXPECT_TRUE(observers.IsObserving(&source2));
     66 
     67   // Remove |source1|.
     68   observers.Remove(&source1);
     69   EXPECT_EQ(1, source1.GetObserverCount());
     70   EXPECT_TRUE(observers.IsObserving(&source1));
     71 
     72   // Remove |source2|.
     73   observers.Remove(&source2);
     74   EXPECT_EQ(0, source2.GetObserverCount());
     75   EXPECT_FALSE(observers.IsObserving(&source2));
     76 
     77   // Remove |source1| again.
     78   observers.Remove(&source1);
     79   // In this time, |observer| is removed from |source1|.
     80   EXPECT_EQ(0, source1.GetObserverCount());
     81   EXPECT_FALSE(observers.IsObserving(&source1));
     82 }
     83