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 "base/string_util.h" 6 #include "base/utf_string_conversions.h" 7 #include "chrome/browser/ui/views/status_icons/status_icon_win.h" 8 #include "chrome/browser/ui/views/status_icons/status_tray_win.h" 9 #include "grit/theme_resources.h" 10 #include "testing/gmock/include/gmock/gmock.h" 11 #include "testing/gtest/include/gtest/gtest.h" 12 #include "ui/base/models/simple_menu_model.h" 13 #include "ui/base/resource/resource_bundle.h" 14 15 class SkBitmap; 16 17 class MockStatusIconObserver : public StatusIcon::Observer { 18 public: 19 MOCK_METHOD0(OnClicked, void()); 20 }; 21 22 TEST(StatusTrayWinTest, CreateTray) { 23 // Just tests creation/destruction. 24 StatusTrayWin tray; 25 } 26 27 TEST(StatusTrayWinTest, CreateIconAndMenu) { 28 // Create an icon, set the images, tooltip, and context menu, then shut it 29 // down. 30 StatusTrayWin tray; 31 StatusIcon* icon = tray.CreateStatusIcon(); 32 SkBitmap* bitmap = ResourceBundle::GetSharedInstance().GetBitmapNamed( 33 IDR_STATUS_TRAY_ICON); 34 icon->SetImage(*bitmap); 35 icon->SetPressedImage(*bitmap); 36 icon->SetToolTip(ASCIIToUTF16("tool tip")); 37 ui::SimpleMenuModel* menu = new ui::SimpleMenuModel(NULL); 38 menu->AddItem(0, L"foo"); 39 icon->SetContextMenu(menu); 40 } 41 42 TEST(StatusTrayWinTest, ClickOnIcon) { 43 // Create an icon, send a fake click event, make sure observer is called. 44 StatusTrayWin tray; 45 StatusIconWin* icon = static_cast<StatusIconWin*>(tray.CreateStatusIcon()); 46 MockStatusIconObserver observer; 47 icon->AddObserver(&observer); 48 EXPECT_CALL(observer, OnClicked()); 49 // Mimic a click. 50 tray.WndProc(NULL, icon->message_id(), icon->icon_id(), WM_LBUTTONDOWN); 51 // Mimic a right-click - observer should not be called. 52 tray.WndProc(NULL, icon->message_id(), icon->icon_id(), WM_RBUTTONDOWN); 53 icon->RemoveObserver(&observer); 54 } 55