Home | History | Annotate | Download | only in server
      1 /*
      2  * Copyright (C) 2010 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 com.android.server;
     18 
     19 import android.content.Context;
     20 import android.location.Country;
     21 import android.location.CountryListener;
     22 import android.location.ICountryListener;
     23 import android.os.RemoteException;
     24 import android.test.AndroidTestCase;
     25 
     26 public class CountryDetectorServiceTest extends AndroidTestCase {
     27     private class CountryListenerTester extends ICountryListener.Stub {
     28         private Country mCountry;
     29 
     30         @Override
     31         public void onCountryDetected(Country country) throws RemoteException {
     32             mCountry = country;
     33         }
     34 
     35         public Country getCountry() {
     36             return mCountry;
     37         }
     38 
     39         public boolean isNotified() {
     40             return mCountry != null;
     41         }
     42     }
     43 
     44     private class CountryDetectorServiceTester extends CountryDetectorService {
     45 
     46         private CountryListener mListener;
     47 
     48         public CountryDetectorServiceTester(Context context) {
     49             super(context);
     50         }
     51 
     52         @Override
     53         public void notifyReceivers(Country country) {
     54             super.notifyReceivers(country);
     55         }
     56 
     57         @Override
     58         protected void setCountryListener(final CountryListener listener) {
     59             mListener = listener;
     60         }
     61 
     62         public boolean isListenerSet() {
     63             return mListener != null;
     64         }
     65     }
     66 
     67     public void testAddRemoveListener() throws RemoteException {
     68         CountryDetectorServiceTester serviceTester = new CountryDetectorServiceTester(getContext());
     69         serviceTester.systemRunning();
     70         waitForSystemReady(serviceTester);
     71         CountryListenerTester listenerTester = new CountryListenerTester();
     72         serviceTester.addCountryListener(listenerTester);
     73         assertTrue(serviceTester.isListenerSet());
     74         serviceTester.removeCountryListener(listenerTester);
     75         assertFalse(serviceTester.isListenerSet());
     76     }
     77 
     78     public void testNotifyListeners() throws RemoteException {
     79         CountryDetectorServiceTester serviceTester = new CountryDetectorServiceTester(getContext());
     80         CountryListenerTester listenerTesterA = new CountryListenerTester();
     81         CountryListenerTester listenerTesterB = new CountryListenerTester();
     82         Country country = new Country("US", Country.COUNTRY_SOURCE_NETWORK);
     83         serviceTester.systemRunning();
     84         waitForSystemReady(serviceTester);
     85         serviceTester.addCountryListener(listenerTesterA);
     86         serviceTester.addCountryListener(listenerTesterB);
     87         serviceTester.notifyReceivers(country);
     88         assertTrue(serviceTester.isListenerSet());
     89         assertTrue(listenerTesterA.isNotified());
     90         assertTrue(listenerTesterB.isNotified());
     91         serviceTester.removeCountryListener(listenerTesterA);
     92         serviceTester.removeCountryListener(listenerTesterB);
     93         assertFalse(serviceTester.isListenerSet());
     94     }
     95 
     96     private void waitForSystemReady(CountryDetectorService service) {
     97         int count = 5;
     98         while (count-- > 0) {
     99             try {
    100                 Thread.sleep(500);
    101             } catch (Exception e) {
    102             }
    103             if (service.isSystemReady()) {
    104                 return;
    105             }
    106         }
    107         throw new RuntimeException("Wait System Ready timeout");
    108     }
    109 }
    110