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