OLD | NEW |
---|---|
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 package org.chromium.content.browser; | 5 package org.chromium.content.browser; |
6 | 6 |
7 import android.hardware.Sensor; | 7 import android.hardware.Sensor; |
8 import android.hardware.SensorEventListener; | 8 import android.hardware.SensorEventListener; |
9 import android.hardware.SensorManager; | |
9 import android.os.Handler; | 10 import android.os.Handler; |
10 import android.test.AndroidTestCase; | 11 import android.test.AndroidTestCase; |
11 import android.test.suitebuilder.annotation.SmallTest; | 12 import android.test.suitebuilder.annotation.SmallTest; |
12 | 13 |
13 import java.util.HashSet; | 14 import java.util.HashSet; |
14 import java.util.Set; | 15 import java.util.Set; |
15 | 16 |
16 | |
17 /** | 17 /** |
18 * Test suite for DeviceMotionAndOrientation. | 18 * Test suite for DeviceMotionAndOrientation. |
19 */ | 19 */ |
20 public class DeviceMotionAndOrientationTest extends AndroidTestCase { | 20 public class DeviceMotionAndOrientationTest extends AndroidTestCase { |
21 | 21 |
22 private DeviceMotionAndOrientationForTests mDeviceMotionAndOrientation; | 22 private DeviceMotionAndOrientationForTests mDeviceMotionAndOrientation; |
23 private MockSensorManager mMockSensorManager; | 23 private MockSensorManager mMockSensorManager; |
24 | 24 |
25 @Override | 25 @Override |
26 public void setUp() throws Exception { | 26 public void setUp() throws Exception { |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
199 | 199 |
200 @SmallTest | 200 @SmallTest |
201 public void testSensorChangedmagneticField() { | 201 public void testSensorChangedmagneticField() { |
202 mDeviceMotionAndOrientation.start(0, DeviceMotionAndOrientation.DEVICE_O RIENTATION, 100); | 202 mDeviceMotionAndOrientation.start(0, DeviceMotionAndOrientation.DEVICE_O RIENTATION, 100); |
203 | 203 |
204 float[] values = {1, 2, 3}; | 204 float[] values = {1, 2, 3}; |
205 mDeviceMotionAndOrientation.sensorChanged(Sensor.TYPE_MAGNETIC_FIELD, va lues); | 205 mDeviceMotionAndOrientation.sensorChanged(Sensor.TYPE_MAGNETIC_FIELD, va lues); |
206 mDeviceMotionAndOrientation.verifyCalls(""); | 206 mDeviceMotionAndOrientation.verifyCalls(""); |
207 } | 207 } |
208 | 208 |
209 // Tests for correct Device Orientation angles. | |
210 | |
211 @SmallTest | |
212 public void testOrientationAnglesFromRotationMatrixIdentity() { | |
213 float[] gravity = {0, 0, 1}; | |
214 float[] magnetic = {0, 1, 0}; | |
215 double[] expectedAngles = {0, 0, 0}; | |
216 | |
217 verifyOrientationAngles(gravity, magnetic, expectedAngles); | |
218 } | |
219 | |
220 @SmallTest | |
221 public void testOrientationAnglesFromRotationMatrix45DegreesX() { | |
222 float[] gravity = {0, (float)Math.sin(Math.PI/4), (float)Math.cos(Math.P I/4)}; | |
bulach
2013/10/24 17:08:44
ditto, spaces around "/"
timvolodine
2013/10/30 14:14:47
Done.
| |
223 float[] magnetic = {0, 1, 0}; | |
224 double[] expectedAngles = {0, Math.PI/4, 0}; | |
225 | |
226 verifyOrientationAngles(gravity, magnetic, expectedAngles); | |
227 } | |
228 | |
229 @SmallTest | |
230 public void testOrientationAnglesFromRotationMatrix45DegreesY() { | |
231 float[] gravity = {-(float)Math.sin(Math.PI/4), 0, (float)Math.cos(Math. PI/4)}; | |
232 float[] magnetic = {0, 1, 0}; | |
233 double[] expectedAngles = {0, 0, Math.PI/4}; | |
234 | |
235 verifyOrientationAngles(gravity, magnetic, expectedAngles); | |
236 } | |
237 | |
238 @SmallTest | |
239 public void testOrientationAnglesFromRotationMatrix45DegreesZ() { | |
240 float[] gravity = {0, 0, 1}; | |
241 float[] magnetic = {(float)Math.sin(Math.PI/4), (float)Math.cos(Math.PI/ 4), 0}; | |
242 double[] expectedAngles = {Math.PI/4, 0, 0}; | |
243 | |
244 verifyOrientationAngles(gravity, magnetic, expectedAngles); | |
245 } | |
246 | |
247 @SmallTest | |
248 public void testOrientationAnglesFromRotationMatrixGimbalLock() { | |
249 float[] gravity = {0, 1, 0}; | |
250 float[] magnetic = {(float)Math.sin(Math.PI/4), 0, -(float)Math.cos(Math .PI/4)}; | |
251 double[] expectedAngles = {Math.PI/4, Math.PI/2, 0}; // favor yaw inste ad of roll | |
252 | |
253 verifyOrientationAngles(gravity, magnetic, expectedAngles); | |
254 } | |
255 | |
256 @SmallTest | |
257 public void testOrientationAnglesFromRotationMatrixPitchGreaterThan90() { | |
258 final double largePitchAngle = Math.PI/2 + Math.PI/4; | |
259 float[] gravity = {0, (float)Math.cos(largePitchAngle - Math.PI/2), | |
260 -(float)Math.sin(largePitchAngle - Math.PI/2)}; | |
261 float[] magnetic = {0, 0, -1}; | |
262 double[] expectedAngles = {0, largePitchAngle, 0}; | |
263 | |
264 verifyOrientationAngles(gravity, magnetic, expectedAngles); | |
265 } | |
266 | |
267 @SmallTest | |
268 public void testOrientationAnglesFromRotationMatrixRoll90() { | |
269 float[] gravity = {-1, 0, 0}; | |
270 float[] magnetic = {0, 1, 0}; | |
271 double[] expectedAngles = {Math.PI, -Math.PI, -Math.PI/2}; | |
272 | |
273 verifyOrientationAngles(gravity, magnetic, expectedAngles); | |
274 } | |
275 | |
276 /** | |
277 * Helper method for veryfying angles obtained from rotation matrix. | |
Michael van Ouwerkerk
2013/10/29 16:18:06
s/veryfying/verifying/
timvolodine
2013/10/30 14:14:47
Done.
| |
278 * | |
279 * @param gravity | |
280 * gravity vector in the device frame | |
281 * @param magnetic | |
282 * magnetic field vector in the device frame | |
283 * @param expectedAngles | |
284 * expectedAngles[0] rotation angle in radians around the Z-axis | |
285 * expectedAngles[1] rotation angle in radians around the X-axis | |
286 * expectedAngles[2] rotation angle in radians around the Y-axis | |
287 */ | |
288 private void verifyOrientationAngles(float[] gravity, float[] magnetic, | |
289 double[] expectedAngles) { | |
290 float[] R = new float[9]; | |
291 double[] values = new double[3]; | |
292 SensorManager.getRotationMatrix(R, null, gravity, magnetic); | |
293 mDeviceMotionAndOrientation.getOrientationMobileDevice(R, values); | |
294 | |
295 assertEquals(expectedAngles.length, values.length); | |
296 final double epsilon = 0.001; | |
297 for (int i = 0; i < expectedAngles.length; ++i) { | |
298 assertEquals(expectedAngles[i], values[i], epsilon); | |
299 } | |
300 | |
301 } | |
302 | |
303 // -- End Tests for correct Device Orientation angles. | |
304 | |
209 private static class DeviceMotionAndOrientationForTests extends DeviceMotion AndOrientation { | 305 private static class DeviceMotionAndOrientationForTests extends DeviceMotion AndOrientation { |
210 | 306 |
211 private double value1 = 0; | 307 private double value1 = 0; |
212 private double value2 = 0; | 308 private double value2 = 0; |
213 private double value3 = 0; | 309 private double value3 = 0; |
214 private String mCalls = ""; | 310 private String mCalls = ""; |
215 | 311 |
216 private DeviceMotionAndOrientationForTests(){ | 312 private DeviceMotionAndOrientationForTests(){ |
217 } | 313 } |
218 | 314 |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
284 numRegistered++; | 380 numRegistered++; |
285 return true; | 381 return true; |
286 } | 382 } |
287 | 383 |
288 @Override | 384 @Override |
289 public void unregisterListener(SensorEventListener listener, int sensorT ype) { | 385 public void unregisterListener(SensorEventListener listener, int sensorT ype) { |
290 numUnRegistered++; | 386 numUnRegistered++; |
291 } | 387 } |
292 } | 388 } |
293 } | 389 } |
OLD | NEW |