172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string_util.h" 63345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/utf_string_conversions.h" 772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/status_icons/status_icon_win.h" 872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/status_icons/status_tray_win.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/theme_resources.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gmock/include/gmock/gmock.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/models/simple_menu_model.h" 1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/resource/resource_bundle.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SkBitmap; 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MockStatusIconObserver : public StatusIcon::Observer { 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD0(OnClicked, void()); 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(StatusTrayWinTest, CreateTray) { 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Just tests creation/destruction. 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch StatusTrayWin tray; 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 273345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickTEST(StatusTrayWinTest, CreateIconAndMenu) { 283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Create an icon, set the images, tooltip, and context menu, then shut it 293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // down. 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch StatusTrayWin tray; 313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick StatusIcon* icon = tray.CreateStatusIcon(); 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkBitmap* bitmap = ResourceBundle::GetSharedInstance().GetBitmapNamed( 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IDR_STATUS_TRAY_ICON); 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch icon->SetImage(*bitmap); 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch icon->SetPressedImage(*bitmap); 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch icon->SetToolTip(ASCIIToUTF16("tool tip")); 3772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui::SimpleMenuModel* menu = new ui::SimpleMenuModel(NULL); 383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick menu->AddItem(0, L"foo"); 393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick icon->SetContextMenu(menu); 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(StatusTrayWinTest, ClickOnIcon) { 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Create an icon, send a fake click event, make sure observer is called. 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch StatusTrayWin tray; 453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick StatusIconWin* icon = static_cast<StatusIconWin*>(tray.CreateStatusIcon()); 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MockStatusIconObserver observer; 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch icon->AddObserver(&observer); 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(observer, OnClicked()); 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Mimic a click. 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tray.WndProc(NULL, icon->message_id(), icon->icon_id(), WM_LBUTTONDOWN); 513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Mimic a right-click - observer should not be called. 523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick tray.WndProc(NULL, icon->message_id(), icon->icon_id(), WM_RBUTTONDOWN); 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch icon->RemoveObserver(&observer); 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 55