1// Copyright (c) 2011 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  virtual void DisplayBalloon(const string16& title,
23                              const string16& contents) {}
24};
25
26TEST(StatusIconTest, ObserverAdd) {
27  // Make sure that observers are invoked when we click items.
28  TestStatusIcon icon;
29  MockStatusIconObserver observer, observer2;
30  EXPECT_CALL(observer, OnClicked()).Times(2);
31  EXPECT_CALL(observer2, OnClicked());
32  icon.AddObserver(&observer);
33  icon.DispatchClickEvent();
34  icon.AddObserver(&observer2);
35  icon.DispatchClickEvent();
36  icon.RemoveObserver(&observer);
37  icon.RemoveObserver(&observer2);
38}
39
40TEST(StatusIconTest, ObserverRemove) {
41  // Make sure that observers are no longer invoked after they are removed.
42  TestStatusIcon icon;
43  MockStatusIconObserver observer;
44  EXPECT_CALL(observer, OnClicked());
45  icon.AddObserver(&observer);
46  icon.DispatchClickEvent();
47  icon.RemoveObserver(&observer);
48  icon.DispatchClickEvent();
49}
50