1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string_util.h"
63345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/utf_string_conversions.h"
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/status_icons/status_icon.h"
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/status_icons/status_tray.h"
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gmock/include/gmock/gmock.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing testing::Return;
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MockStatusIcon : public StatusIcon {
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetImage(const SkBitmap& image) {}
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetPressedImage(const SkBitmap& image) {}
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetToolTip(const string16& tool_tip) {}
18dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void DisplayBalloon(const string16& title,
19dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                              const string16& contents) {}
2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual void UpdatePlatformContextMenu(ui::MenuModel* menu) {}
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void AddObserver(StatusIcon::Observer* observer) {}
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void RemoveObserver(StatusIcon::Observer* observer) {}
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TestStatusTray : public StatusTray {
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  MOCK_METHOD0(CreatePlatformStatusIcon, StatusIcon*());
2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  MOCK_METHOD1(UpdatePlatformContextMenu, void(ui::MenuModel*));
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(StatusTrayTest, Create) {
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Check for creation and leaks.
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestStatusTray tray;
343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_CALL(tray,
353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      CreatePlatformStatusIcon()).WillOnce(Return(new MockStatusIcon()));
363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  tray.CreateStatusIcon();
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Make sure that removing an icon removes it from the list.
403345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickTEST(StatusTrayTest, CreateRemove) {
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestStatusTray tray;
423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_CALL(tray,
433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      CreatePlatformStatusIcon()).WillOnce(Return(new MockStatusIcon()));
443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  StatusIcon* icon = tray.CreateStatusIcon();
453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_EQ(1U, tray.status_icons_.size());
463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  tray.RemoveStatusIcon(icon);
473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_EQ(0U, tray.status_icons_.size());
483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Calling again should do nothing.
493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  tray.RemoveStatusIcon(icon);
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
51