1// Copyright (c) 2012 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/compiler_specific.h"
6#include "base/strings/string_util.h"
7#include "base/strings/utf_string_conversions.h"
8#include "chrome/browser/status_icons/status_icon.h"
9#include "chrome/browser/status_icons/status_tray.h"
10#include "grit/chrome_unscaled_resources.h"
11#include "testing/gtest/include/gtest/gtest.h"
12#include "ui/base/resource/resource_bundle.h"
13#include "ui/gfx/image/image_skia.h"
14
15class MockStatusIcon : public StatusIcon {
16  virtual void SetImage(const gfx::ImageSkia& image) OVERRIDE {}
17  virtual void SetToolTip(const base::string16& tool_tip) OVERRIDE {}
18  virtual void DisplayBalloon(const gfx::ImageSkia& icon,
19                              const base::string16& title,
20                              const base::string16& contents) OVERRIDE {}
21  virtual void UpdatePlatformContextMenu(
22      StatusIconMenuModel* menu) OVERRIDE {}
23};
24
25class TestStatusTray : public StatusTray {
26 public:
27  virtual StatusIcon* CreatePlatformStatusIcon(
28      StatusIconType type,
29      const gfx::ImageSkia& image,
30      const base::string16& tool_tip) OVERRIDE {
31    return new MockStatusIcon();
32  }
33
34  const StatusIcons& GetStatusIconsForTest() const { return status_icons(); }
35};
36
37TEST(StatusTrayTest, Create) {
38  // Check for creation and leaks.
39  TestStatusTray tray;
40  ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
41  gfx::ImageSkia* image = rb.GetImageSkiaNamed(IDR_STATUS_TRAY_ICON);
42  tray.CreateStatusIcon(
43      StatusTray::OTHER_ICON, *image, base::ASCIIToUTF16("tool tip"));
44  EXPECT_EQ(1U, tray.GetStatusIconsForTest().size());
45}
46
47// Make sure that removing an icon removes it from the list.
48TEST(StatusTrayTest, CreateRemove) {
49  TestStatusTray tray;
50  ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
51  gfx::ImageSkia* image = rb.GetImageSkiaNamed(IDR_STATUS_TRAY_ICON);
52  StatusIcon* icon = tray.CreateStatusIcon(
53      StatusTray::OTHER_ICON, *image, base::ASCIIToUTF16("tool tip"));
54  EXPECT_EQ(1U, tray.GetStatusIconsForTest().size());
55  tray.RemoveStatusIcon(icon);
56  EXPECT_EQ(0U, tray.GetStatusIconsForTest().size());
57}
58