OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2013 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 "content/browser/web_contents/aura/native_view_screen_bounds_observer.h " | |
6 | |
7 #include "testing/gtest/include/gtest/gtest.h" | |
8 #include "ui/aura/root_window.h" | |
9 #include "ui/aura/test/aura_test_base.h" | |
10 #include "ui/aura/window.h" | |
11 | |
12 namespace content { | |
13 | |
14 class NativeViewScreenBoundsObserverDelegateStub | |
15 : public NativeViewScreenBoundsObserverDelegate { | |
16 public: | |
17 NativeViewScreenBoundsObserverDelegateStub() : window_(NULL), | |
18 position_changed_count_(0), | |
19 bounds_changed_count_(0) { | |
20 } | |
21 virtual ~NativeViewScreenBoundsObserverDelegateStub() { } | |
22 | |
23 void SetDelegateWindow(aura::Window* window) { window_ = window; } | |
24 | |
25 void ClearCounts() { | |
26 position_changed_count_ = 0; | |
27 bounds_changed_count_ = 0; | |
28 } | |
29 | |
30 int GetPositionChangedCount() { | |
31 return position_changed_count_; | |
32 } | |
33 | |
34 int GetBoundsChangedCount() { | |
35 return bounds_changed_count_; | |
36 } | |
37 | |
38 // Overriden from NativeViewScreenBoundsObserverDelegate | |
39 virtual aura::Window* GetDelegateWindow() OVERRIDE { return window_; } | |
40 virtual void AddDelegateWindowObserver(aura::WindowObserver* observer) | |
41 OVERRIDE {} | |
42 virtual void RemoveDelegateWindowObserver(aura::WindowObserver* observer) | |
43 OVERRIDE {} | |
44 virtual void RemoveRootWindowObserver(aura::RootWindowObserver* observer) | |
45 OVERRIDE {} | |
46 virtual void AddRootWindowObserver(aura::RootWindowObserver* observer) | |
47 OVERRIDE {} | |
48 virtual void OnScreenPositionChanged() OVERRIDE { | |
49 position_changed_count_++; | |
50 } | |
51 virtual void OnScreenBoundsChanged() OVERRIDE { | |
52 bounds_changed_count_++; | |
53 } | |
54 | |
55 private: | |
56 aura::Window* window_; | |
57 int position_changed_count_; | |
58 int bounds_changed_count_; | |
59 | |
60 DISALLOW_COPY_AND_ASSIGN(NativeViewScreenBoundsObserverDelegateStub); | |
61 }; | |
62 | |
63 class NativeViewScreenBoundsObserverTest : public aura::test::AuraTestBase { | |
64 public: | |
65 NativeViewScreenBoundsObserverTest() {} | |
66 virtual ~NativeViewScreenBoundsObserverTest() { } | |
67 | |
68 virtual void SetUp() { | |
69 aura::test::AuraTestBase::SetUp(); | |
70 observer_.Init(&delegate_); | |
71 } | |
72 | |
73 bool IsWindowInSet(aura::Window* window, std::set<aura::Window*> windows) { | |
74 return (windows.end() != windows.find(window)); | |
75 } | |
76 | |
77 bool IsWindowObserved(aura::Window* window) { | |
78 return IsWindowInSet(window, observed()); | |
sadrul
2013/11/08 02:16:26
Use aura::Window::HasObserver() to determine this
rharrison
2013/11/12 22:16:29
Done.
| |
79 } | |
80 | |
81 std::set<aura::Window*> observed() { return observer_.observed_; } | |
82 | |
83 void ClearObserver() { | |
84 observer_.RemoveFromObserved(observed()); | |
85 delegate_.RemoveRootWindowObserver(&observer_); | |
86 delegate_.RemoveDelegateWindowObserver(&observer_); | |
87 } | |
88 | |
89 std::set<aura::Window*> GenerateAncestors(aura::Window* window) { | |
90 return observer_.GenerateAncestors(window); | |
91 } | |
92 | |
93 void AddToObserved(const std::set<aura::Window*>& windows) { | |
94 observer_.AddToObserved(windows); | |
95 } | |
96 | |
97 void RemoveFromObserved(const std::set<aura::Window*>& windows) { | |
98 observer_.RemoveFromObserved(windows); | |
99 } | |
100 | |
101 NativeViewScreenBoundsObserver observer_; | |
102 NativeViewScreenBoundsObserverDelegateStub delegate_; | |
103 }; | |
104 | |
105 TEST_F(NativeViewScreenBoundsObserverTest, Init) { | |
106 EXPECT_EQ(static_cast<unsigned int>(0), observed().size()); | |
sadrul
2013/11/08 02:16:26
EXPECT_EQ(0u, observed().size())
rharrison
2013/11/12 22:16:29
Done.
| |
107 ClearObserver(); | |
108 | |
109 // observed count is the number of windows created + 1 due to the root_window | |
110 // being at the top. | |
111 aura::Window* delegate_window = CreateNormalWindow(0, root_window(), NULL); | |
112 delegate_.SetDelegateWindow(delegate_window); | |
113 observer_.Init(&delegate_); | |
114 EXPECT_EQ(static_cast<unsigned int>(2), observed().size()); | |
115 EXPECT_TRUE(IsWindowObserved(delegate_window)); | |
116 ClearObserver(); | |
117 | |
118 aura::Window* parent_window = CreateNormalWindow(0, root_window(), NULL); | |
119 parent_window->AddChild(delegate_window); | |
120 observer_.Init(&delegate_); | |
121 EXPECT_EQ(static_cast<unsigned int>(3), observed().size()); | |
122 EXPECT_TRUE(IsWindowObserved(delegate_window)); | |
123 EXPECT_TRUE(IsWindowObserved(parent_window)); | |
124 ClearObserver(); | |
125 | |
126 aura::Window* grandparent_window = CreateNormalWindow(0, root_window(), NULL); | |
127 grandparent_window->AddChild(parent_window); | |
128 observer_.Init(&delegate_); | |
129 EXPECT_EQ(static_cast<unsigned int>(4), observed().size()); | |
130 EXPECT_TRUE(IsWindowObserved(delegate_window)); | |
131 EXPECT_TRUE(IsWindowObserved(parent_window)); | |
132 EXPECT_TRUE(IsWindowObserved(grandparent_window)); | |
133 ClearObserver(); | |
134 } | |
135 | |
136 TEST_F(NativeViewScreenBoundsObserverTest, OnWindowParentChanged) { | |
137 aura::Window* delegate_window = CreateNormalWindow(0, root_window(), NULL); | |
138 delegate_.SetDelegateWindow(delegate_window); | |
139 observer_.Init(&delegate_); | |
140 EXPECT_EQ(static_cast<unsigned int>(2), observed().size()); | |
141 EXPECT_TRUE(IsWindowObserved(delegate_window)); | |
142 | |
143 aura::Window* parent_window = CreateNormalWindow(0, root_window(), NULL); | |
144 parent_window->AddChild(delegate_window); | |
145 EXPECT_EQ(static_cast<unsigned int>(3), observed().size()); | |
146 EXPECT_TRUE(IsWindowObserved(delegate_window)); | |
147 EXPECT_TRUE(IsWindowObserved(parent_window)); | |
148 | |
149 aura::Window* grandparent_window = CreateNormalWindow(0, root_window(), NULL); | |
150 grandparent_window->AddChild(parent_window); | |
151 EXPECT_EQ(static_cast<unsigned int>(4), observed().size()); | |
152 EXPECT_TRUE(IsWindowObserved(delegate_window)); | |
153 EXPECT_TRUE(IsWindowObserved(parent_window)); | |
154 EXPECT_TRUE(IsWindowObserved(grandparent_window)); | |
155 | |
156 aura::Window* new_parent_window = CreateNormalWindow(0, root_window(), NULL); | |
157 new_parent_window->AddChild(delegate_window); | |
158 EXPECT_EQ(static_cast<unsigned int>(3), observed().size()); | |
159 EXPECT_TRUE(IsWindowObserved(delegate_window)); | |
160 EXPECT_FALSE(IsWindowObserved(parent_window)); | |
161 EXPECT_FALSE(IsWindowObserved(grandparent_window)); | |
162 EXPECT_TRUE(IsWindowObserved(new_parent_window)); | |
163 | |
164 grandparent_window->AddChild(new_parent_window); | |
165 EXPECT_EQ(static_cast<unsigned int>(4), observed().size()); | |
166 EXPECT_TRUE(IsWindowObserved(delegate_window)); | |
167 EXPECT_FALSE(IsWindowObserved(parent_window)); | |
168 EXPECT_TRUE(IsWindowObserved(grandparent_window)); | |
169 EXPECT_TRUE(IsWindowObserved(new_parent_window)); | |
sadrul
2013/11/08 02:16:26
Add some expectations on Position/BoundsChangedCou
rharrison
2013/11/12 22:16:29
Added additional additional cases in OnWindowBound
| |
170 } | |
171 | |
172 TEST_F(NativeViewScreenBoundsObserverTest, OnWindowBoundsChanged) { | |
173 gfx::Rect base_bounds(0, 0, 400, 400); | |
174 gfx::Rect resized_bounds(0, 0, 200, 200); | |
175 gfx::Rect moved_bounds(100, 100, 400, 400); | |
176 | |
177 aura::Window* delegate_window = CreateNormalWindow(0, root_window(), NULL); | |
178 delegate_window->SetBounds(base_bounds); | |
179 delegate_.SetDelegateWindow(delegate_window); | |
180 observer_.Init(&delegate_); | |
181 delegate_.ClearCounts(); | |
182 delegate_window->SetBounds(resized_bounds); | |
183 EXPECT_EQ(0, delegate_.GetPositionChangedCount()); | |
184 EXPECT_EQ(1, delegate_.GetBoundsChangedCount()); | |
185 | |
186 delegate_window->SetBounds(base_bounds); | |
187 delegate_.ClearCounts(); | |
188 delegate_window->SetBounds(moved_bounds); | |
189 EXPECT_EQ(1, delegate_.GetPositionChangedCount()); | |
190 EXPECT_EQ(0, delegate_.GetBoundsChangedCount()); | |
191 | |
192 aura::Window* parent_window = CreateNormalWindow(0, root_window(), NULL); | |
193 parent_window->SetBounds(base_bounds); | |
194 parent_window->AddChild(delegate_window); | |
195 delegate_.ClearCounts(); | |
196 parent_window->SetBounds(resized_bounds); | |
197 EXPECT_EQ(0, delegate_.GetPositionChangedCount()); | |
198 EXPECT_EQ(1, delegate_.GetBoundsChangedCount()); | |
199 | |
200 parent_window->SetBounds(base_bounds); | |
201 delegate_.ClearCounts(); | |
202 parent_window->SetBounds(moved_bounds); | |
203 EXPECT_EQ(1, delegate_.GetPositionChangedCount()); | |
204 EXPECT_EQ(0, delegate_.GetBoundsChangedCount()); | |
205 } | |
206 | |
207 TEST_F(NativeViewScreenBoundsObserverTest, GenerateAncestors) { | |
208 aura::Window* child_window = CreateNormalWindow(0, root_window(), NULL); | |
209 std::set<aura::Window*> ancestors; | |
210 ancestors = GenerateAncestors(child_window); | |
211 EXPECT_EQ(static_cast<unsigned int>(1), ancestors.size()); | |
212 EXPECT_FALSE(IsWindowInSet(child_window, ancestors)); | |
213 | |
214 aura::Window* parent_window = CreateNormalWindow(0, root_window(), NULL); | |
215 parent_window->AddChild(child_window); | |
216 ancestors = GenerateAncestors(child_window); | |
217 EXPECT_EQ(static_cast<unsigned int>(2), ancestors.size()); | |
218 EXPECT_FALSE(IsWindowInSet(child_window, ancestors)); | |
219 EXPECT_TRUE(IsWindowInSet(parent_window, ancestors)); | |
220 | |
221 aura::Window* grandparent_window = CreateNormalWindow(0, root_window(), NULL); | |
222 grandparent_window->AddChild(parent_window); | |
223 ancestors = GenerateAncestors(child_window); | |
224 EXPECT_EQ(static_cast<unsigned int>(3), ancestors.size()); | |
225 EXPECT_FALSE(IsWindowInSet(child_window, ancestors)); | |
226 EXPECT_TRUE(IsWindowInSet(parent_window, ancestors)); | |
227 EXPECT_TRUE(IsWindowInSet(grandparent_window, ancestors)); | |
228 } | |
229 | |
230 TEST_F(NativeViewScreenBoundsObserverTest, AddToObserved) { | |
231 std::set<aura::Window*> windows; | |
232 aura::Window* child_window = CreateNormalWindow(0, root_window(), NULL); | |
233 windows.insert(child_window); | |
234 AddToObserved(windows); | |
235 EXPECT_EQ(static_cast<unsigned int>(1), observed().size()); | |
236 EXPECT_TRUE(IsWindowObserved(child_window)); | |
237 | |
238 aura::Window* parent_window = CreateNormalWindow(0, root_window(), NULL); | |
239 windows.insert(parent_window); | |
240 AddToObserved(windows); | |
241 EXPECT_EQ(static_cast<unsigned int>(2), observed().size()); | |
242 EXPECT_TRUE(IsWindowObserved(child_window)); | |
243 EXPECT_TRUE(IsWindowObserved(parent_window)); | |
244 | |
245 aura::Window* grandparent_window = CreateNormalWindow(0, root_window(), NULL); | |
246 windows.clear(); | |
247 windows.insert(grandparent_window); | |
248 AddToObserved(windows); | |
249 EXPECT_EQ(static_cast<unsigned int>(3), observed().size()); | |
250 EXPECT_TRUE(IsWindowObserved(child_window)); | |
251 EXPECT_TRUE(IsWindowObserved(parent_window)); | |
252 EXPECT_TRUE(IsWindowObserved(grandparent_window)); | |
253 } | |
254 | |
255 TEST_F(NativeViewScreenBoundsObserverTest, RemoveFromObserved) { | |
sadrul
2013/11/08 02:16:26
I am not sure what we are testing in these last th
rharrison
2013/11/12 22:16:29
I don't think they are adding more coverage, remov
| |
256 aura::Window* child_window = CreateNormalWindow(0, root_window(), NULL); | |
257 aura::Window* parent_window = CreateNormalWindow(0, root_window(), NULL); | |
258 aura::Window* grandparent_window = CreateNormalWindow(0, root_window(), NULL); | |
259 std::set<aura::Window*> base_windows; | |
260 base_windows.insert(child_window); | |
261 base_windows.insert(parent_window); | |
262 base_windows.insert(grandparent_window); | |
263 | |
264 std::set<aura::Window*> removed_windows; | |
265 AddToObserved(base_windows); | |
266 RemoveFromObserved(removed_windows); | |
267 EXPECT_EQ(static_cast<unsigned int>(3), observed().size()); | |
268 EXPECT_TRUE(IsWindowObserved(child_window)); | |
269 EXPECT_TRUE(IsWindowObserved(parent_window)); | |
270 EXPECT_TRUE(IsWindowObserved(grandparent_window)); | |
271 | |
272 removed_windows = base_windows; | |
273 RemoveFromObserved(removed_windows); | |
274 EXPECT_EQ(static_cast<unsigned int>(0), observed().size()); | |
275 EXPECT_FALSE(IsWindowObserved(child_window)); | |
276 EXPECT_FALSE(IsWindowObserved(parent_window)); | |
277 EXPECT_FALSE(IsWindowObserved(grandparent_window)); | |
278 | |
279 AddToObserved(base_windows); | |
280 removed_windows.clear(); | |
281 removed_windows.insert(parent_window); | |
282 RemoveFromObserved(removed_windows); | |
283 EXPECT_EQ(static_cast<unsigned int>(2), observed().size()); | |
284 EXPECT_TRUE(IsWindowObserved(child_window)); | |
285 EXPECT_FALSE(IsWindowObserved(parent_window)); | |
286 EXPECT_TRUE(IsWindowObserved(grandparent_window)); | |
287 | |
288 removed_windows.clear(); | |
289 removed_windows.insert(parent_window); | |
290 RemoveFromObserved(removed_windows); | |
291 EXPECT_EQ(static_cast<unsigned int>(2), observed().size()); | |
292 EXPECT_TRUE(IsWindowObserved(child_window)); | |
293 EXPECT_FALSE(IsWindowObserved(parent_window)); | |
294 EXPECT_TRUE(IsWindowObserved(grandparent_window)); | |
295 | |
296 removed_windows.clear(); | |
297 removed_windows.insert(child_window); | |
298 RemoveFromObserved(removed_windows); | |
299 EXPECT_EQ(static_cast<unsigned int>(1), observed().size()); | |
300 EXPECT_FALSE(IsWindowObserved(child_window)); | |
301 EXPECT_FALSE(IsWindowObserved(parent_window)); | |
302 EXPECT_TRUE(IsWindowObserved(grandparent_window)); | |
303 | |
304 removed_windows.clear(); | |
305 removed_windows.insert(grandparent_window); | |
306 RemoveFromObserved(removed_windows); | |
307 EXPECT_EQ(static_cast<unsigned int>(0), observed().size()); | |
308 EXPECT_FALSE(IsWindowObserved(child_window)); | |
309 EXPECT_FALSE(IsWindowObserved(parent_window)); | |
310 EXPECT_FALSE(IsWindowObserved(grandparent_window)); | |
311 } | |
312 | |
313 } // namespace content | |
OLD | NEW |