Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(427)

Side by Side Diff: athena/wm/window_list_provider_impl_unittest.cc

Issue 480293003: Adding functions to the window_list_provider for accessing the activities window list (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « athena/wm/window_list_provider_impl.cc ('k') | athena/wm/window_manager_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "athena/wm/window_list_provider_impl.h" 5 #include "athena/wm/window_list_provider_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "athena/test/athena_test_base.h" 9 #include "athena/test/athena_test_base.h"
10 #include "athena/wm/public/window_list_provider_observer.h"
10 #include "ui/aura/test/test_window_delegate.h" 11 #include "ui/aura/test/test_window_delegate.h"
11 #include "ui/aura/window.h" 12 #include "ui/aura/window.h"
12 13
13 namespace athena { 14 namespace athena {
14 15
15 namespace { 16 namespace {
16 17
17 bool AreWindowListsEqual(const aura::Window::Windows& one, 18 bool AreWindowListsEqual(const aura::Window::Windows& one,
18 const aura::Window::Windows& two) { 19 const aura::Window::Windows& two) {
19 return one.size() == two.size() && 20 return one.size() == two.size() &&
20 std::equal(one.begin(), one.end(), two.begin()); 21 std::equal(one.begin(), one.end(), two.begin());
21 } 22 }
22 23
23 scoped_ptr<aura::Window> CreateWindow(aura::WindowDelegate* delegate, 24 scoped_ptr<aura::Window> CreateWindow(aura::WindowDelegate* delegate,
24 ui::wm::WindowType window_type) { 25 ui::wm::WindowType window_type) {
25 scoped_ptr<aura::Window> window(new aura::Window(delegate)); 26 scoped_ptr<aura::Window> window(new aura::Window(delegate));
26 window->SetType(window_type); 27 window->SetType(window_type);
27 window->Init(aura::WINDOW_LAYER_SOLID_COLOR); 28 window->Init(aura::WINDOW_LAYER_SOLID_COLOR);
28 return window.Pass(); 29 return window.Pass();
29 } 30 }
30 31
32 // Return a string which defines the order of windows in |now| using the indices
33 // of |original|. The string will then have the lowest/oldest window on the left
34 // and the highest / newest on the right.
35 std::string GetWindowOrder(const aura::Window::Windows& original,
36 const aura::Window::Windows& now) {
37 if (original.size() != now.size())
38 return "size has changed.";
39 std::string output;
40 for (aura::Window::Windows::const_iterator it = now.begin();
41 it != now.end(); ++it) {
42 for (size_t i = 0; i < original.size(); i++) {
43 if ((*it) == original[i]) {
44 output += (output.size() ? std::string(" ") : std::string("")) +
oshima 2014/09/10 01:03:30 " " can be just " ", but use std::string() instead
Mr4D (OOO till 08-26) 2014/09/10 03:20:55 Done.
45 std::to_string(i + 1);
46 break;
47 }
48 }
49 }
50 return output;
51 }
52
53 class WindowListObserver : public WindowListProviderObserver {
54 public:
55 explicit WindowListObserver(WindowListProvider* provider)
56 : calls_(0),
57 provider_(provider) {
58 provider_->AddObserver(this);
59 }
60 virtual ~WindowListObserver() {
61 provider_->RemoveObserver(this);
62 }
63
64 int calls() const { return calls_; }
65
66 // WindowListProviderObserver:
67 virtual void OnWindowStackingChanged() OVERRIDE {
68 calls_++;
69 }
70
71 private:
72 // The number of calls to the observer.
73 int calls_;
74
75 // The associated WindowListProvider which is observed.
76 WindowListProvider* provider_;
77
78 DISALLOW_COPY_AND_ASSIGN(WindowListObserver);
79 };
80
81
31 } // namespace 82 } // namespace
32 83
33 typedef test::AthenaTestBase WindowListProviderImplTest; 84 typedef test::AthenaTestBase WindowListProviderImplTest;
34 85
35 // Tests that the order of windows match the stacking order of the windows in 86 // Tests that the order of windows match the stacking order of the windows in
36 // the container, even after the order is changed through the aura Window API. 87 // the container, even after the order is changed through the aura Window API.
37 TEST_F(WindowListProviderImplTest, StackingOrder) { 88 TEST_F(WindowListProviderImplTest, StackingOrder) {
38 aura::test::TestWindowDelegate delegate; 89 aura::test::TestWindowDelegate delegate;
39 scoped_ptr<aura::Window> container(new aura::Window(&delegate)); 90 scoped_ptr<aura::Window> container(new aura::Window(&delegate));
40 scoped_ptr<aura::Window> first = 91 scoped_ptr<aura::Window> first =
(...skipping 10 matching lines...) Expand all
51 new WindowListProviderImpl(container.get())); 102 new WindowListProviderImpl(container.get()));
52 EXPECT_TRUE(AreWindowListsEqual(container->children(), 103 EXPECT_TRUE(AreWindowListsEqual(container->children(),
53 list_provider->GetWindowList())); 104 list_provider->GetWindowList()));
54 105
55 container->StackChildAtTop(first.get()); 106 container->StackChildAtTop(first.get());
56 EXPECT_TRUE(AreWindowListsEqual(container->children(), 107 EXPECT_TRUE(AreWindowListsEqual(container->children(),
57 list_provider->GetWindowList())); 108 list_provider->GetWindowList()));
58 EXPECT_EQ(first.get(), container->children().back()); 109 EXPECT_EQ(first.get(), container->children().back());
59 } 110 }
60 111
112 // Tests that only normal windows of the associated container will be listed.
61 TEST_F(WindowListProviderImplTest, ListContainsOnlyNormalWindows) { 113 TEST_F(WindowListProviderImplTest, ListContainsOnlyNormalWindows) {
62 aura::test::TestWindowDelegate delegate; 114 aura::test::TestWindowDelegate delegate;
63 scoped_ptr<aura::Window> container(new aura::Window(&delegate)); 115 scoped_ptr<aura::Window> container(new aura::Window(&delegate));
64 scoped_ptr<aura::Window> first = 116 scoped_ptr<aura::Window> first =
65 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); 117 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
66 scoped_ptr<aura::Window> second = 118 scoped_ptr<aura::Window> second =
67 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_POPUP); 119 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_POPUP);
68 scoped_ptr<aura::Window> third = 120 scoped_ptr<aura::Window> third =
69 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); 121 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
70 scoped_ptr<aura::Window> fourth = 122 scoped_ptr<aura::Window> fourth =
71 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_MENU); 123 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_MENU);
72 container->AddChild(first.get()); 124 container->AddChild(first.get());
73 container->AddChild(second.get()); 125 container->AddChild(second.get());
74 container->AddChild(third.get()); 126 container->AddChild(third.get());
75 container->AddChild(fourth.get()); 127 container->AddChild(fourth.get());
76 128
77 scoped_ptr<WindowListProvider> list_provider( 129 scoped_ptr<WindowListProvider> list_provider(
78 new WindowListProviderImpl(container.get())); 130 new WindowListProviderImpl(container.get()));
131
79 const aura::Window::Windows list = list_provider->GetWindowList(); 132 const aura::Window::Windows list = list_provider->GetWindowList();
80 EXPECT_EQ(list.end(), std::find(list.begin(), list.end(), second.get())); 133 EXPECT_EQ(list.end(), std::find(list.begin(), list.end(), second.get()));
81 EXPECT_EQ(list.end(), std::find(list.begin(), list.end(), fourth.get())); 134 EXPECT_EQ(list.end(), std::find(list.begin(), list.end(), fourth.get()));
82 EXPECT_NE(list.end(), std::find(list.begin(), list.end(), first.get())); 135 EXPECT_NE(list.end(), std::find(list.begin(), list.end(), first.get()));
83 EXPECT_NE(list.end(), std::find(list.begin(), list.end(), third.get())); 136 EXPECT_NE(list.end(), std::find(list.begin(), list.end(), third.get()));
84 } 137 }
85 138
139 // Testing that IsValidWidow, IsWindowInList and AddWindow work as expected.
140 TEST_F(WindowListProviderImplTest, SimpleChecks) {
141 aura::test::TestWindowDelegate delegate;
142 scoped_ptr<aura::Window> container(new aura::Window(&delegate));
143
144 scoped_ptr<aura::Window> normal_window =
145 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
146 scoped_ptr<aura::Window> popup_window =
147 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_POPUP);
148 scoped_ptr<aura::Window> menu_window =
149 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_MENU);
150
151 scoped_ptr<WindowListProvider> list_provider(
152 new WindowListProviderImpl(container.get()));
153
154 // Check which windows are valid and which are not.
155 EXPECT_TRUE(list_provider->IsValidWindow(normal_window.get()));
156 EXPECT_FALSE(list_provider->IsValidWindow(popup_window.get()));
157 EXPECT_FALSE(list_provider->IsValidWindow(menu_window.get()));
158
159 // Check that no window is currently in the list.
160 EXPECT_FALSE(list_provider->IsWindowInList(normal_window.get()));
161 EXPECT_FALSE(list_provider->IsWindowInList(popup_window.get()));
162 EXPECT_FALSE(list_provider->IsWindowInList(menu_window.get()));
163
164 // Check that adding the window will add it to the list.
165 container->AddChild(normal_window.get());
166 EXPECT_TRUE(list_provider->IsWindowInList(normal_window.get()));
167 }
168
169 // Testing that window ordering functions work as expected.
170 TEST_F(WindowListProviderImplTest, TestWindowOrderingFunctions) {
171 aura::test::TestWindowDelegate delegate;
172 scoped_ptr<aura::Window> container(new aura::Window(&delegate));
173
174 scoped_ptr<aura::Window> window1 =
175 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
176 scoped_ptr<aura::Window> window2 =
177 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
178 scoped_ptr<aura::Window> window3 =
179 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
180
181 scoped_ptr<WindowListProvider> list_provider(
182 new WindowListProviderImpl(container.get()));
183 scoped_ptr<WindowListObserver> observer(
184 new WindowListObserver(list_provider.get()));
185
186 EXPECT_FALSE(list_provider->IsWindowInList(window1.get()));
187 EXPECT_FALSE(list_provider->IsWindowInList(window2.get()));
188 EXPECT_FALSE(list_provider->IsWindowInList(window3.get()));
189
190 // Add the windows.
191 container->AddChild(window1.get());
192 container->AddChild(window2.get());
193 container->AddChild(window3.get());
194 aura::Window::Windows original_order = list_provider->GetWindowList();
195 ASSERT_EQ(3U, original_order.size());
196 EXPECT_EQ(original_order[0], window1.get());
197 EXPECT_EQ(original_order[1], window2.get());
198 EXPECT_EQ(original_order[2], window3.get());
199
200 EXPECT_EQ(0, observer.get()->calls());
201
202 // Move 2 to the front.
203 list_provider->MoveToFront(window2.get());
204 EXPECT_EQ("1 3 2", GetWindowOrder(original_order,
205 list_provider->GetWindowList()));
206 EXPECT_EQ(1, observer->calls());
207
208 // Move 2 to the front again. Should not change anything.
209 list_provider->MoveToFront(window2.get());
210 EXPECT_EQ("1 3 2", GetWindowOrder(original_order,
211 list_provider->GetWindowList()));
212 EXPECT_EQ(1, observer->calls());
213
214 // Move 1 (from the back) in front of 2.
oshima 2014/09/10 01:03:30 in front of 3
Mr4D (OOO till 08-26) 2014/09/10 03:20:55 Done.
215 list_provider->StackWindowFrontOf(window1.get(), window3.get());
216 EXPECT_EQ("3 1 2", GetWindowOrder(original_order,
217 list_provider->GetWindowList()));
218 EXPECT_EQ(2, observer->calls());
219
220 // Move 2 (from the front) in front of 3.
221 list_provider->StackWindowFrontOf(window2.get(), window3.get());
222 EXPECT_EQ("3 2 1", GetWindowOrder(original_order,
223 list_provider->GetWindowList()));
224 EXPECT_EQ(3, observer->calls());
225
226 // Move 1 (from the front) behind 3.
227 list_provider->StackWindowBehindTo(window1.get(), window3.get());
228 EXPECT_EQ("1 3 2", GetWindowOrder(original_order,
229 list_provider->GetWindowList()));
230 EXPECT_EQ(4, observer->calls());
231
232 // Move 1 (from the back) in front of 2.
233 list_provider->StackWindowFrontOf(window1.get(), window2.get());
234 EXPECT_EQ("3 2 1", GetWindowOrder(original_order,
235 list_provider->GetWindowList()));
236 EXPECT_EQ(5, observer->calls());
237
238 // Test that no change should also report no call.
239 list_provider->StackWindowFrontOf(window1.get(), window2.get());
240 EXPECT_EQ("3 2 1", GetWindowOrder(original_order,
241 list_provider->GetWindowList()));
242 EXPECT_EQ(5, observer->calls());
243 list_provider->StackWindowBehindTo(window2.get(), window1.get());
244 EXPECT_EQ("3 2 1", GetWindowOrder(original_order,
245 list_provider->GetWindowList()));
246 EXPECT_EQ(5, observer->calls());
247 }
248
86 } // namespace athena 249 } // namespace athena
OLDNEW
« no previous file with comments | « athena/wm/window_list_provider_impl.cc ('k') | athena/wm/window_manager_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698