15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/status_icons/status_icon.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/status_icons/status_icon_observer.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockStatusIconObserver : public StatusIconObserver { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(OnStatusIconClicked, void()); 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Define pure virtual functions so we can test base class functionality. 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestStatusIcon : public StatusIcon { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestStatusIcon() {} 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetImage(const gfx::ImageSkia& image) OVERRIDE {} 22a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void SetToolTip(const base::string16& tool_tip) OVERRIDE {} 23424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual void UpdatePlatformContextMenu( 24424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) StatusIconMenuModel* menu) OVERRIDE {} 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DisplayBalloon(const gfx::ImageSkia& icon, 26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& title, 27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& contents) OVERRIDE {} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(StatusIconTest, ObserverAdd) { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure that observers are invoked when we click items. 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestStatusIcon icon; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStatusIconObserver observer, observer2; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(observer, OnStatusIconClicked()).Times(2); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(observer2, OnStatusIconClicked()); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) icon.AddObserver(&observer); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) icon.DispatchClickEvent(); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) icon.AddObserver(&observer2); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) icon.DispatchClickEvent(); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) icon.RemoveObserver(&observer); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) icon.RemoveObserver(&observer2); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(StatusIconTest, ObserverRemove) { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure that observers are no longer invoked after they are removed. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestStatusIcon icon; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStatusIconObserver observer; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(observer, OnStatusIconClicked()); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) icon.AddObserver(&observer); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) icon.DispatchClickEvent(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) icon.RemoveObserver(&observer); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) icon.DispatchClickEvent(); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 54