status_icon_unittest.cc revision 72a454cd3513ac24fbdd0e0cb9ad70b86a99b801
1// Copyright (c) 2010 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 9class 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. 15class 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}; 23 24TEST(StatusIconTest, ObserverAdd) { 25 // Make sure that observers are invoked when we click items. 26 TestStatusIcon icon; 27 MockStatusIconObserver observer, observer2; 28 EXPECT_CALL(observer, OnClicked()).Times(2); 29 EXPECT_CALL(observer2, OnClicked()); 30 icon.AddObserver(&observer); 31 icon.DispatchClickEvent(); 32 icon.AddObserver(&observer2); 33 icon.DispatchClickEvent(); 34 icon.RemoveObserver(&observer); 35 icon.RemoveObserver(&observer2); 36} 37 38TEST(StatusIconTest, ObserverRemove) { 39 // Make sure that observers are no longer invoked after they are removed. 40 TestStatusIcon icon; 41 MockStatusIconObserver observer; 42 EXPECT_CALL(observer, OnClicked()); 43 icon.AddObserver(&observer); 44 icon.DispatchClickEvent(); 45 icon.RemoveObserver(&observer); 46 icon.DispatchClickEvent(); 47} 48