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

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: Moved Window observer from ResourceManager to WindowListProvider 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
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::to_string(i + 1);
oshima 2014/09/09 18:28:38 s/""/std::string()/
Mr4D (OOO till 08-26) 2014/09/10 00:01:58 Done.
45 break;
46 }
47 }
48 }
49 return output;
50 }
51
52 class WindowListObserver : public WindowListProviderObserver {
53 public:
54 WindowListObserver(WindowListProvider* provider) : calls_(0),
oshima 2014/09/09 18:28:37 explicit
Mr4D (OOO till 08-26) 2014/09/10 00:01:58 Done.
55 provider_(provider) {
56 provider_->AddObserver(this);
57 }
58 virtual ~WindowListObserver() {
59 provider_->RemoveObserver(this);
60 }
61
62 int calls() const { return calls_; }
63
64 // WindowListProviderObserver:
65 virtual void OnActivityStackingChanged() OVERRIDE {
66 calls_++;
67 }
68
69 private:
70 // The number of calls to the observer.
71 int calls_;
72
73 // The associated WindowListProvider which is observed.
74 WindowListProvider* provider_;
75
76 DISALLOW_COPY_AND_ASSIGN(WindowListObserver);
77 };
78
79
31 } // namespace 80 } // namespace
32 81
33 typedef test::AthenaTestBase WindowListProviderImplTest; 82 typedef test::AthenaTestBase WindowListProviderImplTest;
34 83
35 // Tests that the order of windows match the stacking order of the windows in 84 // 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. 85 // the container, even after the order is changed through the aura Window API.
37 TEST_F(WindowListProviderImplTest, StackingOrder) { 86 TEST_F(WindowListProviderImplTest, StackingOrder) {
38 aura::test::TestWindowDelegate delegate; 87 aura::test::TestWindowDelegate delegate;
39 scoped_ptr<aura::Window> container(new aura::Window(&delegate)); 88 scoped_ptr<aura::Window> container(new aura::Window(&delegate));
40 scoped_ptr<aura::Window> first = 89 scoped_ptr<aura::Window> first =
41 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); 90 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
42 scoped_ptr<aura::Window> second = 91 scoped_ptr<aura::Window> second =
43 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); 92 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
44 scoped_ptr<aura::Window> third = 93 scoped_ptr<aura::Window> third =
45 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); 94 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
46 container->AddChild(first.get()); 95 container->AddChild(first.get());
47 container->AddChild(second.get()); 96 container->AddChild(second.get());
48 container->AddChild(third.get()); 97 container->AddChild(third.get());
49 98
50 scoped_ptr<WindowListProvider> list_provider( 99 scoped_ptr<WindowListProvider> list_provider(
51 new WindowListProviderImpl(container.get())); 100 new WindowListProviderImpl(container.get()));
52 EXPECT_TRUE(AreWindowListsEqual(container->children(), 101 EXPECT_TRUE(AreWindowListsEqual(container->children(),
53 list_provider->GetWindowList())); 102 list_provider->GetCurrentWindowList()));
54 103
55 container->StackChildAtTop(first.get()); 104 container->StackChildAtTop(first.get());
56 EXPECT_TRUE(AreWindowListsEqual(container->children(), 105 EXPECT_TRUE(AreWindowListsEqual(container->children(),
57 list_provider->GetWindowList())); 106 list_provider->GetCurrentWindowList()));
58 EXPECT_EQ(first.get(), container->children().back()); 107 EXPECT_EQ(first.get(), container->children().back());
59 } 108 }
60 109
110 // Tests that only normal windows of the associated container will be listed.
61 TEST_F(WindowListProviderImplTest, ListContainsOnlyNormalWindows) { 111 TEST_F(WindowListProviderImplTest, ListContainsOnlyNormalWindows) {
62 aura::test::TestWindowDelegate delegate; 112 aura::test::TestWindowDelegate delegate;
63 scoped_ptr<aura::Window> container(new aura::Window(&delegate)); 113 scoped_ptr<aura::Window> container(new aura::Window(&delegate));
64 scoped_ptr<aura::Window> first = 114 scoped_ptr<aura::Window> first =
65 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); 115 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
66 scoped_ptr<aura::Window> second = 116 scoped_ptr<aura::Window> second =
67 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_POPUP); 117 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_POPUP);
68 scoped_ptr<aura::Window> third = 118 scoped_ptr<aura::Window> third =
69 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); 119 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
70 scoped_ptr<aura::Window> fourth = 120 scoped_ptr<aura::Window> fourth =
71 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_MENU); 121 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_MENU);
72 container->AddChild(first.get()); 122 container->AddChild(first.get());
73 container->AddChild(second.get()); 123 container->AddChild(second.get());
74 container->AddChild(third.get()); 124 container->AddChild(third.get());
75 container->AddChild(fourth.get()); 125 container->AddChild(fourth.get());
76 126
77 scoped_ptr<WindowListProvider> list_provider( 127 scoped_ptr<WindowListProvider> list_provider(
78 new WindowListProviderImpl(container.get())); 128 new WindowListProviderImpl(container.get()));
79 const aura::Window::Windows list = list_provider->GetWindowList(); 129
130 const aura::Window::Windows list = list_provider->GetCurrentWindowList();
80 EXPECT_EQ(list.end(), std::find(list.begin(), list.end(), second.get())); 131 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())); 132 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())); 133 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())); 134 EXPECT_NE(list.end(), std::find(list.begin(), list.end(), third.get()));
84 } 135 }
85 136
137 // Testing that IsValidWidow, IsWindowInList and AddWindow work as expected.
138 TEST_F(WindowListProviderImplTest, SimpleChecks) {
139 aura::test::TestWindowDelegate delegate;
140 scoped_ptr<aura::Window> container(new aura::Window(&delegate));
141
142 scoped_ptr<aura::Window> normal_window =
143 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
144 scoped_ptr<aura::Window> popup_window =
145 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_POPUP);
146 scoped_ptr<aura::Window> menu_window =
147 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_MENU);
148
149 scoped_ptr<WindowListProvider> list_provider(
150 new WindowListProviderImpl(container.get()));
151
152 // Check which windows are valid and which are not.
153 EXPECT_TRUE(list_provider->IsValidWindow(normal_window.get()));
154 EXPECT_FALSE(list_provider->IsValidWindow(popup_window.get()));
155 EXPECT_FALSE(list_provider->IsValidWindow(menu_window.get()));
156
157 // Check that no window is currently in the list.
158 EXPECT_FALSE(list_provider->IsWindowInList(normal_window.get()));
159 EXPECT_FALSE(list_provider->IsWindowInList(popup_window.get()));
160 EXPECT_FALSE(list_provider->IsWindowInList(menu_window.get()));
161
162 // Check that adding the window will add it to the list.
163 container->AddChild(normal_window.get());
164 EXPECT_TRUE(list_provider->IsWindowInList(normal_window.get()));
165 }
166
167 // Testing that window ordering functions work as expected.
168 TEST_F(WindowListProviderImplTest, TestWindowOrderingFunctions) {
169 aura::test::TestWindowDelegate delegate;
170 scoped_ptr<aura::Window> container(new aura::Window(&delegate));
171
172 scoped_ptr<aura::Window> window1 =
173 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
174 scoped_ptr<aura::Window> window2 =
175 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
176 scoped_ptr<aura::Window> window3 =
177 CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL);
178
179 scoped_ptr<WindowListProvider> list_provider(
180 new WindowListProviderImpl(container.get()));
181 scoped_ptr<WindowListObserver> observer(
182 new WindowListObserver(list_provider.get()));
183
184 EXPECT_FALSE(list_provider->IsWindowInList(window1.get()));
185 EXPECT_FALSE(list_provider->IsWindowInList(window2.get()));
186 EXPECT_FALSE(list_provider->IsWindowInList(window3.get()));
187
188 // Add the windows.
189 container->AddChild(window1.get());
190 container->AddChild(window2.get());
191 container->AddChild(window3.get());
192 aura::Window::Windows original_order = list_provider->GetCurrentWindowList();
193 ASSERT_EQ(3U, original_order.size());
194 EXPECT_EQ(original_order[0], window1.get());
195 EXPECT_EQ(original_order[1], window2.get());
196 EXPECT_EQ(original_order[2], window3.get());
197
198 EXPECT_EQ(0, observer.get()->calls());
199
200 // Move 2 to the front.
201 list_provider->MoveToFront(window2.get());
202 EXPECT_EQ("1 3 2", GetWindowOrder(original_order,
203 list_provider->GetCurrentWindowList()));
204 EXPECT_EQ(1, observer->calls());
205
206 // Move 2 to the front again. Should not change anything.
207 list_provider->MoveToFront(window2.get());
208 EXPECT_EQ("1 3 2", GetWindowOrder(original_order,
209 list_provider->GetCurrentWindowList()));
210 EXPECT_EQ(1, observer->calls());
211
212 // Move 1 (from the back) in front of 2.
213 list_provider->StackWindowFrontOf(window1.get(), window3.get());
214 EXPECT_EQ("3 1 2", GetWindowOrder(original_order,
215 list_provider->GetCurrentWindowList()));
216 EXPECT_EQ(2, observer->calls());
217
218 // Move 2 (from the front) in front of 3.
219 list_provider->StackWindowFrontOf(window2.get(), window3.get());
220 EXPECT_EQ("3 2 1", GetWindowOrder(original_order,
221 list_provider->GetCurrentWindowList()));
222 EXPECT_EQ(3, observer->calls());
223
224 // Move 1 (from the front) behind 3.
225 list_provider->StackWindowBehindTo(window1.get(), window3.get());
226 EXPECT_EQ("1 3 2", GetWindowOrder(original_order,
227 list_provider->GetCurrentWindowList()));
228 EXPECT_EQ(4, observer->calls());
229
230 // Move 1 (from the back) in front of 2.
231 list_provider->StackWindowFrontOf(window1.get(), window2.get());
232 EXPECT_EQ("3 2 1", GetWindowOrder(original_order,
233 list_provider->GetCurrentWindowList()));
234 EXPECT_EQ(5, observer->calls());
235
236 // Test that no change should also report no call.
237 list_provider->StackWindowFrontOf(window1.get(), window2.get());
238 EXPECT_EQ("3 2 1", GetWindowOrder(original_order,
239 list_provider->GetCurrentWindowList()));
240 EXPECT_EQ(5, observer->calls());
241 list_provider->StackWindowBehindTo(window2.get(), window1.get());
242 EXPECT_EQ("3 2 1", GetWindowOrder(original_order,
243 list_provider->GetCurrentWindowList()));
244 EXPECT_EQ(5, observer->calls());
245 }
246
86 } // namespace athena 247 } // namespace athena
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698