Home | History | Annotate | Download | only in robolectric
      1 package com.xtremelabs.robolectric;
      2 
      3 import java.lang.reflect.Field;
      4 import java.lang.reflect.Modifier;
      5 import java.util.Arrays;
      6 import java.util.List;
      7 
      8 import org.apache.http.Header;
      9 import org.apache.http.HttpRequest;
     10 import org.apache.http.HttpResponse;
     11 import org.apache.http.impl.client.DefaultRequestDirector;
     12 
     13 import android.accounts.AccountManager;
     14 import android.app.*;
     15 import android.appwidget.AppWidgetManager;
     16 import android.bluetooth.BluetoothAdapter;
     17 import android.bluetooth.BluetoothDevice;
     18 import android.content.*;
     19 import android.content.pm.ResolveInfo;
     20 import android.content.pm.Signature;
     21 import android.content.res.AssetManager;
     22 import android.content.res.Configuration;
     23 import android.content.res.Resources;
     24 import android.content.res.Resources.Theme;
     25 import android.database.CursorWrapper;
     26 import android.database.sqlite.*;
     27 import android.graphics.*;
     28 import android.graphics.drawable.*;
     29 import android.hardware.Camera;
     30 import android.hardware.SensorManager;
     31 import android.location.Address;
     32 import android.location.Geocoder;
     33 import android.location.LocationManager;
     34 import android.media.AudioManager;
     35 import android.media.MediaPlayer;
     36 import android.media.MediaRecorder;
     37 import android.net.ConnectivityManager;
     38 import android.net.NetworkInfo;
     39 import android.net.wifi.ScanResult;
     40 import android.net.wifi.WifiConfiguration;
     41 import android.net.wifi.WifiInfo;
     42 import android.net.wifi.WifiManager;
     43 import android.os.*;
     44 import android.preference.*;
     45 import android.support.v4.app.DialogFragment;
     46 import android.support.v4.app.Fragment;
     47 import android.support.v4.app.FragmentActivity;
     48 import android.support.v4.app.FragmentPagerAdapter;
     49 import android.support.v4.app.ListFragment;
     50 import android.support.v4.content.CursorLoader;
     51 import android.support.v4.view.PagerAdapter;
     52 import android.support.v4.view.ViewPager;
     53 import android.telephony.PhoneNumberUtils;
     54 import android.telephony.SmsManager;
     55 import android.telephony.TelephonyManager;
     56 import android.text.ClipboardManager;
     57 import android.text.TextPaint;
     58 import android.text.format.DateFormat;
     59 import android.text.method.PasswordTransformationMethod;
     60 import android.util.SparseArray;
     61 import android.util.SparseBooleanArray;
     62 import android.util.SparseIntArray;
     63 import android.view.*;
     64 import android.view.animation.*;
     65 import android.view.inputmethod.InputMethodManager;
     66 import android.webkit.*;
     67 import android.widget.*;
     68 
     69 import com.xtremelabs.robolectric.bytecode.RobolectricInternals;
     70 import com.xtremelabs.robolectric.bytecode.ShadowWrangler;
     71 import com.xtremelabs.robolectric.shadows.*;
     72 import com.xtremelabs.robolectric.shadows.ShadowResources.ShadowTheme;
     73 import com.xtremelabs.robolectric.tester.org.apache.http.FakeHttpLayer;
     74 import com.xtremelabs.robolectric.tester.org.apache.http.HttpRequestInfo;
     75 import com.xtremelabs.robolectric.tester.org.apache.http.RequestMatcher;
     76 import com.xtremelabs.robolectric.util.Scheduler;
     77 
     78 public class Robolectric {
     79     public static Application application;
     80 
     81     public static <T> T newInstanceOf(Class<T> clazz) {
     82         return RobolectricInternals.newInstanceOf(clazz);
     83     }
     84 
     85     public static Object newInstanceOf(String className) {
     86         try {
     87             Class<?> clazz = Class.forName(className);
     88             if (clazz != null) {
     89                 return newInstanceOf(clazz);
     90             }
     91         } catch (ClassNotFoundException e) {
     92         }
     93         return null;
     94     }
     95 
     96     public static void bindShadowClass(Class<?> shadowClass) {
     97         RobolectricInternals.bindShadowClass(shadowClass);
     98     }
     99 
    100     public static void bindDefaultShadowClasses() {
    101         bindShadowClasses(getDefaultShadowClasses());
    102     }
    103 
    104     public static void bindShadowClasses(List<Class<?>> shadowClasses) {
    105         for (Class<?> shadowClass : shadowClasses) {
    106             bindShadowClass(shadowClass);
    107         }
    108     }
    109 
    110     /**
    111      * Invoke this utility method in tests to reveal which Android api classes and methods are being invoked
    112      * for which there are no shadows or shadow methods. This helps expose which methods are being invoked
    113      * either by a third party library or application code which need new shadow methods to be written. Generates
    114      * output for the current test only.
    115      */
    116     public static void logMissingInvokedShadowMethods() {
    117         ShadowWrangler.getInstance().logMissingInvokedShadowMethods();
    118     }
    119 
    120     public static List<Class<?>> getDefaultShadowClasses() {
    121         return Arrays.asList(
    122                 ShadowAbsListView.class,
    123                 ShadowAbsoluteLayout.class,
    124                 ShadowAbsSeekBar.class,
    125                 ShadowAbsSpinner.class,
    126                 ShadowAbstractCursor.class,
    127                 ShadowAccount.class,
    128                 ShadowAccountManager.class,
    129                 ShadowActivity.class,
    130                 ShadowActivityInfo.class,
    131                 ShadowActivityGroup.class,
    132                 ShadowActivityManager.class,
    133                 ShadowAdapterView.class,
    134                 ShadowAddress.class,
    135                 ShadowAlarmManager.class,
    136                 ShadowAlertDialog.class,
    137                 ShadowAlertDialog.ShadowBuilder.class,
    138                 ShadowAlphaAnimation.class,
    139                 ShadowAndroidHttpClient.class,
    140                 ShadowAnimation.class,
    141                 ShadowAnimationDrawable.class,
    142                 ShadowAnimationSet.class,
    143                 ShadowAnimationUtils.class,
    144                 ShadowApplication.class,
    145                 ShadowAppWidgetManager.class,
    146                 ShadowArrayAdapter.class,
    147                 ShadowAssetManager.class,
    148                 ShadowAsyncTask.class,
    149                 ShadowAudioManager.class,
    150                 ShadowAutoCompleteTextView.class,
    151                 ShadowBase64.class,
    152                 ShadowBaseAdapter.class,
    153                 ShadowBinder.class,
    154                 ShadowBitmap.class,
    155                 ShadowBitmapDrawable.class,
    156                 ShadowBitmapFactory.class,
    157                 ShadowBluetoothAdapter.class,
    158                 ShadowBluetoothDevice.class,
    159                 ShadowBundle.class,
    160                 ShadowButton.class,
    161                 ShadowCamera.class,
    162                 ShadowCameraParameters.class,
    163                 ShadowCameraSize.class,
    164                 ShadowCanvas.class,
    165                 ShadowCheckedTextView.class,
    166                 ShadowClipboardManager.class,
    167                 ShadowColor.class,
    168                 ShadowColorDrawable.class,
    169                 ShadowColorMatrix.class,
    170                 ShadowColorMatrixColorFilter.class,
    171                 ShadowColorStateList.class,
    172                 ShadowComponentName.class,
    173                 ShadowCompoundButton.class,
    174                 ShadowConfiguration.class,
    175                 ShadowConnectivityManager.class,
    176                 ShadowContentProvider.class,
    177                 ShadowContentProviderOperation.class,
    178                 ShadowContentProviderOperationBuilder.class,
    179                 ShadowContentProviderResult.class,
    180                 ShadowContentResolver.class,
    181                 ShadowContentUris.class,
    182                 ShadowContentValues.class,
    183                 ShadowContext.class,
    184                 ShadowContextWrapper.class,
    185                 ShadowContextThemeWrapper.class,
    186                 ShadowCookieManager.class,
    187                 ShadowCookieSyncManager.class,
    188                 ShadowCriteria.class,
    189                 ShadowCountDownTimer.class,
    190                 ShadowCursorAdapter.class,
    191                 ShadowCursorLoader.class,
    192                 ShadowCursorWrapper.class,
    193                 ShadowDatabaseUtils.class,
    194                 ShadowDateFormat.class,
    195                 ShadowDefaultRequestDirector.class,
    196                 ShadowDisplay.class,
    197                 ShadowDrawable.class,
    198                 ShadowDialog.class,
    199                 ShadowDialogFragment.class,
    200                 ShadowDialogPreference.class,
    201                 ShadowEditText.class,
    202                 ShadowEnvironment.class,
    203                 ShadowExpandableListView.class,
    204                 ShadowFilter.class,
    205                 ShadowFloatMath.class,
    206                 ShadowFragment.class,
    207                 ShadowFragmentActivity.class,
    208                 ShadowFragmentPagerAdapter.class,
    209                 ShadowFrameLayout.class,
    210                 ShadowGallery.class,
    211                 ShadowGeocoder.class,
    212                 ShadowGeoPoint.class,
    213                 ShadowGridView.class,
    214                 ShadowHandler.class,
    215                 ShadowHandlerThread.class,
    216                 ShadowHtml.class,
    217                 ShadowImageView.class,
    218                 ShadowInputMethodManager.class,
    219                 ShadowIntent.class,
    220                 ShadowIntentFilter.class,
    221                 ShadowIntentFilterAuthorityEntry.class,
    222                 ShadowItemizedOverlay.class,
    223                 ShadowJsPromptResult.class,
    224                 ShadowJsResult.class,
    225                 ShadowKeyEvent.class,
    226                 ShadowKeyguardManager.class,
    227                 ShadowKeyGuardLock.class,
    228                 ShadowLayerDrawable.class,
    229                 ShadowLayoutInflater.class,
    230                 ShadowLayoutParams.class,
    231                 ShadowLinearLayout.class,
    232                 ShadowLinkMovementMethod.class,
    233                 ShadowListActivity.class,
    234                 ShadowListFragment.class,
    235                 ShadowListPreference.class,
    236                 ShadowListView.class,
    237                 ShadowLocation.class,
    238                 ShadowLocationManager.class,
    239                 ShadowLog.class,
    240                 ShadowLooper.class,
    241                 ShadowMapController.class,
    242                 ShadowMapActivity.class,
    243                 ShadowMapView.class,
    244                 ShadowMarginLayoutParams.class,
    245                 ShadowMatrix.class,
    246                 ShadowMatrixCursor.class,
    247                 ShadowMediaPlayer.class,
    248                 ShadowMediaRecorder.class,
    249                 ShadowMediaStore.ShadowImages.ShadowMedia.class,
    250                 ShadowMenuInflater.class,
    251                 ShadowMessage.class,
    252                 ShadowMessenger.class,
    253                 ShadowMimeTypeMap.class,
    254                 ShadowMotionEvent.class,
    255                 ShadowNotification.class,
    256                 ShadowNdefMessage.class,
    257                 ShadowNdefRecord.class,
    258                 ShadowNfcAdapter.class,
    259                 ShadowNotificationManager.class,
    260                 ShadowNetworkInfo.class,
    261                 ShadowOverlayItem.class,
    262                 ShadowPagerAdapter.class,
    263                 ShadowPaint.class,
    264                 ShadowPair.class,
    265                 ShadowParcel.class,
    266                 ShadowPasswordTransformationMethod.class,
    267                 ShadowPath.class,
    268                 ShadowPatterns.class,
    269                 ShadowPendingIntent.class,
    270                 ShadowPeriodicSync.class,
    271                 ShadowPhoneNumberUtils.class,
    272                 ShadowPoint.class,
    273                 ShadowPointF.class,
    274                 ShadowPopupWindow.class,
    275                 ShadowPowerManager.class,
    276                 ShadowPowerManager.ShadowWakeLock.class,
    277                 ShadowPreference.class,
    278                 ShadowPreferenceActivity.class,
    279                 ShadowPreferenceCategory.class,
    280                 ShadowPreferenceGroup.class,
    281                 ShadowPreferenceManager.class,
    282                 ShadowPreferenceScreen.class,
    283                 ShadowProcess.class,
    284                 ShadowProgressBar.class,
    285                 ShadowProgressDialog.class,
    286                 ShadowRadioButton.class,
    287                 ShadowRadioGroup.class,
    288                 ShadowRatingBar.class,
    289                 ShadowRect.class,
    290                 ShadowResolveInfo.class,
    291                 ShadowRemoteCallbackList.class,
    292                 ShadowRemoteViews.class,
    293                 ShadowResultReceiver.class,
    294                 ShadowResourceCursorAdapter.class,
    295                 ShadowResources.class,
    296                 ShadowResources.ShadowTheme.class,
    297                 ShadowScanResult.class,
    298                 ShadowScrollView.class,
    299                 ShadowSeekBar.class,
    300                 ShadowSensorManager.class,
    301                 ShadowService.class,
    302                 ShadowSettings.class,
    303                 ShadowSettings.ShadowGlobal.class,
    304                 ShadowSettings.ShadowSecure.class,
    305                 ShadowSettings.ShadowSystem.class,
    306                 ShadowSignature.class,
    307                 ShadowSimpleCursorAdapter.class,
    308                 ShadowShapeDrawable.class,
    309                 ShadowSmsManager.class,
    310                 ShadowSpannableString.class,
    311                 ShadowSpannableStringBuilder.class,
    312                 ShadowSparseArray.class,
    313                 ShadowSparseBooleanArray.class,
    314                 ShadowSparseIntArray.class,
    315                 ShadowSpinner.class,
    316                 ShadowSSLCertificateSocketFactory.class,
    317                 ShadowSyncResult.class,
    318                 ShadowSyncResult.ShadowSyncStats.class,
    319                 ShadowSQLiteProgram.class,
    320                 ShadowSQLiteCloseable.class,
    321                 ShadowSQLiteDatabase.class,
    322                 ShadowSQLiteCursor.class,
    323                 ShadowSQLiteOpenHelper.class,
    324                 ShadowSQLiteStatement.class,
    325                 ShadowSQLiteQueryBuilder.class,
    326                 ShadowSslErrorHandler.class,
    327                 ShadowStateListDrawable.class,
    328                 ShadowStatFs.class,
    329                 ShadowSurfaceView.class,
    330                 ShadowTabActivity.class,
    331                 ShadowTabHost.class,
    332                 ShadowTabSpec.class,
    333                 ShadowTelephonyManager.class,
    334                 ShadowTextPaint.class,
    335                 ShadowTextUtils.class,
    336                 ShadowTextView.class,
    337                 ShadowTime.class,
    338                 ShadowToast.class,
    339                 ShadowTranslateAnimation.class,
    340                 ShadowTypedArray.class,
    341                 ShadowTypedValue.class,
    342                 ShadowUriMatcher.class,
    343                 ShadowURLSpan.class,
    344                 ShadowVibrator.class,
    345                 ShadowVideoView.class,
    346                 ShadowView.class,
    347                 ShadowViewAnimator.class,
    348                 ShadowViewConfiguration.class,
    349                 ShadowViewGroup.class,
    350                 ShadowViewFlipper.class,
    351                 ShadowViewMeasureSpec.class,
    352                 ShadowViewPager.class,
    353                 ShadowViewStub.class,
    354                 ShadowViewTreeObserver.class,
    355                 ShadowWebView.class,
    356                 ShadowWifiConfiguration.class,
    357                 ShadowWifiInfo.class,
    358                 ShadowWifiManager.class,
    359                 ShadowWifiManager.ShadowWifiLock.class,
    360                 ShadowWindow.class,
    361                 ShadowZoomButtonsController.class
    362         );
    363     }
    364 
    365     public static void resetStaticState() {
    366         ShadowWrangler.getInstance().silence();
    367         Robolectric.application = new Application();
    368         ShadowBinder.reset();
    369         ShadowBitmapFactory.reset();
    370         ShadowDrawable.reset();
    371         ShadowMediaStore.reset();
    372         ShadowLog.reset();
    373         ShadowContext.clearFilesAndCache();
    374         ShadowLooper.resetThreadLoopers();
    375         ShadowDialog.reset();
    376         ShadowContentResolver.reset();
    377         ShadowLocalBroadcastManager.reset();
    378         ShadowMimeTypeMap.reset();
    379         ShadowStatFs.reset();
    380         ShadowProcess.reset();
    381         ShadowAccount.reset();
    382         ShadowIntent.reset();
    383         ShadowSignature.reset();
    384         ShadowBundle.reset();
    385         ShadowPatterns.reset();
    386     }
    387 
    388     public static <T> T directlyOn(T shadowedObject) {
    389         return RobolectricInternals.directlyOn(shadowedObject);
    390     }
    391 
    392     public static ShadowAbsListView shadowOf(AbsListView instance) {
    393         return (ShadowAbsListView) shadowOf_(instance);
    394     }
    395 
    396     public static ShadowAbsSeekBar shadowOf(AbsSeekBar instance) {
    397         return (ShadowAbsSeekBar) shadowOf_(instance);
    398     }
    399 
    400     public static ShadowAccountManager shadowOf(AccountManager instance) {
    401         return (ShadowAccountManager) shadowOf_(instance);
    402     }
    403 
    404     public static ShadowActivity shadowOf(Activity instance) {
    405         return (ShadowActivity) shadowOf_(instance);
    406     }
    407 
    408     public static ShadowActivityGroup shadowOf(ActivityGroup instance) {
    409         return (ShadowActivityGroup) shadowOf_(instance);
    410     }
    411 
    412     public static ShadowActivityManager shadowOf(ActivityManager instance) {
    413         return (ShadowActivityManager) shadowOf_(instance);
    414     }
    415 
    416     public static ShadowAdapterView shadowOf(AdapterView instance) {
    417         return (ShadowAdapterView) shadowOf_(instance);
    418     }
    419 
    420     public static ShadowAddress shadowOf(Address instance) {
    421         return (ShadowAddress) shadowOf_(instance);
    422     }
    423 
    424     public static ShadowAlarmManager shadowOf(AlarmManager instance) {
    425         return (ShadowAlarmManager) Robolectric.shadowOf_(instance);
    426     }
    427 
    428     public static ShadowAlertDialog shadowOf(AlertDialog instance) {
    429         return (ShadowAlertDialog) shadowOf_(instance);
    430     }
    431 
    432     public static ShadowAlphaAnimation shadowOf(AlphaAnimation instance) {
    433         return (ShadowAlphaAnimation) shadowOf_(instance);
    434     }
    435 
    436     public static ShadowAnimation shadowOf(Animation instance) {
    437         return (ShadowAnimation) shadowOf_(instance);
    438     }
    439 
    440     public static ShadowAnimationDrawable shadowOf(AnimationDrawable instance) {
    441         return (ShadowAnimationDrawable) shadowOf_(instance);
    442     }
    443 
    444     public static ShadowAnimationSet shadowOf(AnimationSet instance) {
    445         return (ShadowAnimationSet) shadowOf_(instance);
    446     }
    447 
    448     public static ShadowAnimationUtils shadowOf(AnimationUtils instance) {
    449         return (ShadowAnimationUtils) shadowOf_(instance);
    450     }
    451 
    452     public static ShadowApplication shadowOf(Application instance) {
    453         return (ShadowApplication) shadowOf_(instance);
    454     }
    455 
    456     public static ShadowAppWidgetManager shadowOf(AppWidgetManager instance) {
    457         return (ShadowAppWidgetManager) shadowOf_(instance);
    458     }
    459 
    460     public static ShadowArrayAdapter shadowOf(ArrayAdapter instance) {
    461         return (ShadowArrayAdapter) shadowOf_(instance);
    462     }
    463 
    464     public static ShadowAssetManager shadowOf(AssetManager instance) {
    465         return (ShadowAssetManager) Robolectric.shadowOf_(instance);
    466     }
    467 
    468     @SuppressWarnings("rawtypes")
    469 	public static ShadowAsyncTask shadowOf(AsyncTask instance){
    470     	return (ShadowAsyncTask) Robolectric.shadowOf_( instance );
    471     }
    472 
    473     public static ShadowAudioManager shadowOf(AudioManager instance) {
    474         return (ShadowAudioManager) shadowOf_(instance);
    475     }
    476 
    477     public static ShadowAutoCompleteTextView shadowOf(AutoCompleteTextView instance) {
    478         return (ShadowAutoCompleteTextView) shadowOf_(instance);
    479     }
    480 
    481     public static ShadowBaseAdapter shadowOf(BaseAdapter other) {
    482         return (ShadowBaseAdapter) Robolectric.shadowOf_(other);
    483     }
    484 
    485     public static ShadowBitmap shadowOf(Bitmap other) {
    486         return (ShadowBitmap) Robolectric.shadowOf_(other);
    487     }
    488 
    489     public static ShadowBitmapDrawable shadowOf(BitmapDrawable instance) {
    490         return (ShadowBitmapDrawable) shadowOf_(instance);
    491     }
    492 
    493     public static ShadowBluetoothAdapter shadowOf(BluetoothAdapter other) {
    494         return (ShadowBluetoothAdapter) Robolectric.shadowOf_(other);
    495     }
    496 
    497     public static ShadowBluetoothDevice shadowOf(BluetoothDevice other) {
    498         return (ShadowBluetoothDevice) Robolectric.shadowOf_(other);
    499     }
    500 
    501     public static ShadowBundle shadowOf(Bundle instance) {
    502         return (ShadowBundle) shadowOf_(instance);
    503     }
    504 
    505     public static ShadowCamera shadowOf(Camera instance) {
    506         return (ShadowCamera) shadowOf_(instance);
    507     }
    508 
    509     public static ShadowCameraParameters shadowOf(Camera.Parameters instance) {
    510         return (ShadowCameraParameters) shadowOf_(instance);
    511     }
    512 
    513     public static ShadowCameraSize shadowOf(Camera.Size instance) {
    514         return (ShadowCameraSize) shadowOf_(instance);
    515     }
    516 
    517     public static ShadowCanvas shadowOf(Canvas instance) {
    518         return (ShadowCanvas) shadowOf_(instance);
    519     }
    520 
    521     public static ShadowCheckedTextView shadowOf(CheckedTextView instance) {
    522         return (ShadowCheckedTextView) shadowOf_(instance);
    523     }
    524 
    525     public static ShadowClipboardManager shadowOf(ClipboardManager instance) {
    526         return (ShadowClipboardManager) shadowOf_(instance);
    527     }
    528 
    529     public static ShadowColor shadowOf(Color instance) {
    530         return (ShadowColor) shadowOf_(instance);
    531     }
    532 
    533     public static ShadowColorDrawable shadowOf(ColorDrawable instance) {
    534         return (ShadowColorDrawable) shadowOf_(instance);
    535     }
    536 
    537     public static ShadowColorMatrix shadowOf(ColorMatrix instance) {
    538         return (ShadowColorMatrix) shadowOf_(instance);
    539     }
    540 
    541     public static ShadowConfiguration shadowOf(Configuration instance) {
    542         return (ShadowConfiguration) Robolectric.shadowOf_(instance);
    543     }
    544 
    545     public static ShadowConnectivityManager shadowOf(ConnectivityManager instance) {
    546         return (ShadowConnectivityManager) shadowOf_(instance);
    547     }
    548 
    549     public static ShadowCookieManager shadowOf(CookieManager instance) {
    550         return (ShadowCookieManager) shadowOf_(instance);
    551     }
    552 
    553     public static ShadowContentResolver shadowOf(ContentResolver instance) {
    554         return (ShadowContentResolver) shadowOf_(instance);
    555     }
    556 
    557     public static ShadowContentProviderOperation shadowOf(ContentProviderOperation instance) {
    558         return (ShadowContentProviderOperation) shadowOf_(instance);
    559     }
    560 
    561     public static ShadowContentProviderOperationBuilder shadowOf(ContentProviderOperation.Builder instance) {
    562         return (ShadowContentProviderOperationBuilder) shadowOf_(instance);
    563     }
    564 
    565     public static ShadowContentProviderResult shadowOf(ContentProviderResult instance) {
    566         return (ShadowContentProviderResult) shadowOf_(instance);
    567     }
    568 
    569     public static ShadowCookieSyncManager shadowOf(CookieSyncManager instance) {
    570         return (ShadowCookieSyncManager) shadowOf_(instance);
    571     }
    572 
    573     public static ShadowContext shadowOf(Context instance) {
    574         return (ShadowContext) shadowOf_(instance);
    575     }
    576 
    577     public static ShadowContentValues shadowOf(ContentValues other) {
    578         return (ShadowContentValues) Robolectric.shadowOf_(other);
    579     }
    580 
    581     public static ShadowContextWrapper shadowOf(ContextWrapper instance) {
    582         return (ShadowContextWrapper) shadowOf_(instance);
    583     }
    584 
    585     public static ShadowCountDownTimer shadowOf(CountDownTimer instance) {
    586         return (ShadowCountDownTimer) Robolectric.shadowOf_(instance);
    587     }
    588 
    589     public static ShadowCursorAdapter shadowOf(CursorAdapter instance) {
    590         return (ShadowCursorAdapter) shadowOf_(instance);
    591     }
    592 
    593     public static ShadowCursorLoader shadowOf(CursorLoader instance) {
    594         return (ShadowCursorLoader) shadowOf_(instance);
    595     }
    596 
    597     public static ShadowCursorWrapper shadowOf(CursorWrapper instance) {
    598         return (ShadowCursorWrapper) shadowOf_(instance);
    599     }
    600 
    601     public static ShadowDateFormat shadowOf(DateFormat instance) {
    602         return (ShadowDateFormat) shadowOf_(instance);
    603     }
    604 
    605     public static ShadowDefaultRequestDirector shadowOf(DefaultRequestDirector instance) {
    606         return (ShadowDefaultRequestDirector) shadowOf_(instance);
    607     }
    608 
    609     public static ShadowDialog shadowOf(Dialog instance) {
    610         return (ShadowDialog) shadowOf_(instance);
    611     }
    612 
    613     public static ShadowDialogFragment shadowOf(DialogFragment instance) {
    614         return (ShadowDialogFragment) shadowOf_(instance);
    615     }
    616 
    617     public static ShadowDialogPreference shadowOf(DialogPreference instance) {
    618         return (ShadowDialogPreference) shadowOf_(instance);
    619     }
    620 
    621     public static ShadowDrawable shadowOf(Drawable instance) {
    622         return (ShadowDrawable) shadowOf_(instance);
    623     }
    624 
    625     public static ShadowDisplay shadowOf(Display instance) {
    626         return (ShadowDisplay) shadowOf_(instance);
    627     }
    628 
    629     public static ShadowExpandableListView shadowOf(ExpandableListView instance) {
    630         return (ShadowExpandableListView) shadowOf_(instance);
    631     }
    632 
    633     public static ShadowFilter shadowOf(Filter instance) {
    634         return (ShadowFilter) shadowOf_(instance);
    635     }
    636 
    637     public static ShadowFragment shadowOf(Fragment instance) {
    638         return (ShadowFragment) shadowOf_(instance);
    639     }
    640 
    641     public static ShadowFragmentActivity shadowOf(FragmentActivity instance) {
    642         return (ShadowFragmentActivity) shadowOf_(instance);
    643     }
    644 
    645     public static ShadowFragmentPagerAdapter shadowOf(FragmentPagerAdapter instance) {
    646         return (ShadowFragmentPagerAdapter) shadowOf_(instance);
    647     }
    648 
    649     public static ShadowFrameLayout shadowOf(FrameLayout instance) {
    650         return (ShadowFrameLayout) shadowOf_(instance);
    651     }
    652 
    653     public static ShadowGallery shadowOf(Gallery instance) {
    654         return (ShadowGallery) shadowOf_(instance);
    655     }
    656 
    657     public static ShadowGeocoder shadowOf(Geocoder instance) {
    658         return (ShadowGeocoder) shadowOf_(instance);
    659     }
    660 
    661     public static ShadowGridView shadowOf(GridView instance) {
    662         return (ShadowGridView) shadowOf_(instance);
    663     }
    664 
    665     public static ShadowHandler shadowOf(Handler instance) {
    666         return (ShadowHandler) shadowOf_(instance);
    667     }
    668 
    669     public static ShadowHandlerThread shadowOf(HandlerThread instance) {
    670         return (ShadowHandlerThread) shadowOf_(instance);
    671     }
    672 
    673     public static ShadowImageView shadowOf(ImageView instance) {
    674         return (ShadowImageView) shadowOf_(instance);
    675     }
    676 
    677     public static ShadowInputMethodManager shadowOf(InputMethodManager instance) {
    678         return (ShadowInputMethodManager) shadowOf_(instance);
    679     }
    680 
    681     public static ShadowIntent shadowOf(Intent instance) {
    682         return (ShadowIntent) shadowOf_(instance);
    683     }
    684 
    685     public static ShadowJsPromptResult shadowOf(JsPromptResult instance) {
    686         return (ShadowJsPromptResult) shadowOf_(instance);
    687     }
    688 
    689     public static ShadowJsResult shadowOf(JsResult instance) {
    690         return (ShadowJsResult) shadowOf_(instance);
    691     }
    692 
    693     public static ShadowKeyguardManager shadowOf(KeyguardManager instance) {
    694         return (ShadowKeyguardManager) shadowOf_(instance);
    695     }
    696 
    697     public static ShadowKeyGuardLock shadowOf(KeyguardManager.KeyguardLock instance) {
    698         return (ShadowKeyGuardLock) shadowOf_(instance);
    699     }
    700 
    701     public static ShadowLayerDrawable shadowOf(LayerDrawable instance) {
    702         return (ShadowLayerDrawable) shadowOf_(instance);
    703     }
    704 
    705     public static ShadowLayoutInflater shadowOf(LayoutInflater instance) {
    706         return (ShadowLayoutInflater) shadowOf_(instance);
    707     }
    708 
    709     public static ShadowListActivity shadowOf(ListActivity instance) {
    710         return (ShadowListActivity) shadowOf_(instance);
    711     }
    712 
    713     public static ShadowListFragment shadowOf(ListFragment instance) {
    714         return (ShadowListFragment) shadowOf_(instance);
    715     }
    716 
    717     public static ShadowListPreference shadowOf(ListPreference instance) {
    718         return (ShadowListPreference) shadowOf_(instance);
    719     }
    720 
    721     public static ShadowListView shadowOf(ListView instance) {
    722         return (ShadowListView) shadowOf_(instance);
    723     }
    724 
    725     public static ShadowLocationManager shadowOf(LocationManager instance) {
    726         return (ShadowLocationManager) shadowOf_(instance);
    727     }
    728 
    729     public static ShadowLooper shadowOf(Looper instance) {
    730         return (ShadowLooper) shadowOf_(instance);
    731     }
    732 
    733     public static ShadowMatrix shadowOf(Matrix other) {
    734         return (ShadowMatrix) Robolectric.shadowOf_(other);
    735     }
    736 
    737     public static ShadowMediaPlayer shadowOf(MediaPlayer instance) {
    738         return (ShadowMediaPlayer) shadowOf_(instance);
    739     }
    740 
    741     public static ShadowMediaRecorder shadowOf(MediaRecorder instance) {
    742         return (ShadowMediaRecorder) shadowOf_(instance);
    743     }
    744 
    745     public static ShadowMenuInflater shadowOf(MenuInflater instance) {
    746         return (ShadowMenuInflater) shadowOf_(instance);
    747     }
    748 
    749     public static ShadowMessage shadowOf(Message instance) {
    750         return (ShadowMessage) shadowOf_(instance);
    751     }
    752 
    753     public static ShadowMimeTypeMap shadowOf(MimeTypeMap instance) {
    754         return (ShadowMimeTypeMap) shadowOf_(instance);
    755     }
    756 
    757     public static ShadowMotionEvent shadowOf(MotionEvent other) {
    758         return (ShadowMotionEvent) Robolectric.shadowOf_(other);
    759     }
    760 
    761     public static ShadowNetworkInfo shadowOf(NetworkInfo instance) {
    762         return (ShadowNetworkInfo) shadowOf_(instance);
    763     }
    764 
    765     public static ShadowNotification shadowOf(Notification other) {
    766         return (ShadowNotification) Robolectric.shadowOf_(other);
    767     }
    768 
    769     public static ShadowNotificationManager shadowOf(NotificationManager other) {
    770         return (ShadowNotificationManager) Robolectric.shadowOf_(other);
    771     }
    772 
    773     public static ShadowPagerAdapter shadowOf(PagerAdapter instance) {
    774         return (ShadowPagerAdapter) shadowOf_(instance);
    775     }
    776 
    777     public static ShadowPaint shadowOf(Paint instance) {
    778         return (ShadowPaint) shadowOf_(instance);
    779     }
    780 
    781     public static ShadowParcel shadowOf(Parcel instance) {
    782         return (ShadowParcel) shadowOf_(instance);
    783     }
    784 
    785     public static ShadowPasswordTransformationMethod shadowOf(PasswordTransformationMethod instance) {
    786         return (ShadowPasswordTransformationMethod) shadowOf_(instance);
    787     }
    788 
    789     public static ShadowPath shadowOf(Path instance) {
    790         return (ShadowPath) shadowOf_(instance);
    791     }
    792 
    793     public static ShadowPendingIntent shadowOf(PendingIntent instance) {
    794         return (ShadowPendingIntent) shadowOf_(instance);
    795     }
    796 
    797     public static ShadowPhoneNumberUtils shadowOf(PhoneNumberUtils instance) {
    798         return (ShadowPhoneNumberUtils) shadowOf_(instance);
    799     }
    800 
    801     public static ShadowPopupWindow shadowOf(PopupWindow instance) {
    802         return (ShadowPopupWindow) shadowOf_(instance);
    803     }
    804 
    805     public static ShadowPowerManager shadowOf(PowerManager instance) {
    806         return (ShadowPowerManager) shadowOf_(instance);
    807     }
    808 
    809     public static ShadowPreference shadowOf(Preference instance) {
    810         return (ShadowPreference) shadowOf_(instance);
    811     }
    812 
    813     public static ShadowPreferenceActivity shadowOf(PreferenceActivity instance) {
    814         return (ShadowPreferenceActivity) shadowOf_(instance);
    815     }
    816 
    817     public static ShadowPreferenceCategory shadowOf(PreferenceCategory instance) {
    818         return (ShadowPreferenceCategory) shadowOf_(instance);
    819     }
    820 
    821     public static ShadowPreferenceGroup shadowOf(PreferenceGroup instance) {
    822         return (ShadowPreferenceGroup) shadowOf_(instance);
    823     }
    824 
    825     public static ShadowPreferenceScreen shadowOf(PreferenceScreen instance) {
    826         return (ShadowPreferenceScreen) shadowOf_(instance);
    827     }
    828 
    829     public static ShadowProgressBar shadowOf(ProgressBar instance) {
    830         return (ShadowProgressBar) shadowOf_(instance);
    831     }
    832 
    833     public static ShadowProgressDialog shadowOf(ProgressDialog instance) {
    834         return (ShadowProgressDialog) shadowOf_(instance);
    835     }
    836 
    837     public static ShadowRect shadowOf(Rect instance) {
    838         return (ShadowRect) shadowOf_(instance);
    839     }
    840 
    841     public static ShadowRatingBar shadowOf(RatingBar instance) {
    842         return (ShadowRatingBar) shadowOf_(instance);
    843     }
    844 
    845     public static ShadowRemoteViews shadowOf(RemoteViews instance) {
    846         return (ShadowRemoteViews) shadowOf_(instance);
    847     }
    848 
    849     public static ShadowResolveInfo shadowOf(ResolveInfo instance) {
    850         return (ShadowResolveInfo) shadowOf_(instance);
    851     }
    852 
    853     public static ShadowResourceCursorAdapter shadowOf(ResourceCursorAdapter instance) {
    854         return (ShadowResourceCursorAdapter) shadowOf_(instance);
    855     }
    856 
    857     public static ShadowResources shadowOf(Resources instance) {
    858         return (ShadowResources) shadowOf_(instance);
    859     }
    860 
    861     public static ShadowResultReceiver shadowOf(ResultReceiver instance) {
    862         return (ShadowResultReceiver) shadowOf_(instance);
    863     }
    864 
    865     public static ShadowScanResult shadowOf(ScanResult instance) {
    866         return (ShadowScanResult) shadowOf_(instance);
    867     }
    868 
    869     public static ShadowScrollView shadowOf(ScrollView instance) {
    870         return (ShadowScrollView) shadowOf_(instance);
    871     }
    872 
    873     public static ShadowSeekBar shadowOf(SeekBar instance) {
    874         return (ShadowSeekBar) shadowOf_(instance);
    875     }
    876 
    877     public static ShadowSensorManager shadowOf(SensorManager instance) {
    878         return (ShadowSensorManager) shadowOf_(instance);
    879     }
    880 
    881     public static ShadowService shadowOf(Service instance) {
    882         return (ShadowService) shadowOf_(instance);
    883     }
    884 
    885     public static ShadowShapeDrawable shadowOf(ShapeDrawable instance) {
    886         return (ShadowShapeDrawable) shadowOf_(instance);
    887     }
    888 
    889     public static ShadowSignature shadowOf(Signature instance) {
    890         return (ShadowSignature) shadowOf_(instance);
    891     }
    892 
    893     public static ShadowSimpleCursorAdapter shadowOf(SimpleCursorAdapter instance) {
    894         return (ShadowSimpleCursorAdapter) shadowOf_(instance);
    895     }
    896 
    897     public static ShadowSmsManager shadowOf(SmsManager instance) {
    898         return (ShadowSmsManager) shadowOf_(instance);
    899     }
    900 
    901     public static <E> ShadowSparseArray<E> shadowOf(SparseArray<E> other) {
    902         //noinspection unchecked
    903         return (ShadowSparseArray<E>) Robolectric.shadowOf_(other);
    904     }
    905 
    906     public static ShadowSparseBooleanArray shadowOf(SparseBooleanArray other) {
    907         return (ShadowSparseBooleanArray) Robolectric.shadowOf_(other);
    908     }
    909 
    910     public static ShadowSparseIntArray shadowOf(SparseIntArray other){
    911     	return (ShadowSparseIntArray) Robolectric.shadowOf_( other );
    912     }
    913 
    914     public static ShadowSQLiteCursor shadowOf(SQLiteCursor other) {
    915         return (ShadowSQLiteCursor) Robolectric.shadowOf_(other);
    916     }
    917 
    918     public static ShadowSQLiteDatabase shadowOf(SQLiteDatabase other) {
    919         return (ShadowSQLiteDatabase) Robolectric.shadowOf_(other);
    920     }
    921 
    922     public static ShadowSQLiteOpenHelper shadowOf(SQLiteOpenHelper other) {
    923         return (ShadowSQLiteOpenHelper) Robolectric.shadowOf_(other);
    924     }
    925 
    926     public static ShadowSQLiteProgram shadowOf(SQLiteProgram other) {
    927         return (ShadowSQLiteProgram) Robolectric.shadowOf_(other);
    928     }
    929 
    930     public static ShadowSQLiteQueryBuilder shadowOf(SQLiteQueryBuilder other) {
    931         return (ShadowSQLiteQueryBuilder) Robolectric.shadowOf_(other);
    932     }
    933 
    934     public static ShadowSQLiteStatement shadowOf(SQLiteStatement other) {
    935         return (ShadowSQLiteStatement) Robolectric.shadowOf_(other);
    936     }
    937 
    938     public static ShadowSslErrorHandler shadowOf(SslErrorHandler instance) {
    939         return (ShadowSslErrorHandler) shadowOf_(instance);
    940     }
    941 
    942     public static ShadowStateListDrawable shadowOf(StateListDrawable instance) {
    943         return (ShadowStateListDrawable) shadowOf_(instance);
    944     }
    945 
    946     public static ShadowTabHost shadowOf(TabHost instance) {
    947         return (ShadowTabHost) shadowOf_(instance);
    948     }
    949 
    950     public static ShadowTabSpec shadowOf(TabHost.TabSpec instance) {
    951         return (ShadowTabSpec) shadowOf_(instance);
    952     }
    953 
    954     public static ShadowTelephonyManager shadowOf(TelephonyManager instance) {
    955         return (ShadowTelephonyManager) shadowOf_(instance);
    956     }
    957 
    958     public static ShadowTextPaint shadowOf(TextPaint instance) {
    959         return (ShadowTextPaint) shadowOf_(instance);
    960     }
    961 
    962     public static ShadowTextView shadowOf(TextView instance) {
    963         return (ShadowTextView) shadowOf_(instance);
    964     }
    965 
    966     public static ShadowToast shadowOf(Toast instance) {
    967         return (ShadowToast) shadowOf_(instance);
    968     }
    969 
    970     public static ShadowTranslateAnimation shadowOf(TranslateAnimation instance) {
    971         return (ShadowTranslateAnimation) shadowOf_(instance);
    972     }
    973 
    974     public static ShadowUriMatcher shadowOf(UriMatcher instance) {
    975         return (ShadowUriMatcher) shadowOf_(instance);
    976     }
    977 
    978     public static ShadowView shadowOf(View instance) {
    979         return (ShadowView) shadowOf_(instance);
    980     }
    981 
    982     public static ShadowViewAnimator shadowOf(ViewAnimator instance) {
    983         return (ShadowViewAnimator) shadowOf_(instance);
    984     }
    985 
    986     public static ShadowViewConfiguration shadowOf(ViewConfiguration instance) {
    987         return (ShadowViewConfiguration) shadowOf_(instance);
    988     }
    989 
    990     public static ShadowViewFlipper shadowOf(ViewFlipper instance) {
    991         return (ShadowViewFlipper) shadowOf_(instance);
    992     }
    993 
    994     public static ShadowViewPager shadowOf(ViewPager instance) {
    995         return (ShadowViewPager) shadowOf_(instance);
    996     }
    997 
    998     public static ShadowViewTreeObserver shadowOf(ViewTreeObserver instance) {
    999         return (ShadowViewTreeObserver) shadowOf_(instance);
   1000     }
   1001 
   1002     public static ShadowViewGroup shadowOf(ViewGroup instance) {
   1003         return (ShadowViewGroup) shadowOf_(instance);
   1004     }
   1005 
   1006     public static ShadowVibrator shadowOf(Vibrator instance) {
   1007         return (ShadowVibrator) shadowOf_(instance);
   1008     }
   1009 
   1010     public static ShadowVideoView shadowOf(VideoView instance) {
   1011         return (ShadowVideoView) shadowOf_(instance);
   1012     }
   1013 
   1014     public static ShadowWebView shadowOf(WebView instance) {
   1015         return (ShadowWebView) shadowOf_(instance);
   1016     }
   1017 
   1018     public static ShadowWifiConfiguration shadowOf(WifiConfiguration instance) {
   1019         return (ShadowWifiConfiguration) shadowOf_(instance);
   1020     }
   1021 
   1022     public static ShadowWifiInfo shadowOf(WifiInfo instance) {
   1023         return (ShadowWifiInfo) shadowOf_(instance);
   1024     }
   1025 
   1026     public static ShadowWifiManager shadowOf(WifiManager instance) {
   1027         return (ShadowWifiManager) shadowOf_(instance);
   1028     }
   1029 
   1030     public static ShadowZoomButtonsController shadowOf(ZoomButtonsController instance) {
   1031         return (ShadowZoomButtonsController) shadowOf_(instance);
   1032     }
   1033 
   1034     public static ShadowTheme shadowOf(Theme instance) {
   1035         return (ShadowTheme) shadowOf_(instance);
   1036     }
   1037 
   1038     @SuppressWarnings({"unchecked"})
   1039     public static <P, R> P shadowOf_(R instance) {
   1040         return (P) ShadowWrangler.getInstance().shadowOf(instance);
   1041     }
   1042 
   1043     /**
   1044      * Runs any background tasks previously queued by {@link android.os.AsyncTask#execute(Object[])}.
   1045      * <p/>
   1046      * <p/>
   1047      * Note: calling this method does not pause or un-pause the scheduler.
   1048      */
   1049     public static void runBackgroundTasks() {
   1050         getBackgroundScheduler().advanceBy(0);
   1051     }
   1052 
   1053     /**
   1054      * Runs any immediately runnable tasks previously queued on the UI thread,
   1055      * e.g. by {@link Activity#runOnUiThread(Runnable)} or {@link android.os.AsyncTask#onPostExecute(Object)}.
   1056      * <p/>
   1057      * <p/>
   1058      * Note: calling this method does not pause or un-pause the scheduler.
   1059      */
   1060     public static void runUiThreadTasks() {
   1061         getUiThreadScheduler().advanceBy(0);
   1062     }
   1063 
   1064     public static void runUiThreadTasksIncludingDelayedTasks() {
   1065         getUiThreadScheduler().advanceToLastPostedRunnable();
   1066     }
   1067 
   1068     /**
   1069      * Sets up an HTTP response to be returned by calls to Apache's {@code HttpClient} implementers.
   1070      *
   1071      * @param statusCode   the status code of the response
   1072      * @param responseBody the body of the response
   1073      * @param headers      optional headers for the request
   1074      */
   1075     public static void addPendingHttpResponse(int statusCode, String responseBody, Header... headers) {
   1076         getFakeHttpLayer().addPendingHttpResponse(statusCode, responseBody, headers);
   1077     }
   1078 
   1079     /**
   1080      * Sets up an HTTP response to be returned by calls to Apache's {@code HttpClient} implementers.
   1081      *
   1082      * @param statusCode   the status code of the response
   1083      * @param responseBody the body of the response
   1084      * @param contentType  the contentType of the response
   1085      * @deprecated use {@link #addPendingHttpResponse(int, String, Header...)} instead
   1086      */
   1087     @Deprecated
   1088     public static void addPendingHttpResponseWithContentType(int statusCode, String responseBody, Header contentType) {
   1089         getFakeHttpLayer().addPendingHttpResponse(statusCode, responseBody, contentType);
   1090     }
   1091 
   1092     /**
   1093      * Sets up an HTTP response to be returned by calls to Apache's {@code HttpClient} implementers.
   1094      *
   1095      * @param httpResponse the response
   1096      */
   1097     public static void addPendingHttpResponse(HttpResponse httpResponse) {
   1098         getFakeHttpLayer().addPendingHttpResponse(httpResponse);
   1099     }
   1100 
   1101     /**
   1102      * Sets up an HTTP response to be returned by calls to Apache's {@code HttpClient} implementers.
   1103      *
   1104      * @param httpResponseGenerator an HttpResponseGenerator that will provide responses
   1105      */
   1106     public static void addPendingHttpResponse(HttpResponseGenerator httpResponseGenerator) {
   1107         getFakeHttpLayer().addPendingHttpResponse(httpResponseGenerator);
   1108     }
   1109 
   1110     /**
   1111      * Accessor to obtain HTTP requests made during the current test in the order in which they were made.
   1112      *
   1113      * @param index index of the request to retrieve.
   1114      * @return the requested request.
   1115      */
   1116     public static HttpRequest getSentHttpRequest(int index) {
   1117         return ShadowDefaultRequestDirector.getSentHttpRequest(index);
   1118     }
   1119 
   1120     public static HttpRequest getLatestSentHttpRequest() {
   1121         return ShadowDefaultRequestDirector.getLatestSentHttpRequest();
   1122     }
   1123 
   1124     /**
   1125      * Accessor to find out if HTTP requests were made during the current test.
   1126      *
   1127      * @return whether a request was made.
   1128      */
   1129     public static boolean httpRequestWasMade() {
   1130         return getShadowApplication().getFakeHttpLayer().hasRequestInfos();
   1131     }
   1132 
   1133     public static boolean httpRequestWasMade(String uri) {
   1134         return getShadowApplication().getFakeHttpLayer().hasRequestMatchingRule(new FakeHttpLayer.UriRequestMatcher(uri));
   1135     }
   1136 
   1137     /**
   1138      * Accessor to obtain metadata for an HTTP request made during the current test in the order in which they were made.
   1139      *
   1140      * @param index index of the request to retrieve.
   1141      * @return the requested request metadata.
   1142      */
   1143     public static HttpRequestInfo getSentHttpRequestInfo(int index) {
   1144         return ShadowDefaultRequestDirector.getSentHttpRequestInfo(index);
   1145     }
   1146 
   1147     /**
   1148      * Adds an HTTP response rule. The response will be returned when the rule is matched.
   1149      *
   1150      * @param method   method to match.
   1151      * @param uri      uri to match.
   1152      * @param response response to return when a match is found.
   1153      */
   1154     public static void addHttpResponseRule(String method, String uri, HttpResponse response) {
   1155         getFakeHttpLayer().addHttpResponseRule(method, uri, response);
   1156     }
   1157 
   1158     /**
   1159      * Adds an HTTP response rule with a default method of GET. The response will be returned when the rule is matched.
   1160      *
   1161      * @param uri      uri to match.
   1162      * @param response response to return when a match is found.
   1163      */
   1164     public static void addHttpResponseRule(String uri, HttpResponse response) {
   1165         getFakeHttpLayer().addHttpResponseRule(uri, response);
   1166     }
   1167 
   1168     /**
   1169      * Adds an HTTP response rule. The response will be returned when the rule is matched.
   1170      *
   1171      * @param uri      uri to match.
   1172      * @param response response to return when a match is found.
   1173      */
   1174     public static void addHttpResponseRule(String uri, String response) {
   1175         getFakeHttpLayer().addHttpResponseRule(uri, response);
   1176     }
   1177 
   1178     /**
   1179      * Adds an HTTP response rule. The response will be returned when the rule is matched.
   1180      *
   1181      * @param requestMatcher custom {@code RequestMatcher}.
   1182      * @param response       response to return when a match is found.
   1183      */
   1184     public static void addHttpResponseRule(RequestMatcher requestMatcher, HttpResponse response) {
   1185         getFakeHttpLayer().addHttpResponseRule(requestMatcher, response);
   1186     }
   1187 
   1188     /**
   1189      * Adds an HTTP response rule. For each time the rule is matched, responses will be shifted
   1190      * off the list and returned. When all responses have been given and the rule is matched again,
   1191      * an exception will be thrown.
   1192      *
   1193      * @param requestMatcher custom {@code RequestMatcher}.
   1194      * @param responses      responses to return in order when a match is found.
   1195      */
   1196     public static void addHttpResponseRule(RequestMatcher requestMatcher, List<? extends HttpResponse> responses) {
   1197         getFakeHttpLayer().addHttpResponseRule(requestMatcher, responses);
   1198     }
   1199 
   1200     public static FakeHttpLayer getFakeHttpLayer() {
   1201         return getShadowApplication().getFakeHttpLayer();
   1202     }
   1203 
   1204     public static void setDefaultHttpResponse(int statusCode, String responseBody) {
   1205         getFakeHttpLayer().setDefaultHttpResponse(statusCode, responseBody);
   1206     }
   1207 
   1208     public static void setDefaultHttpResponse(HttpResponse defaultHttpResponse) {
   1209         getFakeHttpLayer().setDefaultHttpResponse(defaultHttpResponse);
   1210     }
   1211 
   1212     public static void clearHttpResponseRules() {
   1213         getFakeHttpLayer().clearHttpResponseRules();
   1214     }
   1215 
   1216     public static void clearPendingHttpResponses() {
   1217         getFakeHttpLayer().clearPendingHttpResponses();
   1218     }
   1219 
   1220     public static void pauseLooper(Looper looper) {
   1221         ShadowLooper.pauseLooper(looper);
   1222     }
   1223 
   1224     public static void unPauseLooper(Looper looper) {
   1225         ShadowLooper.unPauseLooper(looper);
   1226     }
   1227 
   1228     public static void pauseMainLooper() {
   1229         ShadowLooper.pauseMainLooper();
   1230     }
   1231 
   1232     public static void unPauseMainLooper() {
   1233         ShadowLooper.unPauseMainLooper();
   1234     }
   1235 
   1236     public static void idleMainLooper(long interval) {
   1237         ShadowLooper.idleMainLooper(interval);
   1238     }
   1239 
   1240     public static Scheduler getUiThreadScheduler() {
   1241         return shadowOf(Looper.getMainLooper()).getScheduler();
   1242     }
   1243 
   1244     public static Scheduler getBackgroundScheduler() {
   1245         return getShadowApplication().getBackgroundScheduler();
   1246     }
   1247 
   1248     public static ShadowApplication getShadowApplication() {
   1249         return shadowOf(Robolectric.application);
   1250     }
   1251 
   1252     public static void setDisplayMetricsDensity(float densityMultiplier) {
   1253         shadowOf(getShadowApplication().getResources()).setDensity(densityMultiplier);
   1254     }
   1255 
   1256     public static void setDefaultDisplay(Display display) {
   1257         shadowOf(getShadowApplication().getResources()).setDisplay(display);
   1258     }
   1259 
   1260     /**
   1261      * Calls {@code performClick()} on a {@code View} after ensuring that it and its ancestors are visible and that it
   1262      * is enabled.
   1263      *
   1264      * @param view the view to click on
   1265      * @return true if {@code View.OnClickListener}s were found and fired, false otherwise.
   1266      * @throws RuntimeException if the preconditions are not met.
   1267      */
   1268     public static boolean clickOn(View view) {
   1269         return shadowOf(view).checkedPerformClick();
   1270     }
   1271 
   1272     public static String visualize(View view) {
   1273         Canvas canvas = new Canvas();
   1274         view.draw(canvas);
   1275         return shadowOf(canvas).getDescription();
   1276     }
   1277 
   1278     public static String visualize(Canvas canvas) {
   1279         return shadowOf(canvas).getDescription();
   1280     }
   1281 
   1282     public static String visualize(Bitmap bitmap) {
   1283         return shadowOf(bitmap).getDescription();
   1284     }
   1285 
   1286     /**
   1287      * Reflection helper methods.
   1288      */
   1289     public static class Reflection {
   1290         public static <T> T newInstanceOf(Class<T> clazz) {
   1291             return Robolectric.newInstanceOf(clazz);
   1292         }
   1293 
   1294         public static Object newInstanceOf(String className) {
   1295             return Robolectric.newInstanceOf(className);
   1296         }
   1297 
   1298         public static void setFinalStaticField(Class classWhichContainsField, String fieldName, Object newValue) {
   1299             try {
   1300                 Field field = classWhichContainsField.getDeclaredField(fieldName);
   1301                 field.setAccessible(true);
   1302 
   1303                 Field modifiersField = Field.class.getDeclaredField("modifiers");
   1304                 modifiersField.setAccessible(true);
   1305                 modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
   1306 
   1307                 field.set(null, newValue);
   1308             } catch (NoSuchFieldException e) {
   1309                 throw new RuntimeException(e);
   1310             } catch (IllegalAccessException e) {
   1311                 throw new RuntimeException(e);
   1312             }
   1313         }
   1314     }
   1315 
   1316 }
   1317