• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.android.server.location;
2 
3 import static org.mockito.Matchers.anyDouble;
4 import static org.mockito.Matchers.anyInt;
5 import static org.mockito.Matchers.eq;
6 import static org.mockito.Mockito.times;
7 import static org.mockito.Mockito.verify;
8 import static org.mockito.Mockito.when;
9 
10 import android.os.Looper;
11 import android.os.RemoteException;
12 import android.platform.test.annotations.Presubmit;
13 
14 import com.android.server.testing.FrameworkRobolectricTestRunner;
15 import com.android.server.testing.SystemLoaderPackages;
16 
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.junit.runner.RunWith;
20 import org.mockito.Mock;
21 import org.mockito.MockitoAnnotations;
22 import org.robolectric.annotation.Config;
23 
24 /**
25  * Unit tests for {@link GnssGeofenceProvider}.
26  */
27 @RunWith(FrameworkRobolectricTestRunner.class)
28 @Config(
29         manifest = Config.NONE,
30         sdk = 27
31 )
32 @SystemLoaderPackages({"com.android.server.location"})
33 @Presubmit
34 public class GnssGeofenceProviderTest {
35     private static final int GEOFENCE_ID = 12345;
36     private static final double LATITUDE = 10.0;
37     private static final double LONGITUDE = 20.0;
38     private static final double RADIUS = 5.0;
39     private static final int LAST_TRANSITION = 0;
40     private static final int MONITOR_TRANSITIONS = 0;
41     private static final int NOTIFICATION_RESPONSIVENESS = 0;
42     private static final int UNKNOWN_TIMER = 0;
43     @Mock
44     private GnssGeofenceProvider.GnssGeofenceProviderNative mMockNative;
45     private GnssGeofenceProvider mTestProvider;
46 
47     @Before
setUp()48     public void setUp() {
49         MockitoAnnotations.initMocks(this);
50         when(mMockNative.addGeofence(anyInt(), anyDouble(), anyDouble(), anyDouble(), anyInt(),
51                 anyInt(), anyInt(), anyInt())).thenReturn(true);
52         when(mMockNative.pauseGeofence(anyInt())).thenReturn(true);
53         when(mMockNative.removeGeofence(anyInt())).thenReturn(true);
54         when(mMockNative.resumeGeofence(anyInt(), anyInt())).thenReturn(true);
55         mTestProvider = new GnssGeofenceProvider(Looper.myLooper(), mMockNative);
56         mTestProvider.addCircularHardwareGeofence(GEOFENCE_ID, LATITUDE,
57                 LONGITUDE, RADIUS, LAST_TRANSITION, MONITOR_TRANSITIONS,
58                 NOTIFICATION_RESPONSIVENESS,
59                 UNKNOWN_TIMER);
60     }
61 
62     @Test
addGeofence_nativeAdded()63     public void addGeofence_nativeAdded() {
64         verify(mMockNative).addGeofence(eq(GEOFENCE_ID), eq(LATITUDE), eq(LONGITUDE),
65                 eq(RADIUS), eq(LAST_TRANSITION), eq(MONITOR_TRANSITIONS),
66                 eq(NOTIFICATION_RESPONSIVENESS),
67                 eq(UNKNOWN_TIMER));
68     }
69 
70     @Test
pauseGeofence_nativePaused()71     public void pauseGeofence_nativePaused() {
72         mTestProvider.pauseHardwareGeofence(GEOFENCE_ID);
73         verify(mMockNative).pauseGeofence(eq(GEOFENCE_ID));
74     }
75 
76     @Test
removeGeofence_nativeRemoved()77     public void removeGeofence_nativeRemoved() {
78         mTestProvider.removeHardwareGeofence(GEOFENCE_ID);
79         verify(mMockNative).removeGeofence(eq(GEOFENCE_ID));
80     }
81 
82     @Test
resumeGeofence_nativeResumed()83     public void resumeGeofence_nativeResumed() {
84         mTestProvider.pauseHardwareGeofence(GEOFENCE_ID);
85         mTestProvider.resumeHardwareGeofence(GEOFENCE_ID, MONITOR_TRANSITIONS);
86         verify(mMockNative).resumeGeofence(eq(GEOFENCE_ID), eq(MONITOR_TRANSITIONS));
87     }
88 
89     @Test
addGeofence_restart_added()90     public void addGeofence_restart_added() throws RemoteException {
91         mTestProvider.resumeIfStarted();
92 
93         verify(mMockNative, times(2)).addGeofence(eq(GEOFENCE_ID), eq(LATITUDE), eq(LONGITUDE),
94                 eq(RADIUS), eq(LAST_TRANSITION), eq(MONITOR_TRANSITIONS),
95                 eq(NOTIFICATION_RESPONSIVENESS),
96                 eq(UNKNOWN_TIMER));
97     }
98 
99     @Test
removeGeofence_restart_notAdded()100     public void removeGeofence_restart_notAdded() throws RemoteException {
101         mTestProvider.removeHardwareGeofence(GEOFENCE_ID);
102         mTestProvider.resumeIfStarted();
103 
104         verify(mMockNative, times(1)).addGeofence(eq(GEOFENCE_ID), eq(LATITUDE), eq(LONGITUDE),
105                 eq(RADIUS), eq(LAST_TRANSITION), eq(MONITOR_TRANSITIONS),
106                 eq(NOTIFICATION_RESPONSIVENESS),
107                 eq(UNKNOWN_TIMER));
108     }
109 
110     @Test
pauseGeofence_restart_paused()111     public void pauseGeofence_restart_paused() throws RemoteException {
112         mTestProvider.pauseHardwareGeofence(GEOFENCE_ID);
113         mTestProvider.resumeIfStarted();
114 
115         verify(mMockNative, times(2)).addGeofence(eq(GEOFENCE_ID), eq(LATITUDE), eq(LONGITUDE),
116                 eq(RADIUS), eq(LAST_TRANSITION), eq(MONITOR_TRANSITIONS),
117                 eq(NOTIFICATION_RESPONSIVENESS),
118                 eq(UNKNOWN_TIMER));
119         verify(mMockNative, times(2)).pauseGeofence(eq(GEOFENCE_ID));
120     }
121 }
122