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