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 "base/string_util.h"
6 #include "base/utf_string_conversions.h"
7 #include "chrome/browser/status_icons/status_icon.h"
8 #include "chrome/browser/status_icons/status_tray.h"
9 #include "testing/gmock/include/gmock/gmock.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 using testing::Return;
13
14 class MockStatusIcon : public StatusIcon {
SetImage(const SkBitmap & image)15 virtual void SetImage(const SkBitmap& image) {}
SetPressedImage(const SkBitmap & image)16 virtual void SetPressedImage(const SkBitmap& image) {}
SetToolTip(const string16 & tool_tip)17 virtual void SetToolTip(const string16& tool_tip) {}
DisplayBalloon(const string16 & title,const string16 & contents)18 virtual void DisplayBalloon(const string16& title,
19 const string16& contents) {}
UpdatePlatformContextMenu(ui::MenuModel * menu)20 virtual void UpdatePlatformContextMenu(ui::MenuModel* menu) {}
AddObserver(StatusIcon::Observer * observer)21 virtual void AddObserver(StatusIcon::Observer* observer) {}
RemoveObserver(StatusIcon::Observer * observer)22 virtual void RemoveObserver(StatusIcon::Observer* observer) {}
23 };
24
25 class TestStatusTray : public StatusTray {
26 public:
27 MOCK_METHOD0(CreatePlatformStatusIcon, StatusIcon*());
28 MOCK_METHOD1(UpdatePlatformContextMenu, void(ui::MenuModel*));
29 };
30
TEST(StatusTrayTest,Create)31 TEST(StatusTrayTest, Create) {
32 // Check for creation and leaks.
33 TestStatusTray tray;
34 EXPECT_CALL(tray,
35 CreatePlatformStatusIcon()).WillOnce(Return(new MockStatusIcon()));
36 tray.CreateStatusIcon();
37 }
38
39 // Make sure that removing an icon removes it from the list.
TEST(StatusTrayTest,CreateRemove)40 TEST(StatusTrayTest, CreateRemove) {
41 TestStatusTray tray;
42 EXPECT_CALL(tray,
43 CreatePlatformStatusIcon()).WillOnce(Return(new MockStatusIcon()));
44 StatusIcon* icon = tray.CreateStatusIcon();
45 EXPECT_EQ(1U, tray.status_icons_.size());
46 tray.RemoveStatusIcon(icon);
47 EXPECT_EQ(0U, tray.status_icons_.size());
48 // Calling again should do nothing.
49 tray.RemoveStatusIcon(icon);
50 }
51