Chromium Code Reviews| Index: content/public/android/javatests/src/org/chromium/content/browser/DeviceMotionAndOrientationTest.java |
| diff --git a/content/public/android/javatests/src/org/chromium/content/browser/DeviceMotionAndOrientationTest.java b/content/public/android/javatests/src/org/chromium/content/browser/DeviceMotionAndOrientationTest.java |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..ca680b11f4f3b3ceb26a81c04cc4a653cad88389 |
| --- /dev/null |
| +++ b/content/public/android/javatests/src/org/chromium/content/browser/DeviceMotionAndOrientationTest.java |
| @@ -0,0 +1,303 @@ |
| +// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +package org.chromium.content.browser; |
| + |
| +import org.chromium.base.ActivityStatus; |
| +import org.chromium.base.test.util.Feature; |
| +import org.chromium.content.app.LibraryLoader; |
| +import org.chromium.content.common.CommandLine; |
| +import org.chromium.content.common.ProcessInitException; |
| +import org.chromium.content_shell_apk.ContentShellApplication; |
| + |
| +import android.test.UiThreadTest; |
| +import android.test.InstrumentationTestCase; |
| +import android.test.suitebuilder.annotation.SmallTest; |
| +import android.hardware.Sensor; |
| +import android.hardware.SensorEvent; |
| +import android.hardware.SensorEventListener; |
| +import android.hardware.SensorManager; |
| +import android.os.Handler; |
| + |
| +import com.google.common.collect.Sets; |
| + |
| +import java.util.ArrayList; |
| +import java.util.List; |
| +import java.util.Set; |
| + |
| + |
| +/** |
| + * Test suite for DeviceMotionAndOrientation. |
| + */ |
|
Miguel Garcia
2013/03/19 15:12:00
Do you need a full instrumentation test for this?
timvolodine
2013/03/19 16:50:08
not sure what else to use in this case, was basing
Miguel Garcia
2013/03/19 17:06:13
It feels that a plain AndroidTestCase would do.
O
timvolodine
2013/03/19 17:31:55
ok, that works also -- done.
On 2013/03/19 17:06:
|
| +public class DeviceMotionAndOrientationTest extends InstrumentationTestCase { |
| + |
| + private MockDeviceMotionAndOrientation mDeviceMotionAndOrientation; |
| + private MockSensorManager mMockSensorManager; |
| + |
| + @Override |
| + public void setUp() throws Exception { |
| + super.setUp(); |
| + mMockSensorManager = new MockSensorManager(); |
| + mDeviceMotionAndOrientation = MockDeviceMotionAndOrientation.getInstance(); |
|
Miguel Garcia
2013/03/19 15:12:00
line over 80, some more below, please run the clan
bulach
2013/03/19 15:22:36
java is 100cols, so it's fine. :)
however, please
timvolodine
2013/03/19 16:50:08
Done.
timvolodine
2013/03/19 16:50:08
Done.
Miguel Garcia
2013/03/19 17:06:13
Ups, my bad
On 2013/03/19 15:22:36, bulach wrote:
timvolodine
2013/03/19 17:31:55
Done.
|
| + mDeviceMotionAndOrientation.setSensorManagerProxy(mMockSensorManager); |
| + } |
| + |
| + @SmallTest |
| + public void testRegisterSensors_DeviceMotion() { |
|
bulach
2013/03/19 15:22:36
nit: remove the "_DeviceMotion" everywhere, the na
timvolodine
2013/03/19 16:50:08
this refers to testing of sensors related to "devi
|
| + boolean start = mDeviceMotionAndOrientation.start(0, |
| + DeviceMotionAndOrientation.DEVICE_MOTION, 100); |
| + assertTrue("should contain all motion sensors", |
| + mDeviceMotionAndOrientation.mActiveSensors.containsAll( |
| + DeviceMotionAndOrientation.DEVICE_MOTION_SENSORS)); |
| + assertTrue(mDeviceMotionAndOrientation.mDeviceMotionIsActive); |
| + assertFalse(mDeviceMotionAndOrientation.mDeviceOrientationIsActive); |
| + |
| + assertEquals(DeviceMotionAndOrientation.DEVICE_MOTION_SENSORS.size(), |
| + mMockSensorManager.numRegistered); |
| + assertEquals(0, mMockSensorManager.numUnRegistered); |
| + } |
| + |
| + @SmallTest |
| + public void testRegisterSensors_DeviceOrientation() { |
| + boolean start = mDeviceMotionAndOrientation.start(0, |
| + DeviceMotionAndOrientation.DEVICE_ORIENTATION, 100); |
| + assertTrue("should contain all orientation sensors", |
| + mDeviceMotionAndOrientation.mActiveSensors.containsAll( |
| + DeviceMotionAndOrientation.DEVICE_ORIENTATION_SENSORS)); |
| + assertFalse(mDeviceMotionAndOrientation.mDeviceMotionIsActive); |
| + assertTrue(mDeviceMotionAndOrientation.mDeviceOrientationIsActive); |
| + |
| + assertEquals(DeviceMotionAndOrientation.DEVICE_ORIENTATION_SENSORS.size(), |
| + mMockSensorManager.numRegistered); |
| + assertEquals(0, mMockSensorManager.numUnRegistered); |
| + } |
| + |
| + @SmallTest |
| + public void testRegisterSensors_DeviceMotionAndOrientation() { |
| + boolean start = mDeviceMotionAndOrientation.start(0, |
| + DeviceMotionAndOrientation.DEVICE_ORIENTATION, 100); |
| + boolean start2 = mDeviceMotionAndOrientation.start(0, |
| + DeviceMotionAndOrientation.DEVICE_MOTION, 100); |
| + |
| + assertTrue("should contain all motion sensors", |
| + mDeviceMotionAndOrientation.mActiveSensors.containsAll( |
| + DeviceMotionAndOrientation.DEVICE_MOTION_SENSORS)); |
| + assertTrue("should contain all orientation sensors", |
| + mDeviceMotionAndOrientation.mActiveSensors.containsAll( |
| + DeviceMotionAndOrientation.DEVICE_ORIENTATION_SENSORS)); |
| + |
| + Set<Integer> union = Sets.newHashSet(DeviceMotionAndOrientation.DEVICE_ORIENTATION_SENSORS); |
| + union.addAll(DeviceMotionAndOrientation.DEVICE_MOTION_SENSORS); |
| + |
| + assertEquals(union.size(), mDeviceMotionAndOrientation.mActiveSensors.size()); |
| + assertTrue(mDeviceMotionAndOrientation.mDeviceMotionIsActive); |
| + assertTrue(mDeviceMotionAndOrientation.mDeviceOrientationIsActive); |
| + assertEquals(union.size(), mMockSensorManager.numRegistered); |
| + assertEquals(0, mMockSensorManager.numUnRegistered); |
| + } |
| + |
| + @SmallTest |
| + public void testUnregisterSensors_DeviceMotion() { |
| + boolean start = mDeviceMotionAndOrientation.start(0, |
| + DeviceMotionAndOrientation.DEVICE_MOTION, 100); |
| + mDeviceMotionAndOrientation.stop(DeviceMotionAndOrientation.DEVICE_MOTION); |
| + |
| + assertTrue("should contain no sensors", |
| + mDeviceMotionAndOrientation.mActiveSensors.isEmpty()); |
| + assertFalse(mDeviceMotionAndOrientation.mDeviceMotionIsActive); |
| + assertFalse(mDeviceMotionAndOrientation.mDeviceOrientationIsActive); |
| + assertEquals(DeviceMotionAndOrientation.DEVICE_MOTION_SENSORS.size(), |
| + mMockSensorManager.numUnRegistered); |
| + } |
| + |
| + @SmallTest |
| + public void testUnregisterSensors_DeviceOrientation() { |
| + boolean start = mDeviceMotionAndOrientation.start(0, |
| + DeviceMotionAndOrientation.DEVICE_ORIENTATION, 100); |
| + mDeviceMotionAndOrientation.stop(DeviceMotionAndOrientation.DEVICE_ORIENTATION); |
| + |
| + assertTrue("should contain no sensors", |
| + mDeviceMotionAndOrientation.mActiveSensors.isEmpty()); |
| + assertFalse(mDeviceMotionAndOrientation.mDeviceMotionIsActive); |
| + assertFalse(mDeviceMotionAndOrientation.mDeviceOrientationIsActive); |
| + assertEquals(DeviceMotionAndOrientation.DEVICE_ORIENTATION_SENSORS.size(), |
| + mMockSensorManager.numUnRegistered); |
| + } |
| + |
| + @SmallTest |
| + public void testUnRegisterSensors_DeviceMotionAndOrientation() { |
| + boolean start = mDeviceMotionAndOrientation.start(0, |
| + DeviceMotionAndOrientation.DEVICE_ORIENTATION, 100); |
| + boolean start2 = mDeviceMotionAndOrientation.start(0, |
| + DeviceMotionAndOrientation.DEVICE_MOTION, 100); |
| + |
| + mDeviceMotionAndOrientation.stop(DeviceMotionAndOrientation.DEVICE_MOTION); |
| + |
| + assertTrue("should contain all orientation sensors", |
| + mDeviceMotionAndOrientation.mActiveSensors.containsAll( |
| + DeviceMotionAndOrientation.DEVICE_ORIENTATION_SENSORS)); |
| + |
| + Set<Integer> diff = Sets.newHashSet(DeviceMotionAndOrientation.DEVICE_MOTION_SENSORS); |
| + diff.removeAll(DeviceMotionAndOrientation.DEVICE_ORIENTATION_SENSORS); |
| + |
| + assertEquals(diff.size(), mMockSensorManager.numUnRegistered); |
| + |
| + mDeviceMotionAndOrientation.stop(DeviceMotionAndOrientation.DEVICE_ORIENTATION); |
| + |
| + assertTrue("should contain no sensors", |
| + mDeviceMotionAndOrientation.mActiveSensors.isEmpty()); |
| + assertEquals(diff.size() + DeviceMotionAndOrientation.DEVICE_ORIENTATION_SENSORS.size(), |
| + mMockSensorManager.numUnRegistered); |
| + } |
| + |
| + @SmallTest |
| + public void testSensorChanged_gotAccelerationAndOrientation() { |
| + boolean startOrientation = mDeviceMotionAndOrientation.start(0, |
| + DeviceMotionAndOrientation.DEVICE_ORIENTATION, 100); |
| + boolean startMotion = mDeviceMotionAndOrientation.start(0, |
| + DeviceMotionAndOrientation.DEVICE_MOTION, 100); |
| + |
| + assertTrue(startOrientation); |
| + assertTrue(startMotion); |
| + assertTrue(mDeviceMotionAndOrientation.mDeviceMotionIsActive); |
| + assertTrue(mDeviceMotionAndOrientation.mDeviceOrientationIsActive); |
| + |
| + float[] values = {0.0f, 0.0f, 9.0f}; |
| + float[] values2 = {10.0f, 10.0f, 10.0f}; |
| + mDeviceMotionAndOrientation.sensorChanged(Sensor.TYPE_ACCELEROMETER, values); |
| + mDeviceMotionAndOrientation.sensorChanged(Sensor.TYPE_MAGNETIC_FIELD, values2); |
| + mDeviceMotionAndOrientation.verifyCalls("gotAccelerationIncludingGravity"+"gotOrientation"); |
| + mDeviceMotionAndOrientation.verifyValuesEpsilon(45, 0, 0); |
| + } |
| + |
| + @SmallTest |
| + public void testSensorChanged_gotAccelerationIncludingGravity() { |
| + mDeviceMotionAndOrientation.start(0, DeviceMotionAndOrientation.DEVICE_MOTION, 100); |
| + |
| + float[] values = {1, 2, 3}; |
| + mDeviceMotionAndOrientation.sensorChanged(Sensor.TYPE_ACCELEROMETER, values); |
| + mDeviceMotionAndOrientation.verifyCalls("gotAccelerationIncludingGravity"); |
| + mDeviceMotionAndOrientation.verifyValues(1, 2, 3); |
| + } |
| + |
| + @SmallTest |
| + public void testSensorChanged_gotAcceleration() { |
| + mDeviceMotionAndOrientation.start(0, DeviceMotionAndOrientation.DEVICE_MOTION, 100); |
| + |
| + float[] values = {1, 2, 3}; |
| + mDeviceMotionAndOrientation.sensorChanged(Sensor.TYPE_LINEAR_ACCELERATION, values); |
| + mDeviceMotionAndOrientation.verifyCalls("gotAcceleration"); |
| + mDeviceMotionAndOrientation.verifyValues(1, 2, 3); |
| + } |
| + |
| + @SmallTest |
| + public void testSensorChanged_gotRotationRate() { |
| + mDeviceMotionAndOrientation.start(0, DeviceMotionAndOrientation.DEVICE_MOTION, 100); |
| + |
| + float[] values = {1, 2, 3}; |
| + mDeviceMotionAndOrientation.sensorChanged(Sensor.TYPE_GYROSCOPE, values); |
| + mDeviceMotionAndOrientation.verifyCalls("gotRotationRate"); |
| + mDeviceMotionAndOrientation.verifyValues(1, 2, 3); |
| + } |
| + |
| + @SmallTest |
| + public void testSensorChanged_magneticField() { |
| + mDeviceMotionAndOrientation.start(0, DeviceMotionAndOrientation.DEVICE_ORIENTATION, 100); |
| + |
| + float[] values = {1, 2, 3}; |
| + mDeviceMotionAndOrientation.sensorChanged(Sensor.TYPE_MAGNETIC_FIELD, values); |
| + mDeviceMotionAndOrientation.verifyCalls(""); |
| + } |
| + |
| + static class MockDeviceMotionAndOrientation extends DeviceMotionAndOrientation { |
| + |
| + double value1 = 0; |
| + double value2 = 0; |
| + double value3 = 0; |
| + String mCalls = ""; |
| + |
| + private MockDeviceMotionAndOrientation(){ |
| + } |
| + |
| + static MockDeviceMotionAndOrientation getInstance() { |
| + return new MockDeviceMotionAndOrientation(); |
| + } |
| + |
| + void verifyValues(double v1, double v2, double v3) { |
| + assertEquals(v1, value1); |
| + assertEquals(v2, value2); |
| + assertEquals(v3, value3); |
| + } |
| + |
| + void verifyValuesEpsilon(double v1, double v2, double v3) { |
| + assertEquals(v1, value1, 0.1); |
| + assertEquals(v2, value2, 0.1); |
| + assertEquals(v3, value3, 0.1); |
| + } |
| + |
| + void verifyCalls(String names) { |
| + assertEquals(mCalls, names); |
| + } |
| + |
| + @Override |
| + protected void gotOrientation(double alpha, double beta, double gamma) { |
| + value1 = alpha; |
| + value2 = beta; |
| + value3 = gamma; |
| + mCalls = mCalls.concat("gotOrientation"); |
| + } |
| + |
| + @Override |
| + protected void gotAcceleration(double x, double y, double z) { |
| + value1 = x; |
| + value2 = y; |
| + value3 = z; |
| + mCalls = mCalls.concat("gotAcceleration"); |
| + } |
| + |
| + @Override |
| + protected void gotAccelerationIncludingGravity(double x, double y, double z) { |
| + value1 = x; |
| + value2 = y; |
| + value3 = z; |
| + mCalls = mCalls.concat("gotAccelerationIncludingGravity"); |
| + } |
| + |
| + @Override |
| + protected void gotRotationRate(double alpha, double beta, double gamma) { |
| + value1 = alpha; |
| + value2 = beta; |
| + value3 = gamma; |
| + mCalls = mCalls.concat("gotRotationRate"); |
| + } |
| + } |
| + |
| + static class MockSensorManager implements DeviceMotionAndOrientation.SensorManagerProxy { |
|
Miguel Garcia
2013/03/19 15:12:00
please move this to a separate class. We will end
timvolodine
2013/03/19 16:50:08
not sure if moving to a separate class will simpli
Miguel Garcia
2013/03/19 17:06:13
It's a pity that no mocking system is supported.
timvolodine
2013/03/19 17:31:55
If we move the MockSensorManager to a separate fil
Miguel Garcia
2013/03/19 17:57:22
Alright, I don't feel too strongly about it.
On 2
|
| + |
| + int numRegistered = 0; |
| + int numUnRegistered = 0; |
| + |
| + MockSensorManager() { |
| + } |
| + |
| + @Override |
| + public List<Sensor> getSensorList(int type) { |
| + List<Sensor> s = new ArrayList<Sensor>(); |
| + s.add(null); |
| + return s; |
| + } |
| + |
| + @Override |
| + public boolean registerListener(SensorEventListener listener, Sensor sensor, int rate, |
| + Handler handler) { |
| + numRegistered++; |
| + return true; |
| + } |
| + |
| + @Override |
| + public void unregisterListener(SensorEventListener listener, Sensor sensor) { |
| + numUnRegistered++; |
| + } |
| + } |
| +} |