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
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ash/quick_insert/views/quick_insert_item_with_submenu_view.h"
#include <string>
#include <utility>
#include "ash/quick_insert/views/quick_insert_submenu_controller.h"
#include "ash/style/ash_color_provider.h"
#include "ash/test/view_drawn_waiter.h"
#include "base/functional/callback_helpers.h"
#include "base/test/bind.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/accessibility/ax_node_data.h"
#include "ui/events/event.h"
#include "ui/events/event_constants.h"
#include "ui/events/test/event_generator.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/views/accessibility/view_accessibility.h"
#include "ui/views/test/views_test_base.h"
#include "ui/views/test/widget_test.h"
#include "ui/views/widget/widget_utils.h"
namespace ash {
namespace {
class QuickInsertItemWithSubmenuViewTest : public views::ViewsTestBase {
private:
AshColorProvider provider_;
};
TEST_F(QuickInsertItemWithSubmenuViewTest, HasAccessibilityAttributes) {
QuickInsertItemWithSubmenuView view;
ui::AXNodeData data;
view.GetViewAccessibility().GetAccessibleNodeData(&data);
EXPECT_EQ(data.role, ax::mojom::Role::kPopUpButton);
EXPECT_EQ(data.GetHasPopup(), ax::mojom::HasPopup::kMenu);
}
TEST_F(QuickInsertItemWithSubmenuViewTest, ShowsSubmenu) {
QuickInsertSubmenuController submenu_controller;
auto widget = CreateTestWidget(views::Widget::InitParams::CLIENT_OWNS_WIDGET);
auto* item_view = widget->SetContentsView(
std::make_unique<QuickInsertItemWithSubmenuView>());
item_view->SetText(u"abc");
item_view->SetSubmenuController(&submenu_controller);
widget->Show();
item_view->ShowSubmenu();
views::test::WidgetVisibleWaiter(submenu_controller.widget_for_testing())
.Wait();
}
TEST_F(QuickInsertItemWithSubmenuViewTest, ShowsSubmenuOnMouseEnter) {
QuickInsertSubmenuController submenu_controller;
auto widget = CreateTestWidget(views::Widget::InitParams::CLIENT_OWNS_WIDGET);
auto* item_view = widget->SetContentsView(
std::make_unique<QuickInsertItemWithSubmenuView>());
item_view->SetText(u"abc");
item_view->SetSubmenuController(&submenu_controller);
widget->Show();
item_view->OnMouseEntered(ui::MouseEvent(
ui::EventType::kMouseMoved, gfx::PointF(), gfx::PointF(),
/*time_stamp=*/{}, ui::EF_IS_SYNTHESIZED, ui::EF_LEFT_MOUSE_BUTTON));
views::test::WidgetVisibleWaiter(submenu_controller.widget_for_testing())
.Wait();
}
TEST_F(QuickInsertItemWithSubmenuViewTest, ShowsSubmenuOnGestureTap) {
QuickInsertSubmenuController submenu_controller;
auto widget = CreateTestWidget(views::Widget::InitParams::CLIENT_OWNS_WIDGET);
auto* item_view = widget->SetContentsView(
std::make_unique<QuickInsertItemWithSubmenuView>());
item_view->SetText(u"abc");
item_view->SetSubmenuController(&submenu_controller);
widget->Show();
ViewDrawnWaiter().Wait(item_view);
ui::test::EventGenerator event_generator(GetRootWindow(widget.get()));
event_generator.GestureTapAt(item_view->GetBoundsInScreen().CenterPoint());
views::test::WidgetVisibleWaiter(submenu_controller.widget_for_testing())
.Wait();
}
} // namespace
} // namespace ash
|