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
3 // found in the LICENSE file.
5 #include "content/browser/device_sensors/sensor_manager_chromeos.h"
7 #include "base/memory/scoped_ptr.h"
8 #include "chromeos/accelerometer/accelerometer_types.h"
9 #include "content/common/device_sensors/device_orientation_hardware_buffer.h"
10 #include "testing/gtest/include/gtest/gtest.h"
14 const double kMeanGravity
= 9.80665;
16 // Isolated content::SensorManagerChromeOS from the active
17 // chromeos::AccelerometerReader. This allows for direct control over which
18 // accelerometer events are provided to the sensor manager.
19 class TestSensorManagerChromeOS
: public content::SensorManagerChromeOS
{
21 TestSensorManagerChromeOS() {}
22 ~TestSensorManagerChromeOS() override
{};
25 void StartObservingAccelerometer() override
{}
26 void StopObservingAccelerometer() override
{}
29 DISALLOW_COPY_AND_ASSIGN(TestSensorManagerChromeOS
);
36 class SensorManagerChromeOSTest
: public testing::Test
{
38 SensorManagerChromeOSTest() {
39 orientation_buffer_
.reset(new DeviceOrientationHardwareBuffer
);
42 ~SensorManagerChromeOSTest() override
{}
44 void OnAccelerationIncludingGravity(double x
, double y
, double z
) {
45 chromeos::AccelerometerUpdate update
;
46 update
.Set(chromeos::ACCELEROMETER_SOURCE_SCREEN
, x
, y
, z
);
47 sensor_manager_
->OnAccelerometerUpdated(update
);
50 DeviceOrientationHardwareBuffer
* orientation_buffer() {
51 return orientation_buffer_
.get();
54 SensorManagerChromeOS
* sensor_manager() { return sensor_manager_
.get(); }
57 void SetUp() override
{
58 testing::Test::SetUp();
59 sensor_manager_
.reset(new TestSensorManagerChromeOS
);
60 sensor_manager_
->StartFetchingDeviceOrientationData(
61 orientation_buffer_
.get());
64 void TearDown() override
{
65 sensor_manager_
->StopFetchingDeviceOrientationData();
66 testing::Test::TearDown();
70 scoped_ptr
<TestSensorManagerChromeOS
> sensor_manager_
;
72 scoped_ptr
<DeviceOrientationHardwareBuffer
> orientation_buffer_
;
74 DISALLOW_COPY_AND_ASSIGN(SensorManagerChromeOSTest
);
77 // Tests that starting to process orientation data will update the associated
79 TEST_F(SensorManagerChromeOSTest
, OrientationBuffer
) {
80 DeviceOrientationHardwareBuffer
* buffer
= orientation_buffer();
81 EXPECT_TRUE(buffer
->data
.hasAbsolute
);
82 EXPECT_FALSE(buffer
->data
.hasAlpha
);
83 EXPECT_FALSE(buffer
->data
.hasBeta
);
84 EXPECT_FALSE(buffer
->data
.hasGamma
);
85 EXPECT_FALSE(buffer
->data
.allAvailableSensorsAreActive
);
87 OnAccelerationIncludingGravity(0.0f
, 0.0f
, 1.0f
);
88 EXPECT_FLOAT_EQ(0.0f
, buffer
->data
.alpha
);
89 EXPECT_FALSE(buffer
->data
.hasAlpha
);
90 EXPECT_TRUE(buffer
->data
.hasBeta
);
91 EXPECT_TRUE(buffer
->data
.hasGamma
);
92 EXPECT_TRUE(buffer
->data
.allAvailableSensorsAreActive
);
94 sensor_manager()->StopFetchingDeviceOrientationData();
95 EXPECT_FALSE(buffer
->data
.allAvailableSensorsAreActive
);
98 // Tests a device resting flat.
99 TEST_F(SensorManagerChromeOSTest
, NeutralOrientation
) {
100 OnAccelerationIncludingGravity(0.0f
, 0.0f
, -kMeanGravity
);
101 DeviceOrientationHardwareBuffer
* buffer
= orientation_buffer();
102 EXPECT_FLOAT_EQ(0.0f
, buffer
->data
.beta
);
103 EXPECT_FLOAT_EQ(0.0f
, buffer
->data
.gamma
);
106 // Tests an upside-down device, such that the W3C boundary [-180,180) causes the
107 // beta value to become negative.
108 TEST_F(SensorManagerChromeOSTest
, UpsideDown
) {
109 OnAccelerationIncludingGravity(0.0f
, 0.0f
, kMeanGravity
);
110 DeviceOrientationHardwareBuffer
* buffer
= orientation_buffer();
111 EXPECT_FLOAT_EQ(-180.0f
, buffer
->data
.beta
);
112 EXPECT_FLOAT_EQ(0.0f
, buffer
->data
.gamma
);
115 // Tests for positive beta value before the device is completely upside-down
116 TEST_F(SensorManagerChromeOSTest
, BeforeUpsideDownBoundary
) {
117 OnAccelerationIncludingGravity(0.0f
, -kMeanGravity
/ 2.0f
,
118 kMeanGravity
/ 2.0f
);
119 DeviceOrientationHardwareBuffer
* buffer
= orientation_buffer();
120 EXPECT_FLOAT_EQ(135.0f
, buffer
->data
.beta
);
121 EXPECT_FLOAT_EQ(0.0f
, buffer
->data
.gamma
);
124 // Tests a device lying on its left-edge.
125 TEST_F(SensorManagerChromeOSTest
, LeftEdge
) {
126 OnAccelerationIncludingGravity(-kMeanGravity
, 0.0f
, 0.0f
);
127 DeviceOrientationHardwareBuffer
* buffer
= orientation_buffer();
128 EXPECT_FLOAT_EQ(0.0f
, buffer
->data
.beta
);
129 EXPECT_FLOAT_EQ(-90.0f
, buffer
->data
.gamma
);
132 // Tests a device lying on its right-edge, such that the W3C boundary [-90,90)
133 // causes the gamma value to become negative.
134 TEST_F(SensorManagerChromeOSTest
, RightEdge
) {
135 OnAccelerationIncludingGravity(kMeanGravity
, 0.0f
, 0.0f
);
136 DeviceOrientationHardwareBuffer
* buffer
= orientation_buffer();
137 EXPECT_FLOAT_EQ(0.0f
, buffer
->data
.beta
);
138 EXPECT_FLOAT_EQ(-90.0f
, buffer
->data
.gamma
);
141 // Tests for positive gamma value before the device is completely on its right
143 TEST_F(SensorManagerChromeOSTest
, BeforeRightEdgeBoundary
) {
144 OnAccelerationIncludingGravity(kMeanGravity
/ 2.0f
, 0.0f
,
145 -kMeanGravity
/ 2.0f
);
146 DeviceOrientationHardwareBuffer
* buffer
= orientation_buffer();
147 EXPECT_FLOAT_EQ(0.0f
, buffer
->data
.beta
);
148 EXPECT_FLOAT_EQ(45.0f
, buffer
->data
.gamma
);
151 } // namespace content