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

Side by Side Diff: services/device/sensors/device_sensor_service_unittest.cc

Issue 2812223006: Replace device_sensor browsertest by service unittest. (Closed)
Patch Set: Replace device_sensor browsertest by service unittest. Created 3 years, 8 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
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "device/sensors/device_sensor_service.h"
6 #include <limits>
7 #include "base/memory/singleton.h"
8 #include "base/run_loop.h"
9 #include "base/threading/platform_thread.h"
10 #include "build/build_config.h"
11 #include "device/sensors/data_fetcher_shared_memory.h"
12 #include "device/sensors/public/cpp/device_light_data.h"
13 #include "device/sensors/public/cpp/device_light_hardware_buffer.h"
14 #include "device/sensors/public/cpp/device_motion_hardware_buffer.h"
15 #include "device/sensors/public/cpp/device_orientation_hardware_buffer.h"
16 #include "device/sensors/public/cpp/motion_data.h"
17 #include "device/sensors/public/cpp/orientation_data.h"
18 #include "device/sensors/public/cpp/shared_memory_seqlock_reader.h"
19 #include "device/sensors/public/interfaces/light.mojom.h"
20 #include "device/sensors/public/interfaces/motion.mojom.h"
21 #include "device/sensors/public/interfaces/orientation.mojom.h"
22 #include "mojo/public/cpp/system/platform_handle.h"
23 #include "services/device/device_service_test_base.h"
24 #include "services/device/public/interfaces/constants.mojom.h"
25
26 namespace device {
27
28 namespace {
29
30 class FakeDataFetcher : public device::DataFetcherSharedMemory {
31 public:
32 FakeDataFetcher()
33 : main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()),
34 sensor_data_available_(true) {}
35 ~FakeDataFetcher() override {}
36
37 void SetPollingStoppedCallback(base::Closure polling_stopped_callback) {
38 polling_stopped_callback_ = polling_stopped_callback;
39 }
40
41 bool Start(device::ConsumerType consumer_type, void* buffer) override {
42 EXPECT_TRUE(buffer);
43
44 switch (consumer_type) {
45 case device::CONSUMER_TYPE_MOTION: {
46 device::DeviceMotionHardwareBuffer* motion_buffer =
47 static_cast<device::DeviceMotionHardwareBuffer*>(buffer);
48 if (sensor_data_available_) {
49 is_motion_polling_started_ = true;
50 UpdateMotion(motion_buffer);
51 }
52 SetMotionBufferReady(motion_buffer);
53 } break;
Reilly Grant (use Gerrit) 2017/04/18 19:36:18 Instead of break, return true here (inside the {})
ke.he 2017/04/19 06:49:01 Done.
54 case device::CONSUMER_TYPE_ORIENTATION: {
55 device::DeviceOrientationHardwareBuffer* orientation_buffer =
56 static_cast<device::DeviceOrientationHardwareBuffer*>(buffer);
57 if (sensor_data_available_) {
58 is_orientation_polling_started_ = true;
59 UpdateOrientation(orientation_buffer);
60 }
61 SetOrientationBufferReady(orientation_buffer);
62 } break;
63 case device::CONSUMER_TYPE_ORIENTATION_ABSOLUTE: {
64 device::DeviceOrientationHardwareBuffer* orientation_buffer =
65 static_cast<device::DeviceOrientationHardwareBuffer*>(buffer);
66 if (sensor_data_available_) {
67 is_orientation_absolute_polling_started_ = true;
68 UpdateOrientationAbsolute(orientation_buffer);
69 }
70 SetOrientationBufferReady(orientation_buffer);
71 } break;
72 case device::CONSUMER_TYPE_LIGHT: {
73 device::DeviceLightHardwareBuffer* light_buffer =
74 static_cast<device::DeviceLightHardwareBuffer*>(buffer);
75 is_light_polling_started_ = true;
76 UpdateLight(light_buffer,
77 sensor_data_available_
78 ? 100
79 : std::numeric_limits<double>::infinity());
80 } break;
81 default:
82 return false;
Reilly Grant (use Gerrit) 2017/04/18 19:36:18 Replace the return true at the end of this functio
ke.he 2017/04/19 06:49:01 I also removed the "default: return false" above,
83 }
84 return true;
85 }
86
87 bool Stop(device::ConsumerType consumer_type) override {
88 switch (consumer_type) {
89 case device::CONSUMER_TYPE_MOTION:
90 is_motion_polling_started_ = false;
91 main_thread_task_runner_->PostTask(FROM_HERE,
92 polling_stopped_callback_);
93 break;
94 case device::CONSUMER_TYPE_ORIENTATION:
95 is_orientation_polling_started_ = false;
96 main_thread_task_runner_->PostTask(FROM_HERE,
97 polling_stopped_callback_);
98 break;
99 case device::CONSUMER_TYPE_ORIENTATION_ABSOLUTE:
100 is_orientation_absolute_polling_started_ = false;
101 main_thread_task_runner_->PostTask(FROM_HERE,
102 polling_stopped_callback_);
103 break;
104 case device::CONSUMER_TYPE_LIGHT:
105 is_light_polling_started_ = false;
106 main_thread_task_runner_->PostTask(FROM_HERE,
107 polling_stopped_callback_);
108 break;
109 default:
110 return false;
111 }
112
113 return true;
Reilly Grant (use Gerrit) 2017/04/18 19:36:18 Same here, return true instead of break and return
ke.he 2017/04/19 06:49:01 Done.
114 }
115
116 void Fetch(unsigned consumer_bitmask) override {
117 FAIL() << "fetch should not be called";
118 }
119
120 FetcherType GetType() const override { return FETCHER_TYPE_DEFAULT; }
121
122 void SetSensorDataAvailable(bool available) {
123 sensor_data_available_ = available;
124 }
125
126 bool IsLightPollingStarted() { return is_light_polling_started_; }
127
128 bool IsMotionPollingStarted() { return is_motion_polling_started_; }
129
130 bool IsOrientationAbsolutePollingStarted() {
131 return is_orientation_absolute_polling_started_;
132 }
133
134 bool IsOrientationPollingStarted() { return is_orientation_polling_started_; }
135
136 void SetMotionBufferReady(device::DeviceMotionHardwareBuffer* buffer) {
137 buffer->seqlock.WriteBegin();
138 buffer->data.all_available_sensors_are_active = true;
139 buffer->seqlock.WriteEnd();
140 }
141
142 void SetOrientationBufferReady(
Reilly Grant (use Gerrit) 2017/04/18 19:36:18 This function is identical to SetMotionBufferReady
ke.he 2017/04/19 06:49:01 The parameter is different, one is "device::Device
143 device::DeviceOrientationHardwareBuffer* buffer) {
144 buffer->seqlock.WriteBegin();
145 buffer->data.all_available_sensors_are_active = true;
146 buffer->seqlock.WriteEnd();
147 }
148
149 void UpdateMotion(device::DeviceMotionHardwareBuffer* buffer) {
150 buffer->seqlock.WriteBegin();
151 buffer->data.acceleration_x = 1;
152 buffer->data.has_acceleration_x = true;
153 buffer->data.acceleration_y = 2;
154 buffer->data.has_acceleration_y = true;
155 buffer->data.acceleration_z = 3;
156 buffer->data.has_acceleration_z = true;
157
158 buffer->data.acceleration_including_gravity_x = 4;
159 buffer->data.has_acceleration_including_gravity_x = true;
160 buffer->data.acceleration_including_gravity_y = 5;
161 buffer->data.has_acceleration_including_gravity_y = true;
162 buffer->data.acceleration_including_gravity_z = 6;
163 buffer->data.has_acceleration_including_gravity_z = true;
164
165 buffer->data.rotation_rate_alpha = 7;
166 buffer->data.has_rotation_rate_alpha = true;
167 buffer->data.rotation_rate_beta = 8;
168 buffer->data.has_rotation_rate_beta = true;
169 buffer->data.rotation_rate_gamma = 9;
170 buffer->data.has_rotation_rate_gamma = true;
171
172 buffer->data.interval = 100;
173 buffer->data.all_available_sensors_are_active = true;
174 buffer->seqlock.WriteEnd();
175 }
176
177 void UpdateOrientation(device::DeviceOrientationHardwareBuffer* buffer) {
178 buffer->seqlock.WriteBegin();
179 buffer->data.alpha = 1;
180 buffer->data.has_alpha = true;
181 buffer->data.beta = 2;
182 buffer->data.has_beta = true;
183 buffer->data.gamma = 3;
184 buffer->data.has_gamma = true;
185 buffer->data.all_available_sensors_are_active = true;
186 buffer->seqlock.WriteEnd();
187 }
188
189 void UpdateOrientationAbsolute(
190 device::DeviceOrientationHardwareBuffer* buffer) {
191 buffer->seqlock.WriteBegin();
192 buffer->data.alpha = 4;
193 buffer->data.has_alpha = true;
194 buffer->data.beta = 5;
195 buffer->data.has_beta = true;
196 buffer->data.gamma = 6;
197 buffer->data.has_gamma = true;
198 buffer->data.absolute = true;
199 buffer->data.all_available_sensors_are_active = true;
200 buffer->seqlock.WriteEnd();
201 }
202
203 void UpdateLight(device::DeviceLightHardwareBuffer* buffer, double lux) {
204 buffer->seqlock.WriteBegin();
205 buffer->data.value = lux;
Reilly Grant (use Gerrit) 2017/04/18 19:36:18 Why not set all_available_sensors_are_active like
ke.he 2017/04/19 06:49:01 The buffer->data is actually in type of DeviceLigh
206 buffer->seqlock.WriteEnd();
207 }
208
209 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
210
211 // The polling_stopped_callbacks should be run on the main thread.
Reilly Grant (use Gerrit) 2017/04/18 19:36:18 |polling_stopped_callback_| should be run on the m
ke.he 2017/04/19 06:49:01 Done.
212 base::Closure polling_stopped_callback_;
213
214 bool sensor_data_available_;
215 bool is_light_polling_started_;
216 bool is_motion_polling_started_;
217 bool is_orientation_absolute_polling_started_;
218 bool is_orientation_polling_started_;
219
220 private:
221 DISALLOW_COPY_AND_ASSIGN(FakeDataFetcher);
222 };
223
224 class DeviceSensorServiceTest : public DeviceServiceTestBase {
225 public:
226 DeviceSensorServiceTest() : fetcher_(nullptr) {}
227
228 void SetUpFetcher() {
229 device::DeviceSensorService::GetInstance()->SetDataFetcherForTesting(
230 fetcher_);
231 }
232
233 void GetLightData(device::DeviceLightData* data,
234 mojo::ScopedSharedBufferHandle buffer_handle) {
235 base::SharedMemoryHandle handle;
236 MojoResult result = mojo::UnwrapSharedMemoryHandle(
237 std::move(buffer_handle), &handle, nullptr, nullptr);
238 DCHECK_EQ(MOJO_RESULT_OK, result);
239
240 if (!light_reader_)
241 light_reader_.reset(
242 new SharedMemorySeqLockReader<device::DeviceLightData>());
Reilly Grant (use Gerrit) 2017/04/18 19:36:18 light_reader_ = base::MakeUnique<SharedMemorySeqLo
ke.he 2017/04/19 06:49:01 Done.
243 EXPECT_TRUE(light_reader_->Initialize(handle));
244 EXPECT_TRUE(light_reader_->GetLatestData(data));
245 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
246 runloop_->QuitClosure());
247 }
248
249 void GetMotionData(device::MotionData* data,
250 mojo::ScopedSharedBufferHandle buffer_handle) {
251 base::SharedMemoryHandle handle;
252 MojoResult result = mojo::UnwrapSharedMemoryHandle(
253 std::move(buffer_handle), &handle, nullptr, nullptr);
254 DCHECK_EQ(MOJO_RESULT_OK, result);
255
256 if (!motion_reader_)
257 motion_reader_.reset(new SharedMemorySeqLockReader<device::MotionData>());
Reilly Grant (use Gerrit) 2017/04/18 19:36:18 And here.
ke.he 2017/04/19 06:49:01 Done.
258 EXPECT_TRUE(motion_reader_->Initialize(handle));
259 EXPECT_TRUE(motion_reader_->GetLatestData(data));
260 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
261 runloop_->QuitClosure());
262 }
263
264 void GetOrientationData(device::OrientationData* data,
265 mojo::ScopedSharedBufferHandle buffer_handle) {
266 base::SharedMemoryHandle handle;
267 MojoResult result = mojo::UnwrapSharedMemoryHandle(
268 std::move(buffer_handle), &handle, nullptr, nullptr);
269 DCHECK_EQ(MOJO_RESULT_OK, result);
270
271 if (!orientation_reader_)
272 orientation_reader_.reset(
273 new SharedMemorySeqLockReader<device::OrientationData>());
Reilly Grant (use Gerrit) 2017/04/18 19:36:18 And here.
ke.he 2017/04/19 06:49:01 Done.
274 EXPECT_TRUE(orientation_reader_->Initialize(handle));
275 EXPECT_TRUE(orientation_reader_->GetLatestData(data));
276 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
277 runloop_->QuitClosure());
278 }
279
280 FakeDataFetcher* fetcher_;
281
282 // NOTE: These can only be initialized once the main thread has been created
283 // and so must be pointers instead of plain objects.
284 std::unique_ptr<base::RunLoop> runloop_;
285 std::unique_ptr<base::RunLoop> polling_stopped_runloop_;
286
287 protected:
288 void SetUp() override {
289 DeviceServiceTestBase::SetUp();
290
291 // Initialize the RunLoops for tests.
292 runloop_.reset(new base::RunLoop());
293 polling_stopped_runloop_.reset(new base::RunLoop());
294
295 fetcher_ = new FakeDataFetcher();
296 fetcher_->SetPollingStoppedCallback(
297 polling_stopped_runloop_->QuitClosure());
298
299 // In Non-Android platform, SetUpFetcher() should be called in IO thread,
Reilly Grant (use Gerrit) 2017/04/18 19:36:18 // On non-Android platforms, SetUpFetcher() should
ke.he 2017/04/19 06:49:01 Done.
300 // because the IO thread is actually main thread in service unittest, so
301 // it is ok call it directly. See comments in
302 // DeviceServiceTestBase::CreateService() why the IO thread is simulated by
303 // main thread.
304 SetUpFetcher();
305 }
306
307 mojom::LightSensorPtr light_sensor_;
308 mojom::MotionSensorPtr motion_sensor_;
309 mojom::OrientationAbsoluteSensorPtr orientation_absolute_sensor_;
310 mojom::OrientationSensorPtr orientation_sensor_;
311
312 private:
313 std::unique_ptr<SharedMemorySeqLockReader<device::DeviceLightData>>
314 light_reader_;
315 std::unique_ptr<SharedMemorySeqLockReader<device::MotionData>> motion_reader_;
316 std::unique_ptr<SharedMemorySeqLockReader<device::OrientationData>>
317 orientation_reader_;
318 };
319
320 TEST_F(DeviceSensorServiceTest, OrientationTest) {
321 device::OrientationData data;
322 memset(&data, 0, sizeof(device::OrientationData));
323 connector()->BindInterface(mojom::kServiceName, &orientation_sensor_);
324 orientation_sensor_->StartPolling(
325 base::Bind(&DeviceSensorServiceTest::GetOrientationData,
326 base::Unretained(this), &data));
327 runloop_->Run();
328 EXPECT_TRUE(fetcher_->IsOrientationPollingStarted());
329 EXPECT_EQ(1, data.alpha);
330 EXPECT_TRUE(data.has_alpha);
331 EXPECT_EQ(2, data.beta);
332 EXPECT_TRUE(data.has_beta);
333 EXPECT_EQ(3, data.gamma);
334 EXPECT_TRUE(data.has_gamma);
335 EXPECT_TRUE(data.all_available_sensors_are_active);
336
337 orientation_sensor_->StopPolling();
338 polling_stopped_runloop_->Run();
339 EXPECT_FALSE(fetcher_->IsOrientationPollingStarted());
340 }
341
342 TEST_F(DeviceSensorServiceTest, OrientationAbsoluteTest) {
343 device::OrientationData data;
344 memset(&data, 0, sizeof(device::OrientationData));
345 connector()->BindInterface(mojom::kServiceName,
346 &orientation_absolute_sensor_);
347 orientation_absolute_sensor_->StartPolling(
348 base::Bind(&DeviceSensorServiceTest::GetOrientationData,
349 base::Unretained(this), &data));
350 runloop_->Run();
351
352 EXPECT_TRUE(fetcher_->IsOrientationAbsolutePollingStarted());
353 EXPECT_EQ(4, data.alpha);
354 EXPECT_TRUE(data.has_alpha);
355 EXPECT_EQ(5, data.beta);
356 EXPECT_TRUE(data.has_beta);
357 EXPECT_EQ(6, data.gamma);
358 EXPECT_TRUE(data.has_gamma);
359 EXPECT_TRUE(data.all_available_sensors_are_active);
360
361 orientation_absolute_sensor_->StopPolling();
362 polling_stopped_runloop_->Run();
363 EXPECT_FALSE(fetcher_->IsOrientationAbsolutePollingStarted());
364 }
365
366 TEST_F(DeviceSensorServiceTest, LightTest) {
367 device::DeviceLightData data;
368 memset(&data, 0, sizeof(device::DeviceLightData));
369 connector()->BindInterface(mojom::kServiceName, &light_sensor_);
370 light_sensor_->StartPolling(base::Bind(&DeviceSensorServiceTest::GetLightData,
371 base::Unretained(this), &data));
372 runloop_->Run();
373
374 EXPECT_TRUE(fetcher_->IsLightPollingStarted());
375 EXPECT_EQ(100, data.value);
376
377 light_sensor_->StopPolling();
378 polling_stopped_runloop_->Run();
379 EXPECT_FALSE(fetcher_->IsLightPollingStarted());
380 }
381
382 TEST_F(DeviceSensorServiceTest, MotionTest) {
383 device::MotionData data;
384 memset(&data, 0, sizeof(device::MotionData));
385 connector()->BindInterface(mojom::kServiceName, &motion_sensor_);
386 motion_sensor_->StartPolling(base::Bind(
387 &DeviceSensorServiceTest::GetMotionData, base::Unretained(this), &data));
388 runloop_->Run();
389
390 EXPECT_TRUE(fetcher_->IsMotionPollingStarted());
391 EXPECT_EQ(1, data.acceleration_x);
392 EXPECT_TRUE(data.has_acceleration_x);
393 EXPECT_EQ(2, data.acceleration_y);
394 EXPECT_TRUE(data.has_acceleration_y);
395 EXPECT_EQ(3, data.acceleration_z);
396 EXPECT_TRUE(data.has_acceleration_z);
397 EXPECT_EQ(4, data.acceleration_including_gravity_x);
398 EXPECT_TRUE(data.has_acceleration_including_gravity_x);
399 EXPECT_EQ(5, data.acceleration_including_gravity_y);
400 EXPECT_TRUE(data.has_acceleration_including_gravity_y);
401 EXPECT_EQ(6, data.acceleration_including_gravity_z);
402 EXPECT_TRUE(data.has_acceleration_including_gravity_z);
403 EXPECT_EQ(7, data.rotation_rate_alpha);
404 EXPECT_TRUE(data.has_rotation_rate_alpha);
405 EXPECT_EQ(8, data.rotation_rate_beta);
406 EXPECT_TRUE(data.has_rotation_rate_beta);
407 EXPECT_EQ(9, data.rotation_rate_gamma);
408 EXPECT_TRUE(data.has_rotation_rate_gamma);
409 EXPECT_EQ(100, data.interval);
410 EXPECT_TRUE(data.all_available_sensors_are_active);
411
412 motion_sensor_->StopPolling();
413 polling_stopped_runloop_->Run();
414 EXPECT_FALSE(fetcher_->IsMotionPollingStarted());
415 }
416
417 TEST_F(DeviceSensorServiceTest, LightOneOffInfintyTest) {
418 fetcher_->SetSensorDataAvailable(false);
419 device::DeviceLightData data;
420 memset(&data, 0, sizeof(device::DeviceLightData));
421 connector()->BindInterface(mojom::kServiceName, &light_sensor_);
422 light_sensor_->StartPolling(base::Bind(&DeviceSensorServiceTest::GetLightData,
423 base::Unretained(this), &data));
424 runloop_->Run();
425
426 EXPECT_TRUE(fetcher_->IsLightPollingStarted());
427 EXPECT_EQ(std::numeric_limits<double>::infinity(), data.value);
428
429 light_sensor_->StopPolling();
430 polling_stopped_runloop_->Run();
431 EXPECT_FALSE(fetcher_->IsLightPollingStarted());
432 }
433
434 TEST_F(DeviceSensorServiceTest, OrientationNullTest) {
435 fetcher_->SetSensorDataAvailable(false);
436 device::OrientationData data;
437 memset(&data, 0, sizeof(device::OrientationData));
438 connector()->BindInterface(mojom::kServiceName, &orientation_sensor_);
439 orientation_sensor_->StartPolling(
440 base::Bind(&DeviceSensorServiceTest::GetOrientationData,
441 base::Unretained(this), &data));
442 runloop_->Run();
443
444 EXPECT_FALSE(fetcher_->IsOrientationPollingStarted());
445 EXPECT_EQ(0, data.alpha);
446 EXPECT_FALSE(data.has_alpha);
447 EXPECT_EQ(0, data.beta);
448 EXPECT_FALSE(data.has_beta);
449 EXPECT_EQ(0, data.gamma);
450 EXPECT_FALSE(data.has_gamma);
451 EXPECT_TRUE(data.all_available_sensors_are_active);
452
453 orientation_sensor_->StopPolling();
454 polling_stopped_runloop_->Run();
455 EXPECT_FALSE(fetcher_->IsOrientationPollingStarted());
456 }
457
458 TEST_F(DeviceSensorServiceTest, OrientationAbsoluteNullTest) {
459 fetcher_->SetSensorDataAvailable(false);
460 device::OrientationData data;
461 memset(&data, 0, sizeof(device::OrientationData));
462 connector()->BindInterface(mojom::kServiceName,
463 &orientation_absolute_sensor_);
464 orientation_absolute_sensor_->StartPolling(
465 base::Bind(&DeviceSensorServiceTest::GetOrientationData,
466 base::Unretained(this), &data));
467 runloop_->Run();
468
469 EXPECT_FALSE(fetcher_->IsOrientationAbsolutePollingStarted());
470 EXPECT_EQ(0, data.alpha);
471 EXPECT_FALSE(data.has_alpha);
472 EXPECT_EQ(0, data.beta);
473 EXPECT_FALSE(data.has_beta);
474 EXPECT_EQ(0, data.gamma);
475 EXPECT_FALSE(data.has_gamma);
476 EXPECT_TRUE(data.all_available_sensors_are_active);
477
478 orientation_absolute_sensor_->StopPolling();
479 polling_stopped_runloop_->Run();
480 EXPECT_FALSE(fetcher_->IsOrientationAbsolutePollingStarted());
481 }
482
483 TEST_F(DeviceSensorServiceTest, MotionNullTest) {
484 fetcher_->SetSensorDataAvailable(false);
485 device::MotionData data;
486 memset(&data, 0, sizeof(device::MotionData));
487 connector()->BindInterface(mojom::kServiceName, &motion_sensor_);
488 motion_sensor_->StartPolling(base::Bind(
489 &DeviceSensorServiceTest::GetMotionData, base::Unretained(this), &data));
490 runloop_->Run();
491
492 EXPECT_FALSE(fetcher_->IsMotionPollingStarted());
493 EXPECT_EQ(0, data.acceleration_x);
494 EXPECT_FALSE(data.has_acceleration_x);
495 EXPECT_EQ(0, data.acceleration_y);
496 EXPECT_FALSE(data.has_acceleration_y);
497 EXPECT_EQ(0, data.acceleration_z);
498 EXPECT_FALSE(data.has_acceleration_z);
499 EXPECT_EQ(0, data.acceleration_including_gravity_x);
500 EXPECT_FALSE(data.has_acceleration_including_gravity_x);
501 EXPECT_EQ(0, data.acceleration_including_gravity_y);
502 EXPECT_FALSE(data.has_acceleration_including_gravity_y);
503 EXPECT_EQ(0, data.acceleration_including_gravity_z);
504 EXPECT_FALSE(data.has_acceleration_including_gravity_z);
505 EXPECT_EQ(0, data.rotation_rate_alpha);
506 EXPECT_FALSE(data.has_rotation_rate_alpha);
507 EXPECT_EQ(0, data.rotation_rate_beta);
508 EXPECT_FALSE(data.has_rotation_rate_beta);
509 EXPECT_EQ(0, data.rotation_rate_gamma);
510 EXPECT_FALSE(data.has_rotation_rate_gamma);
511 EXPECT_EQ(0, data.interval);
512 EXPECT_TRUE(data.all_available_sensors_are_active);
513
514 motion_sensor_->StopPolling();
515 polling_stopped_runloop_->Run();
516 EXPECT_FALSE(fetcher_->IsMotionPollingStarted());
517 }
518
519 } // namespace
520
521 } // namespace device
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698