• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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/wm/workspace/magnetism_matcher.h"
6 
7 #include "testing/gtest/include/gtest/gtest.h"
8 
9 namespace ash {
10 
11 // Trivial test case verifying assertions on left edge.
TEST(MagnetismMatcherTest,TrivialLeft)12 TEST(MagnetismMatcherTest, TrivialLeft) {
13   const int distance = MagnetismMatcher::kMagneticDistance;
14   const gfx::Rect initial_bounds(20, 10, 50, 60);
15   MagnetismMatcher matcher(initial_bounds, kAllMagnetismEdges);
16   EXPECT_FALSE(matcher.AreEdgesObscured());
17   MatchedEdge edge;
18   EXPECT_FALSE(matcher.ShouldAttach(
19                    gfx::Rect(initial_bounds.x() - distance - 10,
20                              initial_bounds.y() - distance - 10, 2, 3), &edge));
21   EXPECT_FALSE(matcher.AreEdgesObscured());
22   EXPECT_TRUE(matcher.ShouldAttach(
23                   gfx::Rect(initial_bounds.x() - 2, initial_bounds.y(), 1, 1),
24                   &edge));
25   EXPECT_EQ(MAGNETISM_EDGE_LEFT, edge.primary_edge);
26   EXPECT_EQ(SECONDARY_MAGNETISM_EDGE_LEADING, edge.secondary_edge);
27 
28   EXPECT_TRUE(matcher.ShouldAttach(
29                   gfx::Rect(initial_bounds.x() - 2,
30                             initial_bounds.y() + distance + 1 , 1, 1),
31                   &edge));
32   EXPECT_EQ(MAGNETISM_EDGE_LEFT, edge.primary_edge);
33   EXPECT_EQ(SECONDARY_MAGNETISM_EDGE_NONE, edge.secondary_edge);
34 }
35 
36 // Trivial test case verifying assertions on bottom edge.
TEST(MagnetismMatcherTest,TrivialBottom)37 TEST(MagnetismMatcherTest, TrivialBottom) {
38   const int distance = MagnetismMatcher::kMagneticDistance;
39   const gfx::Rect initial_bounds(20, 10, 50, 60);
40   MagnetismMatcher matcher(initial_bounds, kAllMagnetismEdges);
41   EXPECT_FALSE(matcher.AreEdgesObscured());
42   MatchedEdge edge;
43   EXPECT_FALSE(matcher.ShouldAttach(
44                    gfx::Rect(initial_bounds.x() - distance - 10,
45                              initial_bounds.y() - distance - 10, 2, 3), &edge));
46   EXPECT_FALSE(matcher.AreEdgesObscured());
47   EXPECT_TRUE(matcher.ShouldAttach(
48                   gfx::Rect(initial_bounds.x() - 2,
49                             initial_bounds.bottom() + 4, 10, 1), &edge));
50   EXPECT_EQ(MAGNETISM_EDGE_BOTTOM, edge.primary_edge);
51   EXPECT_EQ(SECONDARY_MAGNETISM_EDGE_LEADING, edge.secondary_edge);
52 
53   EXPECT_TRUE(matcher.ShouldAttach(
54                   gfx::Rect(initial_bounds.x() + distance + 1,
55                             initial_bounds.bottom() + 4, 10, 1), &edge));
56   EXPECT_EQ(MAGNETISM_EDGE_BOTTOM, edge.primary_edge);
57   EXPECT_EQ(SECONDARY_MAGNETISM_EDGE_NONE, edge.secondary_edge);
58 
59   EXPECT_TRUE(matcher.ShouldAttach(
60                   gfx::Rect(initial_bounds.right() - 10 - 1,
61                             initial_bounds.bottom() + 4, 10, 1), &edge));
62   EXPECT_EQ(MAGNETISM_EDGE_BOTTOM, edge.primary_edge);
63   EXPECT_EQ(SECONDARY_MAGNETISM_EDGE_TRAILING, edge.secondary_edge);
64 }
65 
66 // Verifies we don't match an obscured corner.
TEST(MagnetismMatcherTest,ObscureLeading)67 TEST(MagnetismMatcherTest, ObscureLeading) {
68   const int distance = MagnetismMatcher::kMagneticDistance;
69   const gfx::Rect initial_bounds(20, 10, 150, 160);
70   MagnetismMatcher matcher(initial_bounds, kAllMagnetismEdges);
71   MatchedEdge edge;
72   // Overlap with the upper right corner.
73   EXPECT_FALSE(matcher.ShouldAttach(
74                    gfx::Rect(initial_bounds.right() - distance * 2,
75                              initial_bounds.y() - distance - 2,
76                              distance * 3,
77                              (distance + 2) * 2), &edge));
78   EXPECT_FALSE(matcher.AreEdgesObscured());
79   // Verify doesn't match the following which is obscured by first.
80   EXPECT_FALSE(matcher.ShouldAttach(
81                    gfx::Rect(initial_bounds.right() + 1,
82                              initial_bounds.y(),
83                              distance,
84                              5), &edge));
85   // Should match the following which extends into non-overlapping region.
86   EXPECT_TRUE(matcher.ShouldAttach(
87                    gfx::Rect(initial_bounds.right() + 1,
88                              initial_bounds.y() + distance + 1,
89                              distance,
90                              15), &edge));
91   EXPECT_EQ(MAGNETISM_EDGE_RIGHT, edge.primary_edge);
92   EXPECT_EQ(SECONDARY_MAGNETISM_EDGE_NONE, edge.secondary_edge);
93 }
94 
95 // Verifies obscuring one side doesn't obscure the other.
TEST(MagnetismMatcherTest,DontObscureOtherSide)96 TEST(MagnetismMatcherTest, DontObscureOtherSide) {
97   const int distance = MagnetismMatcher::kMagneticDistance;
98   const gfx::Rect initial_bounds(20, 10, 150, 160);
99   MagnetismMatcher matcher(initial_bounds, kAllMagnetismEdges);
100   MatchedEdge edge;
101   // Overlap with the left side.
102   EXPECT_FALSE(matcher.ShouldAttach(
103                    gfx::Rect(initial_bounds.x() - distance + 1,
104                              initial_bounds.y() + 2,
105                              distance * 2 + 2,
106                              initial_bounds.height() + distance * 4), &edge));
107   EXPECT_FALSE(matcher.AreEdgesObscured());
108   // Should match the right side since it isn't obscured.
109   EXPECT_TRUE(matcher.ShouldAttach(
110                    gfx::Rect(initial_bounds.right() - 1,
111                              initial_bounds.y() + distance + 1,
112                              distance,
113                              5), &edge));
114   EXPECT_EQ(MAGNETISM_EDGE_RIGHT, edge.primary_edge);
115   EXPECT_EQ(SECONDARY_MAGNETISM_EDGE_NONE, edge.secondary_edge);
116 }
117 
118 // Verifies we don't match an obscured center.
TEST(MagnetismMatcherTest,ObscureCenter)119 TEST(MagnetismMatcherTest, ObscureCenter) {
120   const int distance = MagnetismMatcher::kMagneticDistance;
121   const gfx::Rect initial_bounds(20, 10, 150, 160);
122   MagnetismMatcher matcher(initial_bounds, kAllMagnetismEdges);
123   MatchedEdge edge;
124   // Overlap with the center bottom edge.
125   EXPECT_FALSE(matcher.ShouldAttach(
126                    gfx::Rect(100, initial_bounds.bottom() - distance - 2,
127                              20,
128                              (distance + 2) * 2), &edge));
129   EXPECT_FALSE(matcher.AreEdgesObscured());
130   // Verify doesn't match the following which is obscured by first.
131   EXPECT_FALSE(matcher.ShouldAttach(
132                    gfx::Rect(110, initial_bounds.bottom() + 1,
133                              10, 5), &edge));
134   // Should match the following which extends into non-overlapping region.
135   EXPECT_TRUE(matcher.ShouldAttach(
136                   gfx::Rect(90,
137                             initial_bounds.bottom() + 1,
138                             10, 5), &edge));
139   EXPECT_EQ(MAGNETISM_EDGE_BOTTOM, edge.primary_edge);
140   EXPECT_EQ(SECONDARY_MAGNETISM_EDGE_NONE, edge.secondary_edge);
141 }
142 
143 // Verifies we don't match an obscured trailing edge.
TEST(MagnetismMatcherTest,ObscureTrailing)144 TEST(MagnetismMatcherTest, ObscureTrailing) {
145   const int distance = MagnetismMatcher::kMagneticDistance;
146   const gfx::Rect initial_bounds(20, 10, 150, 160);
147   MagnetismMatcher matcher(initial_bounds, kAllMagnetismEdges);
148   MatchedEdge edge;
149   // Overlap with the trailing left edge.
150   EXPECT_FALSE(matcher.ShouldAttach(
151                    gfx::Rect(initial_bounds.x() - distance - 2,
152                              150,
153                              (distance + 2) * 2,
154                              50), &edge));
155   EXPECT_FALSE(matcher.AreEdgesObscured());
156   // Verify doesn't match the following which is obscured by first.
157   EXPECT_FALSE(matcher.ShouldAttach(
158                    gfx::Rect(initial_bounds.x() - 4,
159                              160, 3, 20), &edge));
160   // Should match the following which extends into non-overlapping region.
161   EXPECT_TRUE(matcher.ShouldAttach(
162                    gfx::Rect(initial_bounds.x() - 4,
163                              140, 3, 20), &edge));
164   EXPECT_EQ(MAGNETISM_EDGE_LEFT, edge.primary_edge);
165   EXPECT_EQ(SECONDARY_MAGNETISM_EDGE_NONE, edge.secondary_edge);
166 }
167 
168 }  // namespace ash
169 
170