File: menu_test_base.cc

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 (104 lines) | stat: -rw-r--r-- 3,534 bytes parent folder | download | duplicates (5)
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// Copyright 2014 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/views/menu_test_base.h"

#include <utility>

#include "base/strings/utf_string_conversions.h"
#include "chrome/test/base/interactive_test_utils.h"
#include "chrome/test/base/ui_test_utils.h"
#include "ui/base/mojom/menu_source_type.mojom.h"
#include "ui/base/test/ui_controls.h"
#include "ui/views/accessibility/ax_update_notifier.h"
#include "ui/views/controls/button/menu_button.h"
#include "ui/views/controls/menu/menu_item_view.h"
#include "ui/views/controls/menu/menu_runner.h"
#include "ui/views/test/menu_test_utils.h"
#include "ui/views/widget/widget.h"

MenuTestBase::MenuTestBase() : last_command_(0) {
  ax_event_counts_.fill(0);
  views::AXUpdateNotifier::Get()->AddObserver(this);
}

MenuTestBase::~MenuTestBase() {
  views::AXUpdateNotifier::Get()->RemoveObserver(this);
}

void MenuTestBase::OnViewEvent(views::View*, ax::mojom::Event event_type) {
  ++ax_event_counts_[static_cast<size_t>(event_type)];
}

int MenuTestBase::GetAXEventCount(ax::mojom::Event event_type) const {
  return ax_event_counts_[static_cast<size_t>(event_type)];
}

void MenuTestBase::Click(views::View* view, base::OnceClosure next) {
  ui_test_utils::MoveMouseToCenterAndClick(view, ui_controls::LEFT,
                                           ui_controls::DOWN | ui_controls::UP,
                                           std::move(next));
  views::test::WaitForMenuClosureAnimation();
}

void MenuTestBase::KeyPress(ui::KeyboardCode keycode, base::OnceClosure next) {
  ui_controls::SendKeyPressNotifyWhenDone(window()->GetNativeWindow(), keycode,
                                          false, false, false, false,
                                          std::move(next));
}

int MenuTestBase::GetMenuRunnerFlags() {
  return views::MenuRunner::HAS_MNEMONICS;
}

void MenuTestBase::SetUp() {
  ViewEventTestBase::SetUp();

  views::test::DisableMenuClosureAnimations();

  auto menu_owning = std::make_unique<views::MenuItemView>(/*delegate=*/this);
  menu_ = menu_owning.get();
  BuildMenu(menu_);
  menu_runner_ = std::make_unique<views::MenuRunner>(std::move(menu_owning),
                                                     GetMenuRunnerFlags());
}

void MenuTestBase::TearDown() {
  button_ = nullptr;
  menu_ = nullptr;
  // We cancel the menu first because certain operations (like a menu opened
  // with views::MenuRunner::FOR_DROP) don't take kindly to simply pulling the
  // runner out from under them.
  menu_runner_->Cancel();
  menu_runner_.reset();

  ViewEventTestBase::TearDown();
}

std::unique_ptr<views::View> MenuTestBase::CreateContentsView() {
  auto button = std::make_unique<views::MenuButton>(
      base::BindRepeating(&MenuTestBase::ButtonPressed, base::Unretained(this)),
      u"Menu Test");
  button_ = button.get();
  return button;
}

void MenuTestBase::DoTestOnMessageLoop() {
  Click(button_, CreateEventTask(this, &MenuTestBase::DoTestWithMenuOpen));
}

gfx::Size MenuTestBase::GetPreferredSizeForContents() const {
  return button_->GetPreferredSize();
}

void MenuTestBase::ButtonPressed() {
  menu_runner_->RunMenuAt(button_->GetWidget(), button_->button_controller(),
                          button_->GetBoundsInScreen(),
                          views::MenuAnchorPosition::kTopLeft,
                          ui::mojom::MenuSourceType::kNone);
}

void MenuTestBase::ExecuteCommand(int id) {
  last_command_ = id;
}