1cfb3d242306311ce27ec51bf511764377c173a7cKiran Ryali + Christian Williamspackage org.robolectric.shadows;
25aab2036d99aa0bdced8c12a41a2b67a0bc8d676Dave
3851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport static org.assertj.core.api.Assertions.assertThat;
4851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport static org.robolectric.Shadows.shadowOf;
5851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williams
65aab2036d99aa0bdced8c12a41a2b67a0bc8d676Daveimport android.content.Context;
7851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport android.hardware.Sensor;
8851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport android.hardware.SensorDirectChannel;
9851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport android.hardware.SensorEvent;
10851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport android.hardware.SensorEventListener;
11851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport android.hardware.SensorManager;
12452851dff0d634963d76fed3ac8ade6661a7475bJonathan Gerrishimport android.os.Build;
13452851dff0d634963d76fed3ac8ade6661a7475bJonathan Gerrishimport android.os.MemoryFile;
145117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richardimport org.junit.After;
155117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richardimport org.junit.Before;
165117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richardimport org.junit.Test;
175117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richardimport org.junit.runner.RunWith;
18ceb8863e0cd0706c72351f063bc7af3c7d76d120Jonathan Gerrishimport org.robolectric.RobolectricTestRunner;
19084d588b645d53c1110ff24b82433b5a331cc6d3James Lemieuximport org.robolectric.RuntimeEnvironment;
20452851dff0d634963d76fed3ac8ade6661a7475bJonathan Gerrishimport org.robolectric.annotation.Config;
21a09e6f7e24d708115c39c16b5ee4ff806e29bca5Christian Williamsimport org.robolectric.shadow.api.Shadow;
225117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard
23ceb8863e0cd0706c72351f063bc7af3c7d76d120Jonathan Gerrish@RunWith(RobolectricTestRunner.class)
2472cf654d6d3a933e426506345ded34cf39a669a2Erich Douglasspublic class ShadowSensorManagerTest {
255aab2036d99aa0bdced8c12a41a2b67a0bc8d676Dave
26f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams  private SensorManager sensorManager;
27f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams  private ShadowSensorManager shadow;
28f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams
29f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams  @Before
30f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams  public void setup() {
313b8b7229bea6a6639d97b3d6ba4e971e37341e9fRyan Spore    sensorManager = (SensorManager) RuntimeEnvironment.application.getSystemService(Context.SENSOR_SERVICE);
32f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams    shadow = shadowOf(sensorManager);
33f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams  }
34f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams
35f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams  @After
36f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams  public void tearDown() {
37f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams    sensorManager = null;
38f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams    shadow = null;
39f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams  }
40f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams
41f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams  @Test
42452851dff0d634963d76fed3ac8ade6661a7475bJonathan Gerrish  @Config(minSdk = Build.VERSION_CODES.O)
43452851dff0d634963d76fed3ac8ade6661a7475bJonathan Gerrish  public void createDirectChannel() throws Exception {
44c78f09e8aacde37688444e0ea86b8ef32536955eJonathan Gerrish    SensorDirectChannel channel = (SensorDirectChannel) sensorManager.createDirectChannel(new MemoryFile("name", 10));
45452851dff0d634963d76fed3ac8ade6661a7475bJonathan Gerrish    assertThat(channel.isValid()).isTrue();
46452851dff0d634963d76fed3ac8ade6661a7475bJonathan Gerrish
47452851dff0d634963d76fed3ac8ade6661a7475bJonathan Gerrish    channel.close();
48452851dff0d634963d76fed3ac8ade6661a7475bJonathan Gerrish    assertThat(channel.isValid()).isFalse();
49452851dff0d634963d76fed3ac8ade6661a7475bJonathan Gerrish  }
50452851dff0d634963d76fed3ac8ade6661a7475bJonathan Gerrish
51452851dff0d634963d76fed3ac8ade6661a7475bJonathan Gerrish  @Test
52f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams  public void shouldReturnHasListenerAfterRegisteringListener() {
53f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams    SensorEventListener listener = registerListener();
54f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams
55f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams    assertThat(shadow.hasListener(listener)).isTrue();
56f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams  }
57f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams
58f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams  private SensorEventListener registerListener() {
59f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams    SensorEventListener listener = new TestSensorEventListener();
60f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams    Sensor sensor = sensorManager.getDefaultSensor(SensorManager.SENSOR_ACCELEROMETER);
61f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams    sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL);
62f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams
63f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams    return listener;
64f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams  }
65f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams
66f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams  @Test
67f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams  public void shouldReturnHasNoListenerAfterUnregisterListener() {
68f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams    SensorEventListener listener = registerListener();
69f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams    sensorManager.unregisterListener(listener, sensorManager.getDefaultSensor(SensorManager.SENSOR_ACCELEROMETER));
70f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams
71f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams    assertThat(shadow.hasListener(listener)).isFalse();
727052552ebed64b496de8e79f29ab587f2d935054nimeacuerdo  }
737052552ebed64b496de8e79f29ab587f2d935054nimeacuerdo
747052552ebed64b496de8e79f29ab587f2d935054nimeacuerdo  @Test
757052552ebed64b496de8e79f29ab587f2d935054nimeacuerdo  public void shouldReturnHasNoListenerAfterUnregisterListenerWithoutSpecificSensor() {
767052552ebed64b496de8e79f29ab587f2d935054nimeacuerdo    SensorEventListener listener = registerListener();
777052552ebed64b496de8e79f29ab587f2d935054nimeacuerdo    sensorManager.unregisterListener(listener);
787052552ebed64b496de8e79f29ab587f2d935054nimeacuerdo
797052552ebed64b496de8e79f29ab587f2d935054nimeacuerdo    assertThat(shadow.hasListener(listener)).isFalse();
80f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams  }
81f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams
82f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams  @Test
83f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams  public void shouldReturnHasNoListenerByDefault() {
84f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams    SensorEventListener listener = new TestSensorEventListener();
85f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams
86f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams    assertThat(shadow.hasListener(listener)).isFalse();
87f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams  }
88f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams
89f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams  @Test
90f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams  public void shouldCreateSensorEvent() {
91f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams    assertThat(shadow.createSensorEvent() instanceof SensorEvent).isTrue();
92f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams  }
93f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams
9429a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  @Test
9529a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  public void getSensor_shouldBeConfigurable() {
961f7901d153aed7f8f66c487a4f8fa2001ed1440eErich Douglass    Sensor sensor = Shadow.newInstanceOf(Sensor.class);
9729a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    shadowOf(sensorManager).addSensor(Sensor.TYPE_ACCELEROMETER, sensor);
9829a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    assertThat(sensor).isSameAs(sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER));
9929a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  }
100f8f6b40110c63bca5df45d01b914c21269638164Nathan Shayefar and Phil Goodwin
10129a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  @Test
10229a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  public void shouldReturnASensorList() throws Exception {
10329a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    assertThat(sensorManager.getSensorList(0)).isNotNull();
10429a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  }
105e3cd0f53a651b261d868ad95d778dde07de2fc67Ray Ryan
10607e61e04ff795fb67174de36821945e7501c2ff6Christian Williams  private static class TestSensorEventListener implements SensorEventListener {
107f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams
108f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams    @Override
109f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams    public void onAccuracyChanged(Sensor sensor, int accuracy) {
110f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams    }
1115aab2036d99aa0bdced8c12a41a2b67a0bc8d676Dave
112f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams    @Override
113f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams    public void onSensorChanged(SensorEvent event) {
114f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams    }
1155aab2036d99aa0bdced8c12a41a2b67a0bc8d676Dave
116f3a67bea2e9e481c7344b416ec0e90ceb27ec005Christian Williams  }
1175aab2036d99aa0bdced8c12a41a2b67a0bc8d676Dave}
118