1a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao/* 2a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * Copyright (C) 2010 The Android Open Source Project 3a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * 4a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * Licensed under the Apache License, Version 2.0 (the "License"); 5a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * you may not use this file except in compliance with the License. 6a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * You may obtain a copy of the License at 7a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * 8a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * http://www.apache.org/licenses/LICENSE-2.0 9a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * 10a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * Unless required by applicable law or agreed to in writing, software 11a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * distributed under the License is distributed on an "AS IS" BASIS, 12a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * See the License for the specific language governing permissions and 14a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao * limitations under the License 15a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao */ 16a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 17a58a8751b4c2ce457f0082a0baaee61312d56195Bai Taopackage com.android.server; 18a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 19a58a8751b4c2ce457f0082a0baaee61312d56195Bai Taoimport android.content.Context; 20a58a8751b4c2ce457f0082a0baaee61312d56195Bai Taoimport android.location.Country; 21a58a8751b4c2ce457f0082a0baaee61312d56195Bai Taoimport android.location.CountryListener; 22a58a8751b4c2ce457f0082a0baaee61312d56195Bai Taoimport android.location.ICountryListener; 23a58a8751b4c2ce457f0082a0baaee61312d56195Bai Taoimport android.os.RemoteException; 24a58a8751b4c2ce457f0082a0baaee61312d56195Bai Taoimport android.test.AndroidTestCase; 25a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 26a58a8751b4c2ce457f0082a0baaee61312d56195Bai Taopublic class CountryDetectorServiceTest extends AndroidTestCase { 27a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao private class CountryListenerTester extends ICountryListener.Stub { 28a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao private Country mCountry; 29a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 30a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao @Override 31a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public void onCountryDetected(Country country) throws RemoteException { 32a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao mCountry = country; 33a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 34a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 35a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public Country getCountry() { 36a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return mCountry; 37a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 38a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 39a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public boolean isNotified() { 40a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return mCountry != null; 41a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 42a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 43a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 44a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao private class CountryDetectorServiceTester extends CountryDetectorService { 45a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 46a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao private CountryListener mListener; 47a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 48a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public CountryDetectorServiceTester(Context context) { 49a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao super(context); 50a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 51a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 52a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao @Override 53a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public void notifyReceivers(Country country) { 54a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao super.notifyReceivers(country); 55a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 56a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 57a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao @Override 58a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao protected void setCountryListener(final CountryListener listener) { 59a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao mListener = listener; 60a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 61a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 62a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public boolean isListenerSet() { 63a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return mListener != null; 64a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 65a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 66a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 67a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public void testAddRemoveListener() throws RemoteException { 68a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao CountryDetectorServiceTester serviceTester = new CountryDetectorServiceTester(getContext()); 69a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao serviceTester.systemReady(); 70a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao waitForSystemReady(serviceTester); 71a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao CountryListenerTester listenerTester = new CountryListenerTester(); 72a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao serviceTester.addCountryListener(listenerTester); 73a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(serviceTester.isListenerSet()); 74a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao serviceTester.removeCountryListener(listenerTester); 75a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertFalse(serviceTester.isListenerSet()); 76a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 77a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 78a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao public void testNotifyListeners() throws RemoteException { 79a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao CountryDetectorServiceTester serviceTester = new CountryDetectorServiceTester(getContext()); 80a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao CountryListenerTester listenerTesterA = new CountryListenerTester(); 81a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao CountryListenerTester listenerTesterB = new CountryListenerTester(); 82a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao Country country = new Country("US", Country.COUNTRY_SOURCE_NETWORK); 83a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao serviceTester.systemReady(); 84a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao waitForSystemReady(serviceTester); 85a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao serviceTester.addCountryListener(listenerTesterA); 86a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao serviceTester.addCountryListener(listenerTesterB); 87a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao serviceTester.notifyReceivers(country); 88a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(serviceTester.isListenerSet()); 89a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(listenerTesterA.isNotified()); 90a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertTrue(listenerTesterB.isNotified()); 91a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao serviceTester.removeCountryListener(listenerTesterA); 92a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao serviceTester.removeCountryListener(listenerTesterB); 93a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao assertFalse(serviceTester.isListenerSet()); 94a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 95a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao 96a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao private void waitForSystemReady(CountryDetectorService service) { 97a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao int count = 5; 98a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao while (count-- > 0) { 99a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao try { 100a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao Thread.sleep(500); 101a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } catch (Exception e) { 102a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 103a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao if (service.isSystemReady()) { 104a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao return; 105a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 106a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 107a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao throw new RuntimeException("Wait System Ready timeout"); 108a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao } 109a58a8751b4c2ce457f0082a0baaee61312d56195Bai Tao} 110