1package com.xtremelabs.robolectric.shadows;
2
3import android.content.Context;
4import android.hardware.Sensor;
5import android.hardware.SensorEvent;
6import android.hardware.SensorEventListener;
7import android.hardware.SensorManager;
8import com.xtremelabs.robolectric.Robolectric;
9import com.xtremelabs.robolectric.WithTestDefaultsRunner;
10import org.junit.After;
11import org.junit.Before;
12import org.junit.Test;
13import org.junit.runner.RunWith;
14
15import static com.xtremelabs.robolectric.Robolectric.shadowOf;
16import static org.junit.Assert.*;
17
18@RunWith(WithTestDefaultsRunner.class)
19public class SensorManagerTest {
20
21	private SensorManager sensorManager;
22	private ShadowSensorManager shadow;
23
24	@Before
25	public void setup() {
26		sensorManager = (SensorManager) Robolectric.application.getSystemService(Context.SENSOR_SERVICE);
27		shadow = shadowOf(sensorManager);
28	}
29
30	@After
31	public void tearDown() {
32		sensorManager = null;
33		shadow = null;
34	}
35
36	@Test
37	public void shouldReturnHasListenerAfterRegisteringListener() {
38		SensorEventListener listener = registerListener();
39
40		assertTrue(shadow.hasListener(listener));
41	}
42
43	private SensorEventListener registerListener() {
44		SensorEventListener listener = new TestSensorEventListener();
45		Sensor sensor = sensorManager.getDefaultSensor(SensorManager.SENSOR_ACCELEROMETER);
46		sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL);
47
48		return listener;
49	}
50
51	@Test
52	public void shouldReturnHasNoListenerAfterUnregisterListener() {
53		SensorEventListener listener = registerListener();
54		sensorManager.unregisterListener(listener, sensorManager.getDefaultSensor(SensorManager.SENSOR_ACCELEROMETER));
55
56		assertFalse(shadow.hasListener(listener));
57	}
58
59	@Test
60	public void shouldReturnHasNoListenerByDefault() {
61		SensorEventListener listener = new TestSensorEventListener();
62
63		assertFalse(shadow.hasListener(listener));
64	}
65
66	@Test
67	public void shouldCreateSensorEvent() {
68		assertTrue(shadow.createSensorEvent() instanceof SensorEvent);
69	}
70
71	private class TestSensorEventListener implements SensorEventListener {
72
73		@Override
74		public void onAccuracyChanged(Sensor sensor, int accuracy) {
75		}
76
77		@Override
78		public void onSensorChanged(SensorEvent event) {
79		}
80
81	}
82}
83