• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.location.cts.fine;
18 
19 import static org.junit.Assert.assertThrows;
20 import static org.junit.Assume.assumeTrue;
21 import static org.mockito.ArgumentMatchers.anyList;
22 import static org.mockito.Mockito.mock;
23 import static org.mockito.Mockito.timeout;
24 import static org.mockito.Mockito.verify;
25 
26 import android.content.Context;
27 import android.location.Geocoder;
28 import android.location.Geocoder.GeocodeListener;
29 import android.platform.test.annotations.AppModeFull;
30 
31 import androidx.test.core.app.ApplicationProvider;
32 import androidx.test.ext.junit.runners.AndroidJUnit4;
33 
34 import com.android.compatibility.common.util.ApiTest;
35 import com.android.compatibility.common.util.RetryRule;
36 
37 import org.junit.Before;
38 import org.junit.Rule;
39 import org.junit.Test;
40 import org.junit.runner.RunWith;
41 
42 import java.util.Locale;
43 
44 @RunWith(AndroidJUnit4.class)
45 public class GeocoderTest {
46 
47     // retry just in case of network failure
48     @Rule
49     public final RetryRule mRetryRule = new RetryRule(2);
50 
51     private Context mContext;
52     private Geocoder mGeocoder;
53 
54     @Before
setUp()55     public void setUp() {
56         mContext = ApplicationProvider.getApplicationContext();
57         mGeocoder = new Geocoder(mContext, Locale.US);
58     }
59 
60     @ApiTest(apis = "android.location.Geocoder#getFromLocation")
61     @AppModeFull(reason = "b/238831704 - Test cases don't apply for Instant apps")
62     @Test
testGetFromLocation()63     public void testGetFromLocation() {
64         assumeTrue(Geocoder.isPresent());
65 
66         GeocodeListener listener = mock(GeocodeListener.class);
67         mGeocoder.getFromLocation(60, 30, 5, listener);
68         verify(listener, timeout(10000)).onGeocode(anyList());
69     }
70 
71     @ApiTest(apis = "android.location.Geocoder#getFromLocation")
72     @AppModeFull(reason = "b/238831704 - Test cases don't apply for Instant apps")
73     @Test
testGetFromLocation_sync()74     public void testGetFromLocation_sync() throws Exception {
75         assumeTrue(Geocoder.isPresent());
76 
77         mGeocoder.getFromLocation(60, 30, 5);
78     }
79 
80     @ApiTest(apis = "android.location.Geocoder#getFromLocation")
81     @AppModeFull(reason = "b/238831704 - Test cases don't apply for Instant apps")
82     @Test
testGetFromLocation_badInput()83     public void testGetFromLocation_badInput() {
84         GeocodeListener listener = mock(GeocodeListener.class);
85         assertThrows(IllegalArgumentException.class,
86                 () -> mGeocoder.getFromLocation(-91, 30, 5, listener));
87         assertThrows(IllegalArgumentException.class,
88                 () -> mGeocoder.getFromLocation(91, 30, 5, listener));
89         assertThrows(IllegalArgumentException.class,
90                 () -> mGeocoder.getFromLocation(10, -181, 5, listener));
91         assertThrows(IllegalArgumentException.class,
92                 () -> mGeocoder.getFromLocation(10, 181, 5, listener));
93     }
94 
95     @ApiTest(apis = "android.location.Geocoder#getFromLocationName")
96     @AppModeFull(reason = "b/238831704 - Test cases don't apply for Instant apps")
97     @Test
testGetFromLocationName()98     public void testGetFromLocationName() {
99         assumeTrue(Geocoder.isPresent());
100 
101         GeocodeListener listener = mock(GeocodeListener.class);
102         mGeocoder.getFromLocationName("Dalvik,Iceland", 5, listener);
103         verify(listener, timeout(10000)).onGeocode(anyList());
104     }
105 
106     @ApiTest(apis = "android.location.Geocoder#getFromLocationName")
107     @AppModeFull(reason = "b/238831704 - Test cases don't apply for Instant apps")
108     @Test
testGetFromLocationName_sync()109     public void testGetFromLocationName_sync() throws Exception {
110         assumeTrue(Geocoder.isPresent());
111 
112         mGeocoder.getFromLocationName("Dalvik,Iceland", 5);
113     }
114 
115     @ApiTest(apis = "android.location.Geocoder#getFromLocationName")
116     @AppModeFull(reason = "b/238831704 - Test cases don't apply for Instant apps")
117     @Test
testGetFromLocationName_badInput()118     public void testGetFromLocationName_badInput() {
119         GeocodeListener listener = mock(GeocodeListener.class);
120         assertThrows(IllegalArgumentException.class,
121                 () -> mGeocoder.getFromLocationName(null, 5, listener));
122         assertThrows(IllegalArgumentException.class,
123                 () -> mGeocoder.getFromLocationName("Beijing", 5, -91, 100, 45, 130, listener));
124         assertThrows(IllegalArgumentException.class,
125                 () -> mGeocoder.getFromLocationName("Beijing", 5, 25, 190, 45, 130, listener));
126         assertThrows(IllegalArgumentException.class,
127                 () -> mGeocoder.getFromLocationName("Beijing", 5, 25, 100, 91, 130, listener));
128         assertThrows(IllegalArgumentException.class,
129                 () -> mGeocoder.getFromLocationName("Beijing", 5, 25, 100, 45, -181, listener));
130     }
131 }
132