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