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