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