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
9 class 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.
15 class TestStatusIcon : public StatusIcon {
16 public:
TestStatusIcon()17 TestStatusIcon() {}
SetImage(const SkBitmap & image)18 virtual void SetImage(const SkBitmap& image) {}
SetPressedImage(const SkBitmap & image)19 virtual void SetPressedImage(const SkBitmap& image) {}
SetToolTip(const string16 & tool_tip)20 virtual void SetToolTip(const string16& tool_tip) {}
UpdatePlatformContextMenu(ui::MenuModel * menu)21 virtual void UpdatePlatformContextMenu(ui::MenuModel* menu) {}
DisplayBalloon(const string16 & title,const string16 & contents)22 virtual void DisplayBalloon(const string16& title,
23 const string16& contents) {}
24 };
25
TEST(StatusIconTest,ObserverAdd)26 TEST(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
TEST(StatusIconTest,ObserverRemove)40 TEST(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