status_icon_unittest.cc revision 72a454cd3513ac24fbdd0e0cb9ad70b86a99b801
1// Copyright (c) 2010 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 "chrome/browser/status_icons/status_icon.h"
6#include "testing/gmock/include/gmock/gmock.h"
7#include "testing/gtest/include/gtest/gtest.h"
8
9class MockStatusIconObserver : public StatusIcon::Observer {
10 public:
11  MOCK_METHOD0(OnClicked, void());
12};
13
14// Define pure virtual functions so we can test base class functionality.
15class TestStatusIcon : public StatusIcon {
16 public:
17  TestStatusIcon() {}
18  virtual void SetImage(const SkBitmap& image) {}
19  virtual void SetPressedImage(const SkBitmap& image) {}
20  virtual void SetToolTip(const string16& tool_tip) {}
21  virtual void UpdatePlatformContextMenu(ui::MenuModel* menu) {}
22};
23
24TEST(StatusIconTest, ObserverAdd) {
25  // Make sure that observers are invoked when we click items.
26  TestStatusIcon icon;
27  MockStatusIconObserver observer, observer2;
28  EXPECT_CALL(observer, OnClicked()).Times(2);
29  EXPECT_CALL(observer2, OnClicked());
30  icon.AddObserver(&observer);
31  icon.DispatchClickEvent();
32  icon.AddObserver(&observer2);
33  icon.DispatchClickEvent();
34  icon.RemoveObserver(&observer);
35  icon.RemoveObserver(&observer2);
36}
37
38TEST(StatusIconTest, ObserverRemove) {
39  // Make sure that observers are no longer invoked after they are removed.
40  TestStatusIcon icon;
41  MockStatusIconObserver observer;
42  EXPECT_CALL(observer, OnClicked());
43  icon.AddObserver(&observer);
44  icon.DispatchClickEvent();
45  icon.RemoveObserver(&observer);
46  icon.DispatchClickEvent();
47}
48