File: status_icon_mac_unittest.mm

package info (click to toggle)
chromium 138.0.7204.183-1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-proposed-updates
  • size: 6,080,960 kB
  • sloc: cpp: 34,937,079; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,954; asm: 946,768; xml: 739,971; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,811; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (82 lines) | stat: -rw-r--r-- 3,199 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/ui/cocoa/status_icons/status_icon_mac.h"

#include <memory>

#include "base/strings/string_util.h"
#include "base/strings/sys_string_conversions.h"
#include "chrome/browser/status_icons/status_icon_menu_model.h"
#import "chrome/browser/ui/cocoa/test/cocoa_test_helper.h"
#include "chrome/grit/chrome_unscaled_resources.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/gtest_mac.h"
#include "ui/base/resource/resource_bundle.h"
#import "ui/menus/cocoa/menu_controller.h"

class SkBitmap;

using StatusIconMacTest = CocoaTest;

TEST_F(StatusIconMacTest, Create) {
  // Create an icon, set the tool tip, then shut it down (checks for leaks).
  std::unique_ptr<StatusIcon> icon = std::make_unique<StatusIconMac>();
  ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
  gfx::ImageSkia* image = rb.GetImageSkiaNamed(IDR_STATUS_TRAY_ICON);
  icon->SetImage(*image);
  icon->SetToolTip(u"tool tip");
}

TEST_F(StatusIconMacTest, CreateMenu) {
  // Create a menu and verify by getting the title of the first menu item.
  const char16_t menu_title[] = u"Menu Title";
  std::unique_ptr<StatusIconMenuModel> model =
      std::make_unique<StatusIconMenuModel>(nullptr);
  model->AddItem(0, menu_title);

  std::unique_ptr<StatusIconMac> icon = std::make_unique<StatusIconMac>();
  icon->UpdatePlatformContextMenu(model.get());
  ASSERT_EQ(1, icon->item().menu.numberOfItems);

  NSMenuItem* menuItem = [icon->item().menu itemAtIndex:0];
  EXPECT_NSEQ(base::SysUTF16ToNSString(menu_title), menuItem.title);
}

TEST_F(StatusIconMacTest, MenuToolTip) {
  // Create a menu and set a tool tip. Verify the tool tip is not inserted as
  // the first menu item.
  const char16_t menu_title[] = u"Menu Title";
  const char16_t tool_tip[] = u"Tool tip";
  std::unique_ptr<StatusIconMenuModel> model =
      std::make_unique<StatusIconMenuModel>(nullptr);
  model->AddItem(0, menu_title);

  std::unique_ptr<StatusIconMac> icon = std::make_unique<StatusIconMac>();
  icon->UpdatePlatformContextMenu(model.get());
  icon->SetToolTip(tool_tip);
  ASSERT_EQ(1, icon->item().menu.numberOfItems);

  NSMenuItem* menu_item = [icon->item().menu itemAtIndex:0];
  EXPECT_NSEQ(base::SysUTF16ToNSString(menu_title), menu_item.title);
}

TEST_F(StatusIconMacTest, SecondaryClickMenuNoToolTip) {
  // Create a status item with a secondary click menu and set a tool tip. Verify
  // the tool tip is not inserted as the first menu item.
  const char16_t menu_title[] = u"Menu Title";
  const char16_t tool_tip[] = u"Tool tip";
  std::unique_ptr<StatusIconMenuModel> model =
      std::make_unique<StatusIconMenuModel>(nullptr);
  model->AddItem(0, menu_title);

  std::unique_ptr<StatusIconMac> icon = std::make_unique<StatusIconMac>();
  icon->SetToolTip(tool_tip);
  icon->SetOpenMenuWithSecondaryClick(true);
  icon->SetContextMenu(std::move(model));
  ASSERT_EQ(0, icon->menu_.menu.numberOfItems);

  EXPECT_NSEQ(base::SysUTF16ToNSString(tool_tip), icon->item().button.toolTip);
}