status_tray_win_unittest.cc revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
1// Copyright (c) 2012 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 "chrome/browser/ui/views/status_icons/status_tray_win.h"
6
7#include <commctrl.h>
8
9#include "base/strings/string_util.h"
10#include "base/strings/utf_string_conversions.h"
11#include "chrome/browser/status_icons/status_icon_observer.h"
12#include "chrome/browser/ui/views/status_icons/status_icon_win.h"
13#include "grit/chrome_unscaled_resources.h"
14#include "testing/gtest/include/gtest/gtest.h"
15#include "ui/base/models/simple_menu_model.h"
16#include "ui/base/resource/resource_bundle.h"
17
18class FakeStatusIconObserver : public StatusIconObserver {
19 public:
20  FakeStatusIconObserver()
21      : balloon_clicked_(false),
22        status_icon_click_count_(0) {}
23  virtual void OnStatusIconClicked() {
24    ++status_icon_click_count_;
25  }
26  virtual void OnBalloonClicked() { balloon_clicked_ = true; }
27  bool balloon_clicked() const { return balloon_clicked_; }
28  size_t status_icon_click_count() const {
29    return status_icon_click_count_;
30  }
31
32 private:
33  size_t status_icon_click_count_;
34  bool balloon_clicked_;
35};
36
37TEST(StatusTrayWinTest, CreateTray) {
38  // Just tests creation/destruction.
39  StatusTrayWin tray;
40}
41
42TEST(StatusTrayWinTest, CreateIconAndMenu) {
43  // Create an icon, set the images, tooltip, and context menu, then shut it
44  // down.
45  StatusTrayWin tray;
46  StatusIcon* icon = tray.CreateStatusIcon();
47  ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
48  gfx::ImageSkia* image = rb.GetImageSkiaNamed(IDR_STATUS_TRAY_ICON);
49  icon->SetImage(*image);
50  icon->SetPressedImage(*image);
51  icon->SetToolTip(ASCIIToUTF16("tool tip"));
52  ui::SimpleMenuModel* menu = new ui::SimpleMenuModel(NULL);
53  menu->AddItem(0, L"foo");
54  icon->SetContextMenu(menu);
55}
56
57#if !defined(USE_AURA)  // http://crbug.com/156370
58TEST(StatusTrayWinTest, ClickOnIcon) {
59  // Create an icon, send a fake click event, make sure observer is called.
60  StatusTrayWin tray;
61  StatusIconWin* icon = static_cast<StatusIconWin*>(tray.CreateStatusIcon());
62  FakeStatusIconObserver observer;
63  icon->AddObserver(&observer);
64  // Mimic a click.
65  tray.WndProc(NULL, icon->message_id(), icon->icon_id(), WM_LBUTTONDOWN);
66  // Mimic a right-click - observer should not be called.
67  tray.WndProc(NULL, icon->message_id(), icon->icon_id(), WM_RBUTTONDOWN);
68  EXPECT_EQ(1, observer.status_icon_click_count());
69  icon->RemoveObserver(&observer);
70}
71
72TEST(StatusTrayWinTest, ClickOnBalloon) {
73  // Create an icon, send a fake click event, make sure observer is called.
74  StatusTrayWin tray;
75  StatusIconWin* icon = static_cast<StatusIconWin*>(tray.CreateStatusIcon());
76  FakeStatusIconObserver observer;
77  icon->AddObserver(&observer);
78  // Mimic a click.
79  tray.WndProc(
80      NULL, icon->message_id(), icon->icon_id(), TB_INDETERMINATE);
81  EXPECT_TRUE(observer.balloon_clicked());
82  icon->RemoveObserver(&observer);
83}
84#endif  // !defined(USE_AURA)
85