package org.robolectric.shadows; import android.content.Context; import android.hardware.*; import android.os.Build; import android.os.MemoryFile; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RuntimeEnvironment; import org.robolectric.TestRunners; import org.robolectric.annotation.Config; import org.robolectric.shadow.api.Shadow; import static org.assertj.core.api.Assertions.assertThat; import static org.robolectric.Shadows.shadowOf; @RunWith(TestRunners.MultiApiSelfTest.class) public class ShadowSensorManagerTest { private SensorManager sensorManager; private ShadowSensorManager shadow; @Before public void setup() { sensorManager = (SensorManager) RuntimeEnvironment.application.getSystemService(Context.SENSOR_SERVICE); shadow = shadowOf(sensorManager); } @After public void tearDown() { sensorManager = null; shadow = null; } @Test @Config(minSdk = Build.VERSION_CODES.O) public void createDirectChannel() throws Exception { SensorDirectChannel channel = sensorManager.createDirectChannel(new MemoryFile("name", 10)); assertThat(channel.isValid()).isTrue(); channel.close(); assertThat(channel.isValid()).isFalse(); } @Test public void shouldReturnHasListenerAfterRegisteringListener() { SensorEventListener listener = registerListener(); assertThat(shadow.hasListener(listener)).isTrue(); } private SensorEventListener registerListener() { SensorEventListener listener = new TestSensorEventListener(); Sensor sensor = sensorManager.getDefaultSensor(SensorManager.SENSOR_ACCELEROMETER); sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL); return listener; } @Test public void shouldReturnHasNoListenerAfterUnregisterListener() { SensorEventListener listener = registerListener(); sensorManager.unregisterListener(listener, sensorManager.getDefaultSensor(SensorManager.SENSOR_ACCELEROMETER)); assertThat(shadow.hasListener(listener)).isFalse(); } @Test public void shouldReturnHasNoListenerAfterUnregisterListenerWithoutSpecificSensor() { SensorEventListener listener = registerListener(); sensorManager.unregisterListener(listener); assertThat(shadow.hasListener(listener)).isFalse(); } @Test public void shouldReturnHasNoListenerByDefault() { SensorEventListener listener = new TestSensorEventListener(); assertThat(shadow.hasListener(listener)).isFalse(); } @Test public void shouldCreateSensorEvent() { assertThat(shadow.createSensorEvent() instanceof SensorEvent).isTrue(); } @Test public void getSensor_shouldBeConfigurable() { Sensor sensor = Shadow.newInstanceOf(Sensor.class); shadowOf(sensorManager).addSensor(Sensor.TYPE_ACCELEROMETER, sensor); assertThat(sensor).isSameAs(sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)); } @Test public void shouldReturnASensorList() throws Exception { assertThat(sensorManager.getSensorList(0)).isNotNull(); } private class TestSensorEventListener implements SensorEventListener { @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { } } }