1 // Copyright 2020 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 "ash/display/display_alignment_indicator.h"
6
7 #include "ash/public/cpp/ash_features.h"
8 #include "ash/public/cpp/shell_window_ids.h"
9 #include "ash/shell.h"
10 #include "ash/test/ash_test_base.h"
11 #include "ui/display/manager/display_manager.h"
12 #include "ui/views/widget/widget.h"
13
14 namespace ash {
15
16 class DisplayAlignmentIndicatorTest : public AshTestBase {
17 public:
18 DisplayAlignmentIndicatorTest() = default;
19 ~DisplayAlignmentIndicatorTest() override = default;
20
21 protected:
DoesPillExist(const DisplayAlignmentIndicator & indicator)22 bool DoesPillExist(const DisplayAlignmentIndicator& indicator) {
23 return indicator.pill_widget_ != nullptr;
24 }
25
IsPillVisible(const DisplayAlignmentIndicator & indicator)26 bool IsPillVisible(const DisplayAlignmentIndicator& indicator) {
27 return indicator.pill_widget_ && indicator.pill_widget_->IsVisible();
28 }
29
IsHighlightVisible(const DisplayAlignmentIndicator & indicator)30 bool IsHighlightVisible(const DisplayAlignmentIndicator& indicator) {
31 return indicator.indicator_widget_.IsVisible();
32 }
33 };
34
TEST_F(DisplayAlignmentIndicatorTest,IndicatorWithPill)35 TEST_F(DisplayAlignmentIndicatorTest, IndicatorWithPill) {
36 UpdateDisplay("1920x1080,1366x768");
37
38 const auto& primary_display = display_manager()->GetDisplayAt(0);
39 const auto& secondary_display = display_manager()->GetDisplayAt(1);
40
41 gfx::Rect primary_edge;
42 gfx::Rect secondary_edge;
43
44 ASSERT_TRUE(display::ComputeBoundary(primary_display, secondary_display,
45 &primary_edge, &secondary_edge));
46
47 auto indicator = DisplayAlignmentIndicator::CreateWithPill(
48 primary_display, primary_edge, "test");
49
50 ASSERT_TRUE(DoesPillExist(*indicator));
51 EXPECT_TRUE(IsPillVisible(*indicator));
52 EXPECT_TRUE(IsHighlightVisible(*indicator));
53
54 indicator->Hide();
55
56 EXPECT_FALSE(IsPillVisible(*indicator));
57 EXPECT_FALSE(IsHighlightVisible(*indicator));
58
59 indicator->Show();
60
61 EXPECT_TRUE(IsPillVisible(*indicator));
62 EXPECT_TRUE(IsHighlightVisible(*indicator));
63 }
64
TEST_F(DisplayAlignmentIndicatorTest,IndicatorWithoutPill)65 TEST_F(DisplayAlignmentIndicatorTest, IndicatorWithoutPill) {
66 UpdateDisplay("1920x1080,1366x768");
67
68 const auto& primary_display = display_manager()->GetDisplayAt(0);
69 const auto& secondary_display = display_manager()->GetDisplayAt(1);
70
71 gfx::Rect primary_edge;
72 gfx::Rect secondary_edge;
73
74 ASSERT_TRUE(display::ComputeBoundary(primary_display, secondary_display,
75 &primary_edge, &secondary_edge));
76
77 auto indicator =
78 DisplayAlignmentIndicator::Create(primary_display, primary_edge);
79
80 ASSERT_FALSE(DoesPillExist(*indicator));
81 EXPECT_TRUE(IsHighlightVisible(*indicator));
82
83 indicator->Hide();
84
85 EXPECT_FALSE(IsHighlightVisible(*indicator));
86
87 indicator->Show();
88
89 EXPECT_TRUE(IsHighlightVisible(*indicator));
90 }
91
92 } // namespace ash
93