- add sources.
[platform/framework/web/crosswalk.git] / src / ash / shelf / scoped_observer_with_duplicated_sources_unittest.cc
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 }