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