OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "components/exo/gaming_seat.h" | 5 #include "components/exo/gaming_seat.h" |
6 #include "ash/shell.h" | 6 #include "ash/shell.h" |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/run_loop.h" | 8 #include "base/run_loop.h" |
9 #include "base/test/test_simple_task_runner.h" | 9 #include "base/test/test_simple_task_runner.h" |
10 #include "components/exo/buffer.h" | 10 #include "components/exo/buffer.h" |
(...skipping 29 matching lines...) Expand all Loading... |
40 MOCK_METHOD2(OnAxis, void(int, double)); | 40 MOCK_METHOD2(OnAxis, void(int, double)); |
41 MOCK_METHOD3(OnButton, void(int, bool, double)); | 41 MOCK_METHOD3(OnButton, void(int, bool, double)); |
42 MOCK_METHOD0(OnFrame, void()); | 42 MOCK_METHOD0(OnFrame, void()); |
43 }; | 43 }; |
44 | 44 |
45 class GamingSeatTest : public test::ExoTestBase { | 45 class GamingSeatTest : public test::ExoTestBase { |
46 public: | 46 public: |
47 GamingSeatTest() {} | 47 GamingSeatTest() {} |
48 | 48 |
49 std::unique_ptr<device::GamepadDataFetcher> MockDataFetcherFactory() { | 49 std::unique_ptr<device::GamepadDataFetcher> MockDataFetcherFactory() { |
50 blink::WebGamepads initial_data; | 50 device::Gamepads initial_data; |
51 std::unique_ptr<device::MockGamepadDataFetcher> fetcher( | 51 std::unique_ptr<device::MockGamepadDataFetcher> fetcher( |
52 new device::MockGamepadDataFetcher(initial_data)); | 52 new device::MockGamepadDataFetcher(initial_data)); |
53 mock_data_fetcher_ = fetcher.get(); | 53 mock_data_fetcher_ = fetcher.get(); |
54 return std::move(fetcher); | 54 return std::move(fetcher); |
55 } | 55 } |
56 | 56 |
57 void InitializeGamingSeat(MockGamingSeatDelegate* delegate) { | 57 void InitializeGamingSeat(MockGamingSeatDelegate* delegate) { |
58 polling_task_runner_ = new base::TestSimpleTaskRunner(); | 58 polling_task_runner_ = new base::TestSimpleTaskRunner(); |
59 gaming_seat_.reset( | 59 gaming_seat_.reset( |
60 new GamingSeat(delegate, polling_task_runner_.get(), | 60 new GamingSeat(delegate, polling_task_runner_.get(), |
61 base::Bind(&GamingSeatTest::MockDataFetcherFactory, | 61 base::Bind(&GamingSeatTest::MockDataFetcherFactory, |
62 base::Unretained(this)))); | 62 base::Unretained(this)))); |
63 // Run the polling task runner to have it create the data fetcher. | 63 // Run the polling task runner to have it create the data fetcher. |
64 polling_task_runner_->RunPendingTasks(); | 64 polling_task_runner_->RunPendingTasks(); |
65 } | 65 } |
66 | 66 |
67 void DestroyGamingSeat(MockGamingSeatDelegate* delegate) { | 67 void DestroyGamingSeat(MockGamingSeatDelegate* delegate) { |
68 EXPECT_CALL(*delegate, Die()).Times(1); | 68 EXPECT_CALL(*delegate, Die()).Times(1); |
69 mock_data_fetcher_ = nullptr; | 69 mock_data_fetcher_ = nullptr; |
70 gaming_seat_.reset(); | 70 gaming_seat_.reset(); |
71 // Process tasks until polling is shut down. | 71 // Process tasks until polling is shut down. |
72 polling_task_runner_->RunPendingTasks(); | 72 polling_task_runner_->RunPendingTasks(); |
73 polling_task_runner_ = nullptr; | 73 polling_task_runner_ = nullptr; |
74 } | 74 } |
75 | 75 |
76 void SetDataAndPostToDelegate(const blink::WebGamepads& new_data) { | 76 void SetDataAndPostToDelegate(const device::Gamepads& new_data) { |
77 ASSERT_TRUE(mock_data_fetcher_ != nullptr); | 77 ASSERT_TRUE(mock_data_fetcher_ != nullptr); |
78 mock_data_fetcher_->SetTestData(new_data); | 78 mock_data_fetcher_->SetTestData(new_data); |
79 // Run one polling cycle, which will post a task to the origin task runner. | 79 // Run one polling cycle, which will post a task to the origin task runner. |
80 polling_task_runner_->RunPendingTasks(); | 80 polling_task_runner_->RunPendingTasks(); |
81 // Run origin task runner to invoke delegate. | 81 // Run origin task runner to invoke delegate. |
82 base::RunLoop().RunUntilIdle(); | 82 base::RunLoop().RunUntilIdle(); |
83 } | 83 } |
84 | 84 |
85 protected: | 85 protected: |
86 std::unique_ptr<GamingSeat> gaming_seat_; | 86 std::unique_ptr<GamingSeat> gaming_seat_; |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 .WillOnce(testing::Return(&gamepad_delegate0)) | 125 .WillOnce(testing::Return(&gamepad_delegate0)) |
126 .WillOnce(testing::Return(&gamepad_delegate2)) | 126 .WillOnce(testing::Return(&gamepad_delegate2)) |
127 .WillOnce(testing::Return(&gamepad_delegate1)); | 127 .WillOnce(testing::Return(&gamepad_delegate1)); |
128 // disconnect gamepad 1 | 128 // disconnect gamepad 1 |
129 EXPECT_CALL(gamepad_delegate1, OnRemoved()).Times(1); | 129 EXPECT_CALL(gamepad_delegate1, OnRemoved()).Times(1); |
130 // disconnect other gamepads | 130 // disconnect other gamepads |
131 EXPECT_CALL(gamepad_delegate0, OnRemoved()).Times(1); | 131 EXPECT_CALL(gamepad_delegate0, OnRemoved()).Times(1); |
132 EXPECT_CALL(gamepad_delegate2, OnRemoved()).Times(1); | 132 EXPECT_CALL(gamepad_delegate2, OnRemoved()).Times(1); |
133 } | 133 } |
134 // Gamepad connected. | 134 // Gamepad connected. |
135 blink::WebGamepads gamepad_connected; | 135 device::Gamepads gamepad_connected; |
136 gamepad_connected.items[0].connected = true; | 136 gamepad_connected.items[0].connected = true; |
137 gamepad_connected.items[0].timestamp = 1; | 137 gamepad_connected.items[0].timestamp = 1; |
138 SetDataAndPostToDelegate(gamepad_connected); | 138 SetDataAndPostToDelegate(gamepad_connected); |
139 | 139 |
140 gamepad_connected.items[2].connected = true; | 140 gamepad_connected.items[2].connected = true; |
141 gamepad_connected.items[2].timestamp = 1; | 141 gamepad_connected.items[2].timestamp = 1; |
142 SetDataAndPostToDelegate(gamepad_connected); | 142 SetDataAndPostToDelegate(gamepad_connected); |
143 | 143 |
144 gamepad_connected.items[1].connected = true; | 144 gamepad_connected.items[1].connected = true; |
145 gamepad_connected.items[1].timestamp = 1; | 145 gamepad_connected.items[1].timestamp = 1; |
146 SetDataAndPostToDelegate(gamepad_connected); | 146 SetDataAndPostToDelegate(gamepad_connected); |
147 | 147 |
148 // Gamepad 1 is dis connected | 148 // Gamepad 1 is dis connected |
149 gamepad_connected.items[1].connected = false; | 149 gamepad_connected.items[1].connected = false; |
150 gamepad_connected.items[1].timestamp = 2; | 150 gamepad_connected.items[1].timestamp = 2; |
151 | 151 |
152 SetDataAndPostToDelegate(gamepad_connected); | 152 SetDataAndPostToDelegate(gamepad_connected); |
153 | 153 |
154 // Gamepad disconnected. | 154 // Gamepad disconnected. |
155 blink::WebGamepads all_disconnected; | 155 device::Gamepads all_disconnected; |
156 SetDataAndPostToDelegate(all_disconnected); | 156 SetDataAndPostToDelegate(all_disconnected); |
157 | 157 |
158 DestroyGamingSeat(gaming_seat_delegate); | 158 DestroyGamingSeat(gaming_seat_delegate); |
159 } | 159 } |
160 | 160 |
161 TEST_F(GamingSeatTest, OnAxis) { | 161 TEST_F(GamingSeatTest, OnAxis) { |
162 std::unique_ptr<Surface> surface(new Surface); | 162 std::unique_ptr<Surface> surface(new Surface); |
163 std::unique_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); | 163 std::unique_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); |
164 gfx::Size buffer_size(10, 10); | 164 gfx::Size buffer_size(10, 10); |
165 std::unique_ptr<Buffer> buffer( | 165 std::unique_ptr<Buffer> buffer( |
166 new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); | 166 new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); |
167 surface->Attach(buffer.get()); | 167 surface->Attach(buffer.get()); |
168 surface->Commit(); | 168 surface->Commit(); |
169 | 169 |
170 testing::StrictMock<MockGamingSeatDelegate>* gaming_seat_delegate = | 170 testing::StrictMock<MockGamingSeatDelegate>* gaming_seat_delegate = |
171 new testing::StrictMock<MockGamingSeatDelegate>(); | 171 new testing::StrictMock<MockGamingSeatDelegate>(); |
172 EXPECT_CALL(*gaming_seat_delegate, | 172 EXPECT_CALL(*gaming_seat_delegate, |
173 CanAcceptGamepadEventsForSurface(testing::_)) | 173 CanAcceptGamepadEventsForSurface(testing::_)) |
174 .WillOnce(testing::Return(true)); | 174 .WillOnce(testing::Return(true)); |
175 | 175 |
176 InitializeGamingSeat(gaming_seat_delegate); | 176 InitializeGamingSeat(gaming_seat_delegate); |
177 testing::StrictMock<MockGamepadDelegate> gamepad_delegate0; | 177 testing::StrictMock<MockGamepadDelegate> gamepad_delegate0; |
178 testing::StrictMock<MockGamepadDelegate> gamepad_delegate2; | 178 testing::StrictMock<MockGamepadDelegate> gamepad_delegate2; |
179 | 179 |
180 // connect gamepad 0 and 2 | 180 // connect gamepad 0 and 2 |
181 EXPECT_CALL(*gaming_seat_delegate, GamepadAdded()) | 181 EXPECT_CALL(*gaming_seat_delegate, GamepadAdded()) |
182 .WillOnce(testing::Return(&gamepad_delegate0)) | 182 .WillOnce(testing::Return(&gamepad_delegate0)) |
183 .WillOnce(testing::Return(&gamepad_delegate2)); | 183 .WillOnce(testing::Return(&gamepad_delegate2)); |
184 | 184 |
185 blink::WebGamepads gamepad_connected; | 185 device::Gamepads gamepad_connected; |
186 gamepad_connected.items[0].connected = true; | 186 gamepad_connected.items[0].connected = true; |
187 gamepad_connected.items[0].timestamp = 1; | 187 gamepad_connected.items[0].timestamp = 1; |
188 SetDataAndPostToDelegate(gamepad_connected); | 188 SetDataAndPostToDelegate(gamepad_connected); |
189 | 189 |
190 gamepad_connected.items[2].connected = true; | 190 gamepad_connected.items[2].connected = true; |
191 gamepad_connected.items[2].timestamp = 1; | 191 gamepad_connected.items[2].timestamp = 1; |
192 SetDataAndPostToDelegate(gamepad_connected); | 192 SetDataAndPostToDelegate(gamepad_connected); |
193 | 193 |
194 // send axis event to 2 and then 0 | 194 // send axis event to 2 and then 0 |
195 blink::WebGamepads axis_moved; | 195 device::Gamepads axis_moved; |
196 axis_moved.items[0].connected = true; | 196 axis_moved.items[0].connected = true; |
197 axis_moved.items[0].timestamp = 1; | 197 axis_moved.items[0].timestamp = 1; |
198 axis_moved.items[2].connected = true; | 198 axis_moved.items[2].connected = true; |
199 axis_moved.items[2].timestamp = 2; | 199 axis_moved.items[2].timestamp = 2; |
200 axis_moved.items[2].axes_length = 1; | 200 axis_moved.items[2].axes_length = 1; |
201 axis_moved.items[2].axes[0] = 1.0; | 201 axis_moved.items[2].axes[0] = 1.0; |
202 | 202 |
203 EXPECT_CALL(gamepad_delegate2, OnAxis(0, 1.0)).Times(1); | 203 EXPECT_CALL(gamepad_delegate2, OnAxis(0, 1.0)).Times(1); |
204 EXPECT_CALL(gamepad_delegate2, OnFrame()).Times(1); | 204 EXPECT_CALL(gamepad_delegate2, OnFrame()).Times(1); |
205 SetDataAndPostToDelegate(axis_moved); | 205 SetDataAndPostToDelegate(axis_moved); |
(...skipping 28 matching lines...) Expand all Loading... |
234 | 234 |
235 InitializeGamingSeat(gaming_seat_delegate); | 235 InitializeGamingSeat(gaming_seat_delegate); |
236 testing::StrictMock<MockGamepadDelegate> gamepad_delegate0; | 236 testing::StrictMock<MockGamepadDelegate> gamepad_delegate0; |
237 testing::StrictMock<MockGamepadDelegate> gamepad_delegate2; | 237 testing::StrictMock<MockGamepadDelegate> gamepad_delegate2; |
238 | 238 |
239 // connect gamepad 0 and 2 | 239 // connect gamepad 0 and 2 |
240 EXPECT_CALL(*gaming_seat_delegate, GamepadAdded()) | 240 EXPECT_CALL(*gaming_seat_delegate, GamepadAdded()) |
241 .WillOnce(testing::Return(&gamepad_delegate0)) | 241 .WillOnce(testing::Return(&gamepad_delegate0)) |
242 .WillOnce(testing::Return(&gamepad_delegate2)); | 242 .WillOnce(testing::Return(&gamepad_delegate2)); |
243 | 243 |
244 blink::WebGamepads gamepad_connected; | 244 device::Gamepads gamepad_connected; |
245 gamepad_connected.items[0].connected = true; | 245 gamepad_connected.items[0].connected = true; |
246 gamepad_connected.items[0].timestamp = 1; | 246 gamepad_connected.items[0].timestamp = 1; |
247 SetDataAndPostToDelegate(gamepad_connected); | 247 SetDataAndPostToDelegate(gamepad_connected); |
248 | 248 |
249 gamepad_connected.items[2].connected = true; | 249 gamepad_connected.items[2].connected = true; |
250 gamepad_connected.items[2].timestamp = 1; | 250 gamepad_connected.items[2].timestamp = 1; |
251 SetDataAndPostToDelegate(gamepad_connected); | 251 SetDataAndPostToDelegate(gamepad_connected); |
252 | 252 |
253 // send axis event to 2 and then 0 | 253 // send axis event to 2 and then 0 |
254 blink::WebGamepads axis_moved; | 254 device::Gamepads axis_moved; |
255 axis_moved.items[0].connected = true; | 255 axis_moved.items[0].connected = true; |
256 axis_moved.items[0].timestamp = 1; | 256 axis_moved.items[0].timestamp = 1; |
257 axis_moved.items[2].connected = true; | 257 axis_moved.items[2].connected = true; |
258 axis_moved.items[2].timestamp = 2; | 258 axis_moved.items[2].timestamp = 2; |
259 | 259 |
260 axis_moved.items[2].buttons_length = 1; | 260 axis_moved.items[2].buttons_length = 1; |
261 axis_moved.items[2].buttons[0].pressed = true; | 261 axis_moved.items[2].buttons[0].pressed = true; |
262 axis_moved.items[2].buttons[0].value = 1.0; | 262 axis_moved.items[2].buttons[0].value = 1.0; |
263 | 263 |
264 EXPECT_CALL(gamepad_delegate2, OnButton(0, true, 1.0)).Times(1); | 264 EXPECT_CALL(gamepad_delegate2, OnButton(0, true, 1.0)).Times(1); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 // scheduled in the next round. | 316 // scheduled in the next round. |
317 polling_task_runner_->RunPendingTasks(); | 317 polling_task_runner_->RunPendingTasks(); |
318 polling_task_runner_->RunPendingTasks(); | 318 polling_task_runner_->RunPendingTasks(); |
319 ASSERT_FALSE(polling_task_runner_->HasPendingTask()); | 319 ASSERT_FALSE(polling_task_runner_->HasPendingTask()); |
320 | 320 |
321 DestroyGamingSeat(gaming_seat_delegate); | 321 DestroyGamingSeat(gaming_seat_delegate); |
322 } | 322 } |
323 | 323 |
324 } // namespace | 324 } // namespace |
325 } // namespace exo | 325 } // namespace exo |
OLD | NEW |