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