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 13namespace content { 14 15namespace { 16 17class 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 42class 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 55TEST_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 95TEST_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 114TEST_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 127TEST_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 148TEST_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 164