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 "chrome/browser/status_icons/status_icon.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gmock/include/gmock/gmock.h" 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MockStatusIconObserver : public StatusIcon::Observer { 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD0(OnClicked, void()); 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Define pure virtual functions so we can test base class functionality. 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TestStatusIcon : public StatusIcon { 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TestStatusIcon() {} 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetImage(const SkBitmap& image) {} 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetPressedImage(const SkBitmap& image) {} 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetToolTip(const string16& tool_tip) {} 2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void UpdatePlatformContextMenu(ui::MenuModel* menu) {} 22dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void DisplayBalloon(const string16& title, 23dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const string16& contents) {} 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(StatusIconTest, ObserverAdd) { 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Make sure that observers are invoked when we click items. 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TestStatusIcon icon; 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MockStatusIconObserver observer, observer2; 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(observer, OnClicked()).Times(2); 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(observer2, OnClicked()); 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch icon.AddObserver(&observer); 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch icon.DispatchClickEvent(); 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch icon.AddObserver(&observer2); 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch icon.DispatchClickEvent(); 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch icon.RemoveObserver(&observer); 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch icon.RemoveObserver(&observer2); 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(StatusIconTest, ObserverRemove) { 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Make sure that observers are no longer invoked after they are removed. 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TestStatusIcon icon; 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MockStatusIconObserver observer; 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(observer, OnClicked()); 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch icon.AddObserver(&observer); 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch icon.DispatchClickEvent(); 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch icon.RemoveObserver(&observer); 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch icon.DispatchClickEvent(); 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 50