Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / content / browser / device_sensors / sensor_manager_android_unittest.cc
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 "content/browser/device_sensors/sensor_manager_android.h"
6
7 #include "base/android/jni_android.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/memory/weak_ptr.h"
10 #include "content/browser/device_sensors/inertial_sensor_consts.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace content {
14
15 namespace {
16
17 class FakeSensorManagerAndroid : public SensorManagerAndroid {
18  public:
19   FakeSensorManagerAndroid() { }
20   virtual ~FakeSensorManagerAndroid() { }
21
22   virtual int GetNumberActiveDeviceMotionSensors() OVERRIDE {
23     return number_active_sensors_;
24   }
25
26   void SetNumberActiveDeviceMotionSensors(int number_active_sensors) {
27     number_active_sensors_ = number_active_sensors;
28   }
29
30  protected:
31   virtual bool Start(EventType event_type) OVERRIDE {
32     return true;
33   }
34
35   virtual void Stop(EventType event_type) OVERRIDE {
36   }
37
38  private:
39   int number_active_sensors_;
40 };
41
42 class AndroidSensorManagerTest : public testing::Test {
43  protected:
44   AndroidSensorManagerTest() {
45     light_buffer_.reset(new DeviceLightHardwareBuffer);
46     motion_buffer_.reset(new DeviceMotionHardwareBuffer);
47     orientation_buffer_.reset(new DeviceOrientationHardwareBuffer);
48   }
49
50   scoped_ptr<DeviceLightHardwareBuffer> light_buffer_;
51   scoped_ptr<DeviceMotionHardwareBuffer> motion_buffer_;
52   scoped_ptr<DeviceOrientationHardwareBuffer> orientation_buffer_;
53 };
54
55 TEST_F(AndroidSensorManagerTest, ThreeDeviceMotionSensorsActive) {
56   FakeSensorManagerAndroid::Register(base::android::AttachCurrentThread());
57   FakeSensorManagerAndroid sensorManager;
58   sensorManager.SetNumberActiveDeviceMotionSensors(3);
59
60   sensorManager.StartFetchingDeviceMotionData(motion_buffer_.get());
61   ASSERT_FALSE(motion_buffer_->data.allAvailableSensorsAreActive);
62
63   sensorManager.GotAcceleration(0, 0, 1, 2, 3);
64   ASSERT_FALSE(motion_buffer_->data.allAvailableSensorsAreActive);
65   ASSERT_EQ(1, motion_buffer_->data.accelerationX);
66   ASSERT_TRUE(motion_buffer_->data.hasAccelerationX);
67   ASSERT_EQ(2, motion_buffer_->data.accelerationY);
68   ASSERT_TRUE(motion_buffer_->data.hasAccelerationY);
69   ASSERT_EQ(3, motion_buffer_->data.accelerationZ);
70   ASSERT_TRUE(motion_buffer_->data.hasAccelerationZ);
71
72   sensorManager.GotAccelerationIncludingGravity(0, 0, 4, 5, 6);
73   ASSERT_FALSE(motion_buffer_->data.allAvailableSensorsAreActive);
74   ASSERT_EQ(4, motion_buffer_->data.accelerationIncludingGravityX);
75   ASSERT_TRUE(motion_buffer_->data.hasAccelerationIncludingGravityX);
76   ASSERT_EQ(5, motion_buffer_->data.accelerationIncludingGravityY);
77   ASSERT_TRUE(motion_buffer_->data.hasAccelerationIncludingGravityY);
78   ASSERT_EQ(6, motion_buffer_->data.accelerationIncludingGravityZ);
79   ASSERT_TRUE(motion_buffer_->data.hasAccelerationIncludingGravityZ);
80
81   sensorManager.GotRotationRate(0, 0, 7, 8, 9);
82   ASSERT_TRUE(motion_buffer_->data.allAvailableSensorsAreActive);
83   ASSERT_EQ(7, motion_buffer_->data.rotationRateAlpha);
84   ASSERT_TRUE(motion_buffer_->data.hasRotationRateAlpha);
85   ASSERT_EQ(8, motion_buffer_->data.rotationRateBeta);
86   ASSERT_TRUE(motion_buffer_->data.hasRotationRateBeta);
87   ASSERT_EQ(9, motion_buffer_->data.rotationRateGamma);
88   ASSERT_TRUE(motion_buffer_->data.hasRotationRateGamma);
89   ASSERT_EQ(kInertialSensorIntervalMillis, motion_buffer_->data.interval);
90
91   sensorManager.StopFetchingDeviceMotionData();
92   ASSERT_FALSE(motion_buffer_->data.allAvailableSensorsAreActive);
93 }
94
95 TEST_F(AndroidSensorManagerTest, TwoDeviceMotionSensorsActive) {
96   FakeSensorManagerAndroid::Register(base::android::AttachCurrentThread());
97   FakeSensorManagerAndroid sensorManager;
98   sensorManager.SetNumberActiveDeviceMotionSensors(2);
99
100   sensorManager.StartFetchingDeviceMotionData(motion_buffer_.get());
101   ASSERT_FALSE(motion_buffer_->data.allAvailableSensorsAreActive);
102
103   sensorManager.GotAcceleration(0, 0, 1, 2, 3);
104   ASSERT_FALSE(motion_buffer_->data.allAvailableSensorsAreActive);
105
106   sensorManager.GotAccelerationIncludingGravity(0, 0, 1, 2, 3);
107   ASSERT_TRUE(motion_buffer_->data.allAvailableSensorsAreActive);
108   ASSERT_EQ(kInertialSensorIntervalMillis, motion_buffer_->data.interval);
109
110   sensorManager.StopFetchingDeviceMotionData();
111   ASSERT_FALSE(motion_buffer_->data.allAvailableSensorsAreActive);
112 }
113
114 TEST_F(AndroidSensorManagerTest, ZeroDeviceMotionSensorsActive) {
115   FakeSensorManagerAndroid::Register(base::android::AttachCurrentThread());
116   FakeSensorManagerAndroid sensorManager;
117   sensorManager.SetNumberActiveDeviceMotionSensors(0);
118
119   sensorManager.StartFetchingDeviceMotionData(motion_buffer_.get());
120   ASSERT_TRUE(motion_buffer_->data.allAvailableSensorsAreActive);
121   ASSERT_EQ(kInertialSensorIntervalMillis, motion_buffer_->data.interval);
122
123   sensorManager.StopFetchingDeviceMotionData();
124   ASSERT_FALSE(motion_buffer_->data.allAvailableSensorsAreActive);
125 }
126
127 TEST_F(AndroidSensorManagerTest, DeviceOrientationSensorsActive) {
128   FakeSensorManagerAndroid::Register(base::android::AttachCurrentThread());
129   FakeSensorManagerAndroid sensorManager;
130
131   sensorManager.StartFetchingDeviceOrientationData(orientation_buffer_.get());
132   ASSERT_FALSE(orientation_buffer_->data.allAvailableSensorsAreActive);
133
134   sensorManager.GotOrientation(0, 0, 1, 2, 3);
135   ASSERT_TRUE(orientation_buffer_->data.allAvailableSensorsAreActive);
136   ASSERT_EQ(1, orientation_buffer_->data.alpha);
137   ASSERT_TRUE(orientation_buffer_->data.hasAlpha);
138   ASSERT_EQ(2, orientation_buffer_->data.beta);
139   ASSERT_TRUE(orientation_buffer_->data.hasBeta);
140   ASSERT_EQ(3, orientation_buffer_->data.gamma);
141   ASSERT_TRUE(orientation_buffer_->data.hasGamma);
142
143   sensorManager.StopFetchingDeviceOrientationData();
144   ASSERT_FALSE(orientation_buffer_->data.allAvailableSensorsAreActive);
145 }
146
147 // DeviceLight
148 TEST_F(AndroidSensorManagerTest, DeviceLightSensorsActive) {
149   FakeSensorManagerAndroid::Register(base::android::AttachCurrentThread());
150   FakeSensorManagerAndroid sensorManager;
151
152   sensorManager.StartFetchingDeviceLightData(light_buffer_.get());
153
154   sensorManager.GotLight(0, 0, 100);
155   ASSERT_EQ(100, light_buffer_->data.value);
156
157   sensorManager.StopFetchingDeviceLightData();
158   ASSERT_EQ(-1, light_buffer_->data.value);
159 }
160
161 }  // namespace
162
163 }  // namespace content