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/gtk/status_icons/status_icon_gtk.h" 872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/gtk/status_icons/status_tray_gtk.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 Murdochnamespace { 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MockStatusIconObserver : public StatusIcon::Observer { 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD0(OnClicked, void()); 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(StatusTrayGtkTest, CreateTray) { 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Just tests creation/destruction. 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch StatusTrayGtk tray; 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(StatusTrayGtkTest, CreateIcon) { 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Create an icon, set the images and tooltip, then shut it down. 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch StatusTrayGtk tray; 303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick StatusIcon* icon = tray.CreateStatusIcon(); 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkBitmap* bitmap = ResourceBundle::GetSharedInstance().GetBitmapNamed( 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IDR_STATUS_TRAY_ICON); 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch icon->SetImage(*bitmap); 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch icon->SetPressedImage(*bitmap); 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch icon->SetToolTip(ASCIIToUTF16("tool tip")); 3672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui::SimpleMenuModel* menu = new ui::SimpleMenuModel(NULL); 373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick menu->AddItem(0, ASCIIToUTF16("foo")); 383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick icon->SetContextMenu(menu); 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(StatusTrayGtkTest, ClickOnIcon) { 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Create an icon, send a fake click event, make sure observer is called. 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch StatusTrayGtk tray; 443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick StatusIconGtk* icon = static_cast<StatusIconGtk*>(tray.CreateStatusIcon()); 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MockStatusIconObserver observer; 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch icon->AddObserver(&observer); 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(observer, OnClicked()); 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Mimic a click. 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch icon->OnClick(NULL); 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch icon->RemoveObserver(&observer); 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace 54