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