133873d2b41a5cd2597b20a4e88eb8942944c0f23Tyler Schultzpackage com.xtremelabs.robolectric.shadows;
20add4ea006647573fc11fac463c87842f2dcc403Christian Williams
30add4ea006647573fc11fac463c87842f2dcc403Christian Williamsimport android.app.Activity;
485af7906879a68c99b1878dac22605fa32454f3fRich Humphreyimport android.app.Dialog;
50add4ea006647573fc11fac463c87842f2dcc403Christian Williamsimport android.appwidget.AppWidgetProvider;
6be7c253877b6fb0dbf3e9556d8134b79db98befdMichael Portuesiimport android.content.*;
7c6526af59ebcc818c95680ac6f8efe83a0b65644adriancowhamimport android.content.pm.ActivityInfo;
8be7c253877b6fb0dbf3e9556d8134b79db98befdMichael Portuesiimport android.database.CharArrayBuffer;
9be7c253877b6fb0dbf3e9556d8134b79db98befdMichael Portuesiimport android.database.ContentObserver;
10be7c253877b6fb0dbf3e9556d8134b79db98befdMichael Portuesiimport android.database.Cursor;
11be7c253877b6fb0dbf3e9556d8134b79db98befdMichael Portuesiimport android.database.DataSetObserver;
12be7c253877b6fb0dbf3e9556d8134b79db98befdMichael Portuesiimport android.database.sqlite.SQLiteCursor;
13b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williamsimport android.net.Uri;
1485af7906879a68c99b1878dac22605fa32454f3fRich Humphreyimport android.os.Bundle;
1505d5fa490c39eae46684f666a66acb8edf42661cPhil Goodwin & Ryan Richardimport android.view.KeyEvent;
1685af7906879a68c99b1878dac22605fa32454f3fRich Humphreyimport android.view.View;
17297cc102ff285524a4109025ecd2c9c6ef051ce5Jan Berkelimport android.widget.FrameLayout;
18ce8adbf01d520e692a7eb6b72874c0182966127bPhil Goodwin & Tyler Schultzimport com.xtremelabs.robolectric.ApplicationResolver;
19c23ee9ca694000bd03b88d958bb84000e04f51e4Christian Williamsimport com.xtremelabs.robolectric.R;
200add4ea006647573fc11fac463c87842f2dcc403Christian Williamsimport com.xtremelabs.robolectric.Robolectric;
2107257335f88da163910cc0bd039e6163edc38580Gregg Van Hove & Phil Goodwinimport com.xtremelabs.robolectric.WithTestDefaultsRunner;
22a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultzimport com.xtremelabs.robolectric.util.TestRunnable;
23b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williamsimport com.xtremelabs.robolectric.util.Transcript;
2485af7906879a68c99b1878dac22605fa32454f3fRich Humphreyimport org.hamcrest.CoreMatchers;
2585af7906879a68c99b1878dac22605fa32454f3fRich Humphreyimport org.junit.Test;
2685af7906879a68c99b1878dac22605fa32454f3fRich Humphreyimport org.junit.runner.RunWith;
2785af7906879a68c99b1878dac22605fa32454f3fRich Humphrey
2885af7906879a68c99b1878dac22605fa32454f3fRich Humphreyimport java.util.concurrent.atomic.AtomicBoolean;
2985af7906879a68c99b1878dac22605fa32454f3fRich Humphrey
3085af7906879a68c99b1878dac22605fa32454f3fRich Humphreyimport static com.xtremelabs.robolectric.Robolectric.shadowOf;
31297cc102ff285524a4109025ecd2c9c6ef051ce5Jan Berkelimport static com.xtremelabs.robolectric.util.TestUtil.assertInstanceOf;
3285af7906879a68c99b1878dac22605fa32454f3fRich Humphreyimport static com.xtremelabs.robolectric.util.TestUtil.newConfig;
334e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwinimport static org.hamcrest.CoreMatchers.*;
3485af7906879a68c99b1878dac22605fa32454f3fRich Humphreyimport static org.hamcrest.core.StringStartsWith.startsWith;
3585af7906879a68c99b1878dac22605fa32454f3fRich Humphreyimport static org.junit.Assert.*;
3685af7906879a68c99b1878dac22605fa32454f3fRich Humphrey
3707257335f88da163910cc0bd039e6163edc38580Gregg Van Hove & Phil Goodwin@RunWith(WithTestDefaultsRunner.class)
380add4ea006647573fc11fac463c87842f2dcc403Christian Williamspublic class ActivityTest {
390add4ea006647573fc11fac463c87842f2dcc403Christian Williams    @Test(expected = IllegalStateException.class)
400add4ea006647573fc11fac463c87842f2dcc403Christian Williams    public void shouldComplainIfActivityIsDestroyedWithRegisteredBroadcastReceivers() throws Exception {
41256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante        DialogLifeCycleActivity activity = new DialogLifeCycleActivity();
420add4ea006647573fc11fac463c87842f2dcc403Christian Williams        activity.registerReceiver(new AppWidgetProvider(), new IntentFilter());
430add4ea006647573fc11fac463c87842f2dcc403Christian Williams        activity.onDestroy();
440add4ea006647573fc11fac463c87842f2dcc403Christian Williams    }
450add4ea006647573fc11fac463c87842f2dcc403Christian Williams
460add4ea006647573fc11fac463c87842f2dcc403Christian Williams    @Test
470add4ea006647573fc11fac463c87842f2dcc403Christian Williams    public void shouldNotComplainIfActivityIsDestroyedWhileAnotherActivityHasRegisteredBroadcastReceivers() throws Exception {
48256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante        DialogLifeCycleActivity activity = new DialogLifeCycleActivity();
490add4ea006647573fc11fac463c87842f2dcc403Christian Williams
50256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante        DialogLifeCycleActivity activity2 = new DialogLifeCycleActivity();
510add4ea006647573fc11fac463c87842f2dcc403Christian Williams        activity2.registerReceiver(new AppWidgetProvider(), new IntentFilter());
520add4ea006647573fc11fac463c87842f2dcc403Christian Williams
530add4ea006647573fc11fac463c87842f2dcc403Christian Williams        activity.onDestroy(); // should not throw exception
540add4ea006647573fc11fac463c87842f2dcc403Christian Williams    }
550add4ea006647573fc11fac463c87842f2dcc403Christian Williams
56ce8adbf01d520e692a7eb6b72874c0182966127bPhil Goodwin & Tyler Schultz    @Test
5733cb58b49af57097ec8450f1e2e8daed530fa823Stefano Dacchille    public void shouldNotRegisterNullBroadcastReceiver() {
5833cb58b49af57097ec8450f1e2e8daed530fa823Stefano Dacchille        DialogLifeCycleActivity activity = new DialogLifeCycleActivity();
5933cb58b49af57097ec8450f1e2e8daed530fa823Stefano Dacchille        activity.registerReceiver(null, new IntentFilter());
6033cb58b49af57097ec8450f1e2e8daed530fa823Stefano Dacchille
6133cb58b49af57097ec8450f1e2e8daed530fa823Stefano Dacchille        activity.onDestroy();
6233cb58b49af57097ec8450f1e2e8daed530fa823Stefano Dacchille    }
6333cb58b49af57097ec8450f1e2e8daed530fa823Stefano Dacchille
6433cb58b49af57097ec8450f1e2e8daed530fa823Stefano Dacchille    @Test
65b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams    public void startActivityForResultAndReceiveResult_shouldSendResponsesBackToActivity() throws Exception {
66b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams        final Transcript transcript = new Transcript();
67b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams        Activity activity = new Activity() {
684e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin            @Override
694e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin            protected void onActivityResult(int requestCode, int resultCode, Intent data) {
70b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams                transcript.add("onActivityResult called with requestCode " + requestCode + ", resultCode " + resultCode + ", intent data " + data.getData());
71b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams            }
72b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams        };
73b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams        activity.startActivityForResult(new Intent().setType("audio/*"), 123);
74b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams        activity.startActivityForResult(new Intent().setType("image/*"), 456);
75b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams
76b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams        shadowOf(activity).receiveResult(new Intent().setType("image/*"), Activity.RESULT_OK,
774e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin                new Intent().setData(Uri.parse("content:foo")));
78b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams        transcript.assertEventsSoFar("onActivityResult called with requestCode 456, resultCode -1, intent data content:foo");
79b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams    }
80b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams
81b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams    @Test
82b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams    public void startActivityForResultAndReceiveResult_whenNoIntentMatches_shouldThrowException() throws Exception {
83b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams        Activity activity = new Activity() {
844e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin            @Override
854e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin            protected void onActivityResult(int requestCode, int resultCode, Intent data) {
86b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams                throw new IllegalStateException("should not be called");
87b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams            }
88b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams        };
89b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams        activity.startActivityForResult(new Intent().setType("audio/*"), 123);
90b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams        activity.startActivityForResult(new Intent().setType("image/*"), 456);
91b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams
92b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams        Intent requestIntent = new Intent().setType("video/*");
93b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams        try {
94b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams            shadowOf(activity).receiveResult(requestIntent, Activity.RESULT_OK,
95b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams                    new Intent().setData(Uri.parse("content:foo")));
96b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams            fail();
97b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams        } catch (Exception e) {
98b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams            assertThat(e.getMessage(), startsWith("No intent matches " + requestIntent));
99b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams        }
100b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams    }
101b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams
102ea74b95565e92521affdc7cc1a773e10fd235a96Josh Lauer & Christian Williams    @Test
103cf37f66c9bcbf0b25b879fbb78c9442c9101c7acRich Humphrey    public void shouldSupportStartActivityForResult() throws Exception {
104256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante        DialogLifeCycleActivity activity = new DialogLifeCycleActivity();
105cf37f66c9bcbf0b25b879fbb78c9442c9101c7acRich Humphrey        ShadowActivity shadowActivity = Robolectric.shadowOf(activity);
106256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante        Intent intent = new Intent().setClass(activity, DialogLifeCycleActivity.class);
107cf37f66c9bcbf0b25b879fbb78c9442c9101c7acRich Humphrey        assertThat(shadowActivity.getNextStartedActivity(), nullValue());
10840c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams
109cf37f66c9bcbf0b25b879fbb78c9442c9101c7acRich Humphrey        activity.startActivityForResult(intent, 142);
11040c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams
111cf37f66c9bcbf0b25b879fbb78c9442c9101c7acRich Humphrey        Intent startedIntent = shadowActivity.getNextStartedActivity();
112cf37f66c9bcbf0b25b879fbb78c9442c9101c7acRich Humphrey        assertThat(startedIntent, notNullValue());
113cf37f66c9bcbf0b25b879fbb78c9442c9101c7acRich Humphrey        assertThat(startedIntent, sameInstance(intent));
114cf37f66c9bcbf0b25b879fbb78c9442c9101c7acRich Humphrey    }
11540c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams
116cf37f66c9bcbf0b25b879fbb78c9442c9101c7acRich Humphrey    @Test
117cf37f66c9bcbf0b25b879fbb78c9442c9101c7acRich Humphrey    public void shouldSupportGetStartedActitivitesForResult() throws Exception {
118256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante        DialogLifeCycleActivity activity = new DialogLifeCycleActivity();
119cf37f66c9bcbf0b25b879fbb78c9442c9101c7acRich Humphrey        ShadowActivity shadowActivity = Robolectric.shadowOf(activity);
120256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante        Intent intent = new Intent().setClass(activity, DialogLifeCycleActivity.class);
12140c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams
122cf37f66c9bcbf0b25b879fbb78c9442c9101c7acRich Humphrey        activity.startActivityForResult(intent, 142);
12340c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams
124cf37f66c9bcbf0b25b879fbb78c9442c9101c7acRich Humphrey        ShadowActivity.IntentForResult intentForResult = shadowActivity.getNextStartedActivityForResult();
125cf37f66c9bcbf0b25b879fbb78c9442c9101c7acRich Humphrey        assertThat(intentForResult, notNullValue());
12640c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams        assertThat(shadowActivity.getNextStartedActivityForResult(), nullValue());
12740c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams        assertThat(intentForResult.intent, notNullValue());
12840c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams        assertThat(intentForResult.intent, sameInstance(intent));
12940c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams        assertThat(intentForResult.requestCode, equalTo(142));
130cf37f66c9bcbf0b25b879fbb78c9442c9101c7acRich Humphrey    }
13140c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams
132cf37f66c9bcbf0b25b879fbb78c9442c9101c7acRich Humphrey    @Test
133cf37f66c9bcbf0b25b879fbb78c9442c9101c7acRich Humphrey    public void shouldSupportPeekStartedActitivitesForResult() throws Exception {
134256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante        DialogLifeCycleActivity activity = new DialogLifeCycleActivity();
135cf37f66c9bcbf0b25b879fbb78c9442c9101c7acRich Humphrey        ShadowActivity shadowActivity = Robolectric.shadowOf(activity);
136256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante        Intent intent = new Intent().setClass(activity, DialogLifeCycleActivity.class);
137cf37f66c9bcbf0b25b879fbb78c9442c9101c7acRich Humphrey
138cf37f66c9bcbf0b25b879fbb78c9442c9101c7acRich Humphrey        activity.startActivityForResult(intent, 142);
13940c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams
140cf37f66c9bcbf0b25b879fbb78c9442c9101c7acRich Humphrey        ShadowActivity.IntentForResult intentForResult = shadowActivity.peekNextStartedActivityForResult();
141cf37f66c9bcbf0b25b879fbb78c9442c9101c7acRich Humphrey        assertThat(intentForResult, notNullValue());
14240c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams        assertThat(shadowActivity.peekNextStartedActivityForResult(), sameInstance(intentForResult));
14340c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams        assertThat(intentForResult.intent, notNullValue());
14440c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams        assertThat(intentForResult.intent, sameInstance(intent));
14540c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams        assertThat(intentForResult.requestCode, equalTo(142));
146cf37f66c9bcbf0b25b879fbb78c9442c9101c7acRich Humphrey    }
14740c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams
148cf37f66c9bcbf0b25b879fbb78c9442c9101c7acRich Humphrey    @Test
149c23ee9ca694000bd03b88d958bb84000e04f51e4Christian Williams    public void onContentChangedShouldBeCalledAfterContentViewIsSet() throws RuntimeException {
150c23ee9ca694000bd03b88d958bb84000e04f51e4Christian Williams        final Transcript transcript = new Transcript();
151c23ee9ca694000bd03b88d958bb84000e04f51e4Christian Williams        Activity customActivity = new Activity() {
152c23ee9ca694000bd03b88d958bb84000e04f51e4Christian Williams            @Override
153c23ee9ca694000bd03b88d958bb84000e04f51e4Christian Williams            public void onContentChanged() {
154c23ee9ca694000bd03b88d958bb84000e04f51e4Christian Williams                transcript.add("onContentChanged was called; title is \"" + shadowOf(findViewById(R.id.title)).innerText() + "\"");
155c23ee9ca694000bd03b88d958bb84000e04f51e4Christian Williams            }
156c23ee9ca694000bd03b88d958bb84000e04f51e4Christian Williams        };
157c23ee9ca694000bd03b88d958bb84000e04f51e4Christian Williams        customActivity.setContentView(R.layout.main);
158c23ee9ca694000bd03b88d958bb84000e04f51e4Christian Williams        transcript.assertEventsSoFar("onContentChanged was called; title is \"Main Layout\"");
159c23ee9ca694000bd03b88d958bb84000e04f51e4Christian Williams    }
160c23ee9ca694000bd03b88d958bb84000e04f51e4Christian Williams
161c23ee9ca694000bd03b88d958bb84000e04f51e4Christian Williams    @Test
162ce8adbf01d520e692a7eb6b72874c0182966127bPhil Goodwin & Tyler Schultz    public void shouldRetrievePackageNameFromTheManifest() throws Exception {
163147cdda64f4a372a27599ae1f902bd7be90bee5cPhil Goodwin        Robolectric.application = new ApplicationResolver(newConfig("TestAndroidManifestWithPackageName.xml")).resolveApplication();
16485af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        assertThat("com.wacka.wa", equalTo(new Activity().getPackageName()));
165ce8adbf01d520e692a7eb6b72874c0182966127bPhil Goodwin & Tyler Schultz    }
166ce8adbf01d520e692a7eb6b72874c0182966127bPhil Goodwin & Tyler Schultz
167a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz    @Test
168a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz    public void shouldRunUiTasksImmediatelyByDefault() throws Exception {
169a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz        TestRunnable runnable = new TestRunnable();
170256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante        DialogLifeCycleActivity activity = new DialogLifeCycleActivity();
171a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz        activity.runOnUiThread(runnable);
172a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz        assertTrue(runnable.wasRun);
173a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz    }
174a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz
175a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz    @Test
176a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz    public void shouldQueueUiTasksWhenUiThreadIsPaused() throws Exception {
177a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz        Robolectric.pauseMainLooper();
178a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz
179256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante        DialogLifeCycleActivity activity = new DialogLifeCycleActivity();
180a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz        TestRunnable runnable = new TestRunnable();
181a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz        activity.runOnUiThread(runnable);
182a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz        assertFalse(runnable.wasRun);
183a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz
184a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz        Robolectric.unPauseMainLooper();
185a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz        assertTrue(runnable.wasRun);
186a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz    }
18785af7906879a68c99b1878dac22605fa32454f3fRich Humphrey
18888a7b3c27c736843e69e6ec12c1d7c7397c14d1cRich Humphrey    @Test
18985af7906879a68c99b1878dac22605fa32454f3fRich Humphrey    public void showDialog_shouldCreatePrepareAndShowDialog() {
190256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante        final DialogLifeCycleActivity activity = new DialogLifeCycleActivity();
19185af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        final AtomicBoolean dialogWasShown = new AtomicBoolean(false);
19285af7906879a68c99b1878dac22605fa32454f3fRich Humphrey
19385af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        new Dialog(activity) {
1944e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin            {
1954e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin                activity.dialog = this;
1964e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin            }
19785af7906879a68c99b1878dac22605fa32454f3fRich Humphrey
19885af7906879a68c99b1878dac22605fa32454f3fRich Humphrey            @Override
19985af7906879a68c99b1878dac22605fa32454f3fRich Humphrey            public void show() {
20085af7906879a68c99b1878dac22605fa32454f3fRich Humphrey                dialogWasShown.set(true);
20185af7906879a68c99b1878dac22605fa32454f3fRich Humphrey            }
20285af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        };
20385af7906879a68c99b1878dac22605fa32454f3fRich Humphrey
204256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante        activity.showDialog(1);
20585af7906879a68c99b1878dac22605fa32454f3fRich Humphrey
20685af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        assertTrue(activity.createdDialog);
20785af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        assertTrue(activity.preparedDialog);
20885af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        assertTrue(dialogWasShown.get());
2094c5a8c640b626c2b53b0c168d8db6d2930e270fdPhil Goodwin & Rick Kawala    }
2104e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin
21105fe24178737f40b46d4033578ef1ce6b5dfa43bPhil Goodwin & Rick Kawala    @Test
21285af7906879a68c99b1878dac22605fa32454f3fRich Humphrey    public void showDialog_shouldCreatePrepareAndShowDialogWithBundle() {
213256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante        final DialogLifeCycleActivity activity = new DialogLifeCycleActivity();
21485af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        final AtomicBoolean dialogWasShown = new AtomicBoolean(false);
21585af7906879a68c99b1878dac22605fa32454f3fRich Humphrey
21685af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        new Dialog(activity) {
2174e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin            {
2184e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin                activity.dialog = this;
2194e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin            }
22085af7906879a68c99b1878dac22605fa32454f3fRich Humphrey
22185af7906879a68c99b1878dac22605fa32454f3fRich Humphrey            @Override
22285af7906879a68c99b1878dac22605fa32454f3fRich Humphrey            public void show() {
22385af7906879a68c99b1878dac22605fa32454f3fRich Humphrey                dialogWasShown.set(true);
22485af7906879a68c99b1878dac22605fa32454f3fRich Humphrey            }
22585af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        };
22685af7906879a68c99b1878dac22605fa32454f3fRich Humphrey
227256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante        activity.showDialog(1, new Bundle());
22885af7906879a68c99b1878dac22605fa32454f3fRich Humphrey
22985af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        assertTrue(activity.createdDialog);
23085af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        assertTrue(activity.preparedDialogWithBundle);
23185af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        assertTrue(dialogWasShown.get());
23285af7906879a68c99b1878dac22605fa32454f3fRich Humphrey    }
23385af7906879a68c99b1878dac22605fa32454f3fRich Humphrey
23485af7906879a68c99b1878dac22605fa32454f3fRich Humphrey    @Test
235256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante    public void showDialog_shouldReuseDialogs() {
236256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante        final DialogCreatingActivity activity = new DialogCreatingActivity();
237256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante
238256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante        activity.showDialog(1);
239256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante
2405117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard        Dialog firstDialog = ShadowDialog.getLatestDialog();
241256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante
242256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante        activity.showDialog(1);
243256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante
2445117035453920f3d4d0f3969bdab0305dcdb94baJoe Moore & Ryan Richard        final Dialog secondDialog = ShadowDialog.getLatestDialog();
245256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante
246256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante        assertSame("dialogs should be the same instance", firstDialog, secondDialog);
247256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante    }
248256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante
2492dd02a943021d7a8c0784854374c2fb3d1e5f1a6Matthias Kiefer    @Test
250943730659b697ae049fe203b2a51d75113c49cb5Chuck Greb    public void showDialog_shouldShowDialog() throws Exception {
251943730659b697ae049fe203b2a51d75113c49cb5Chuck Greb        final DialogCreatingActivity activity = new DialogCreatingActivity();
252943730659b697ae049fe203b2a51d75113c49cb5Chuck Greb        activity.showDialog(1);
253943730659b697ae049fe203b2a51d75113c49cb5Chuck Greb        Dialog dialog = ShadowDialog.getLatestDialog();
254943730659b697ae049fe203b2a51d75113c49cb5Chuck Greb        assertTrue(dialog.isShowing());
255943730659b697ae049fe203b2a51d75113c49cb5Chuck Greb    }
256943730659b697ae049fe203b2a51d75113c49cb5Chuck Greb
257943730659b697ae049fe203b2a51d75113c49cb5Chuck Greb    @Test
258943730659b697ae049fe203b2a51d75113c49cb5Chuck Greb    public void dismissDialog_shouldDismissPreviouslyShownDialog() throws Exception {
259943730659b697ae049fe203b2a51d75113c49cb5Chuck Greb        final DialogCreatingActivity activity = new DialogCreatingActivity();
260943730659b697ae049fe203b2a51d75113c49cb5Chuck Greb        activity.showDialog(1);
261943730659b697ae049fe203b2a51d75113c49cb5Chuck Greb        activity.dismissDialog(1);
262943730659b697ae049fe203b2a51d75113c49cb5Chuck Greb        Dialog dialog = ShadowDialog.getLatestDialog();
263943730659b697ae049fe203b2a51d75113c49cb5Chuck Greb        assertFalse(dialog.isShowing());
264943730659b697ae049fe203b2a51d75113c49cb5Chuck Greb    }
265943730659b697ae049fe203b2a51d75113c49cb5Chuck Greb
266943730659b697ae049fe203b2a51d75113c49cb5Chuck Greb    @Test(expected = IllegalArgumentException.class)
267943730659b697ae049fe203b2a51d75113c49cb5Chuck Greb    public void dismissDialog_shouldThrowExceptionIfDialogWasNotPreviouslyShown() throws Exception {
268943730659b697ae049fe203b2a51d75113c49cb5Chuck Greb        final DialogCreatingActivity activity = new DialogCreatingActivity();
269943730659b697ae049fe203b2a51d75113c49cb5Chuck Greb        activity.dismissDialog(1);
270943730659b697ae049fe203b2a51d75113c49cb5Chuck Greb    }
271943730659b697ae049fe203b2a51d75113c49cb5Chuck Greb
272943730659b697ae049fe203b2a51d75113c49cb5Chuck Greb    @Test
2732dd02a943021d7a8c0784854374c2fb3d1e5f1a6Matthias Kiefer    public void removeDialog_shouldCreateDialogAgain() {
2742dd02a943021d7a8c0784854374c2fb3d1e5f1a6Matthias Kiefer        final DialogCreatingActivity activity = new DialogCreatingActivity();
2754e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin
2762dd02a943021d7a8c0784854374c2fb3d1e5f1a6Matthias Kiefer        activity.showDialog(1);
2772dd02a943021d7a8c0784854374c2fb3d1e5f1a6Matthias Kiefer        Dialog firstDialog = ShadowDialog.getLatestDialog();
2784e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin
2792dd02a943021d7a8c0784854374c2fb3d1e5f1a6Matthias Kiefer        activity.removeDialog(1);
2802dd02a943021d7a8c0784854374c2fb3d1e5f1a6Matthias Kiefer        assertNull(Robolectric.shadowOf(activity).getDialogById(1));
2812dd02a943021d7a8c0784854374c2fb3d1e5f1a6Matthias Kiefer
2822dd02a943021d7a8c0784854374c2fb3d1e5f1a6Matthias Kiefer        activity.showDialog(1);
2832dd02a943021d7a8c0784854374c2fb3d1e5f1a6Matthias Kiefer        Dialog secondDialog = ShadowDialog.getLatestDialog();
2844e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin
2852dd02a943021d7a8c0784854374c2fb3d1e5f1a6Matthias Kiefer        assertNotSame("dialogs should not be the same instance", firstDialog, secondDialog);
286943730659b697ae049fe203b2a51d75113c49cb5Chuck Greb    }
287256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante
288256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante    @Test
28985af7906879a68c99b1878dac22605fa32454f3fRich Humphrey    public void shouldCallOnCreateDialogFromShowDialog() {
29085af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        ActivityWithOnCreateDialog activity = new ActivityWithOnCreateDialog();
29185af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        activity.showDialog(123);
29285af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        assertTrue(activity.onCreateDialogWasCalled);
29385af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        assertThat(ShadowDialog.getLatestDialog(), CoreMatchers.<Object>notNullValue());
29485af7906879a68c99b1878dac22605fa32454f3fRich Humphrey    }
29585af7906879a68c99b1878dac22605fa32454f3fRich Humphrey
29685af7906879a68c99b1878dac22605fa32454f3fRich Humphrey    @Test
29785af7906879a68c99b1878dac22605fa32454f3fRich Humphrey    public void shouldCallFinishInOnBackPressed() {
29885af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        Activity activity = new Activity();
29985af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        activity.onBackPressed();
30085af7906879a68c99b1878dac22605fa32454f3fRich Humphrey
30188a7b3c27c736843e69e6ec12c1d7c7397c14d1cRich Humphrey        ShadowActivity shadowActivity = shadowOf(activity);
30285af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        assertTrue(shadowActivity.isFinishing());
30385af7906879a68c99b1878dac22605fa32454f3fRich Humphrey    }
30485af7906879a68c99b1878dac22605fa32454f3fRich Humphrey
3054e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin    @Test
30685af7906879a68c99b1878dac22605fa32454f3fRich Humphrey    public void shouldSupportCurrentFocus() {
307256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante        DialogLifeCycleActivity activity = new DialogLifeCycleActivity();
30885af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        ShadowActivity shadow = shadowOf(activity);
30988a7b3c27c736843e69e6ec12c1d7c7397c14d1cRich Humphrey
31085af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        assertNull(shadow.getCurrentFocus());
31185af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        View view = new View(activity);
31285af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        shadow.setCurrentFocus(view);
31385af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        assertEquals(view, shadow.getCurrentFocus());
31488a7b3c27c736843e69e6ec12c1d7c7397c14d1cRich Humphrey    }
315a4f7d50f8e6f12d541421383544fe16c185e4bbcPhil Goodwin & Tyler Schultz
3164e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin    @Test
317c6526af59ebcc818c95680ac6f8efe83a0b65644adriancowham    public void shouldSetOrientation() {
3187f306c7c98e32f85115ce57780a6752477b8faadadriancowham        DialogLifeCycleActivity activity = new DialogLifeCycleActivity();
3194e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
3204e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin        assertThat(activity.getRequestedOrientation(), equalTo(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT));
321c6526af59ebcc818c95680ac6f8efe83a0b65644adriancowham    }
3224e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin
323f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker    @Test
324f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker    public void retrieveIdOfResource() {
325f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker        Activity activity = new Activity();
326f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker
327f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker        int id1 = R.string.hello;
328f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker        String string = activity.getString(id1);
329f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker        assertEquals("Hello", string);
330f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker
331f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker        int id = activity.getResources().getIdentifier("hello", "string", "com.xtremelabs.robolectric");
332f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker        assertTrue(id > 0);
3334e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin
334f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker        String hello = activity.getResources().getString(id);
335f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker        assertEquals("Hello", hello);
336f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker    }
337f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker
338f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker    @Test
33910afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias    public void getCurrentFocus_shouldBeNullWhenNoFocusRequested() {
34010afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias        Activity activity = new Activity();
34110afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias        activity.setContentView(R.layout.main);
34210afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias
34310afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias        View focusedView = shadowOf(activity).getCurrentFocus();
34410afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias        assertNull(focusedView);
34510afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias    }
34610afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias
34710afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias    @Test
34810afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias    public void getCurrentFocus_shouldReturnSubViewAfterFocusedRequest() {
34910afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias        Activity activity = new Activity();
35010afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias        activity.setContentView(R.layout.main);
35110afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias
35210afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias        View view = activity.findViewById(R.id.button);
35310afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias        view.requestFocus();
35410afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias
35510afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias        View focusedView = shadowOf(activity).getCurrentFocus();
35610afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias        assertEquals(R.id.button, focusedView.getId());
35710afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias    }
35810afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias
35910afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias    @Test
360f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker    public void retrieveIdOfNonExistingResource() {
361f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker        Activity activity = new Activity();
362f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker
363f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker        int id = activity.getResources().getIdentifier("just_alot_of_crap", "string", "com.xtremelabs.robolectric");
364f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker        assertTrue(id == 0);
365f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker    }
366f320a2d3b8075716daf2a80f5a8f7890086fb609Mark Bakker
36705d5fa490c39eae46684f666a66acb8edf42661cPhil Goodwin & Ryan Richard    @Test
368297cc102ff285524a4109025ecd2c9c6ef051ce5Jan Berkel    public void shouldSetContentViewWithFrameLayoutAsParent() throws Exception {
369297cc102ff285524a4109025ecd2c9c6ef051ce5Jan Berkel        Activity activity = new Activity();
370297cc102ff285524a4109025ecd2c9c6ef051ce5Jan Berkel        activity.setContentView(R.layout.toplevel_merge);
371297cc102ff285524a4109025ecd2c9c6ef051ce5Jan Berkel
372297cc102ff285524a4109025ecd2c9c6ef051ce5Jan Berkel        View contentView = shadowOf(activity).getContentView();
373297cc102ff285524a4109025ecd2c9c6ef051ce5Jan Berkel        assertInstanceOf(FrameLayout.class, contentView);
3744e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin        assertThat(((FrameLayout) contentView).getChildCount(), equalTo(2));
375297cc102ff285524a4109025ecd2c9c6ef051ce5Jan Berkel    }
3764e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin
377f14c3931ebac66beb7bf03f5d08fdd8895f02157Phil Goodwin & Ryan Richard    @Test
37805d5fa490c39eae46684f666a66acb8edf42661cPhil Goodwin & Ryan Richard    public void onKeyUp_recordsThatItWasCalled() throws Exception {
37905d5fa490c39eae46684f666a66acb8edf42661cPhil Goodwin & Ryan Richard        Activity activity = new Activity();
38005d5fa490c39eae46684f666a66acb8edf42661cPhil Goodwin & Ryan Richard        boolean consumed = activity.onKeyUp(KeyEvent.KEYCODE_0, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_0));
38105d5fa490c39eae46684f666a66acb8edf42661cPhil Goodwin & Ryan Richard
38205d5fa490c39eae46684f666a66acb8edf42661cPhil Goodwin & Ryan Richard        assertFalse(consumed);
38305d5fa490c39eae46684f666a66acb8edf42661cPhil Goodwin & Ryan Richard        assertTrue(shadowOf(activity).onKeyUpWasCalled());
38405d5fa490c39eae46684f666a66acb8edf42661cPhil Goodwin & Ryan Richard
38505d5fa490c39eae46684f666a66acb8edf42661cPhil Goodwin & Ryan Richard        shadowOf(activity).resetKeyUpWasCalled();
38605d5fa490c39eae46684f666a66acb8edf42661cPhil Goodwin & Ryan Richard        assertFalse(shadowOf(activity).onKeyUpWasCalled());
38705d5fa490c39eae46684f666a66acb8edf42661cPhil Goodwin & Ryan Richard    }
3884e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin
38905d5fa490c39eae46684f666a66acb8edf42661cPhil Goodwin & Ryan Richard    @Test
39005d5fa490c39eae46684f666a66acb8edf42661cPhil Goodwin & Ryan Richard    public void onKeyUp_callsOnBackPressedWhichFinishesTheActivity() throws Exception {
39105d5fa490c39eae46684f666a66acb8edf42661cPhil Goodwin & Ryan Richard        Activity activity = new Activity();
39205d5fa490c39eae46684f666a66acb8edf42661cPhil Goodwin & Ryan Richard        boolean consumed = activity.onKeyUp(KeyEvent.KEYCODE_BACK, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));
39305d5fa490c39eae46684f666a66acb8edf42661cPhil Goodwin & Ryan Richard
39405d5fa490c39eae46684f666a66acb8edf42661cPhil Goodwin & Ryan Richard        assertTrue(consumed);
39505d5fa490c39eae46684f666a66acb8edf42661cPhil Goodwin & Ryan Richard        assertTrue(shadowOf(activity).onKeyUpWasCalled());
39605d5fa490c39eae46684f666a66acb8edf42661cPhil Goodwin & Ryan Richard        assertTrue(activity.isFinishing());
39705d5fa490c39eae46684f666a66acb8edf42661cPhil Goodwin & Ryan Richard    }
3984e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin
39996bd436ce2e84a30747574ce2b7e4ef5e61bc3d0Valtteri Virtanen    @Test
40096bd436ce2e84a30747574ce2b7e4ef5e61bc3d0Valtteri Virtanen    public void shouldGiveSharedPreferences() throws Exception {
4014e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin        Activity activity = new Activity();
4024e38d69f092a879f1a8ba5cc8dce8526da47851aTyler Schultz        SharedPreferences preferences = activity.getPreferences(Context.MODE_PRIVATE);
4034e38d69f092a879f1a8ba5cc8dce8526da47851aTyler Schultz        assertNotNull(preferences);
4044e38d69f092a879f1a8ba5cc8dce8526da47851aTyler Schultz        preferences.edit().putString("foo", "bar").commit();
4054e38d69f092a879f1a8ba5cc8dce8526da47851aTyler Schultz        assertThat(activity.getPreferences(Context.MODE_PRIVATE).getString("foo", null), equalTo("bar"));
40696bd436ce2e84a30747574ce2b7e4ef5e61bc3d0Valtteri Virtanen    }
40705d5fa490c39eae46684f666a66acb8edf42661cPhil Goodwin & Ryan Richard
4084e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin    @Test
4094e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin    public void shouldFindContentViewContainer() throws Exception {
4104e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin        Activity activity = new Activity();
4114e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin        View contentView = new View(activity);
4124e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin        activity.setContentView(contentView);
4134e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin
4144e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin        FrameLayout contentViewContainer = (FrameLayout) activity.findViewById(android.R.id.content);
4154e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin        assertThat(contentViewContainer.getChildAt(0), is(contentView));
4164e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin    }
4174e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin
418521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen    @Test
419f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson      public void createGoesThroughFullLifeCycle() throws Exception {
420f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson        TestActivity activity = new TestActivity();
421f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson
422f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson        shadowOf(activity).create();
423f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson
424f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson        activity.transcript.assertEventsSoFar(
425f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson                "onCreate",
426f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson                "onStart",
427f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson                "onPostCreate",
428f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson                "onResume"
429f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson        );
430f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson    }
431f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson
432f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson
433f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson    @Test
434521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen    public void recreateGoesThroughFullLifeCycle() throws Exception {
435521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        TestActivity activity = new TestActivity();
436521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen
437521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        ShadowActivity shadow = shadowOf(activity);
438521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        shadow.recreate();
439521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen
440521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        activity.transcript.assertEventsSoFar(
441521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen                "onSaveInstanceState",
442521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen                "onPause",
443521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen                "onStop",
444521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen                "onRetainNonConfigurationInstance",
445521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen                "onDestroy",
446521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen                "onCreate",
447521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen                "onStart",
448521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen                "onRestoreInstanceState",
449521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen                "onResume"
450521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        );
451521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen
452521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        Integer storedValue = (Integer) activity.getLastNonConfigurationInstance();
453521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        assertEquals(5, storedValue.intValue());
454521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen    }
45510afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias
456be7c253877b6fb0dbf3e9556d8134b79db98befdMichael Portuesi    @Test
457be7c253877b6fb0dbf3e9556d8134b79db98befdMichael Portuesi    public void startAndStopManagingCursorTracksCursors() throws Exception {
458be7c253877b6fb0dbf3e9556d8134b79db98befdMichael Portuesi        TestActivity activity = new TestActivity();
459be7c253877b6fb0dbf3e9556d8134b79db98befdMichael Portuesi
460be7c253877b6fb0dbf3e9556d8134b79db98befdMichael Portuesi        ShadowActivity shadow = shadowOf(activity);
46110afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias
462be7c253877b6fb0dbf3e9556d8134b79db98befdMichael Portuesi        assertThat( shadow.getManagedCursors(), notNullValue() );
46310afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias        assertThat( shadow.getManagedCursors().size(), equalTo(0) );
46410afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias
465be7c253877b6fb0dbf3e9556d8134b79db98befdMichael Portuesi        Cursor c = Robolectric.newInstanceOf(SQLiteCursor.class);
466be7c253877b6fb0dbf3e9556d8134b79db98befdMichael Portuesi        activity.startManagingCursor(c);
467be7c253877b6fb0dbf3e9556d8134b79db98befdMichael Portuesi
468be7c253877b6fb0dbf3e9556d8134b79db98befdMichael Portuesi        assertThat( shadow.getManagedCursors(), notNullValue() );
469be7c253877b6fb0dbf3e9556d8134b79db98befdMichael Portuesi        assertThat( shadow.getManagedCursors().size(), equalTo(1) );
470be7c253877b6fb0dbf3e9556d8134b79db98befdMichael Portuesi        assertThat( shadow.getManagedCursors().get(0), sameInstance(c) );
471be7c253877b6fb0dbf3e9556d8134b79db98befdMichael Portuesi
472be7c253877b6fb0dbf3e9556d8134b79db98befdMichael Portuesi        activity.stopManagingCursor(c);
47310afa627a8dc3aba930189ee6b15d1aa99531ec8Cristian Esquivias
474be7c253877b6fb0dbf3e9556d8134b79db98befdMichael Portuesi        assertThat( shadow.getManagedCursors(), notNullValue() );
475be7c253877b6fb0dbf3e9556d8134b79db98befdMichael Portuesi        assertThat( shadow.getManagedCursors().size(), equalTo(0) );
476be7c253877b6fb0dbf3e9556d8134b79db98befdMichael Portuesi    }
477521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen
478521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen    private static class TestActivity extends Activity {
479521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        Transcript transcript = new Transcript();
480521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen
481f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson        private boolean isRecreating = false;
482f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson
483521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        @Override
484521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        public void onSaveInstanceState(Bundle outState) {
485f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson            isRecreating = true;
486521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen            transcript.add("onSaveInstanceState");
487521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen            outState.putString("TestActivityKey", "TestActivityValue");
488521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen            super.onSaveInstanceState(outState);
489521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        }
490521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen
491521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        @Override
492521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        public void onRestoreInstanceState(Bundle savedInstanceState) {
493521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen            transcript.add("onRestoreInstanceState");
494521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen            assertTrue(savedInstanceState.containsKey("TestActivityKey"));
495521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen            assertEquals("TestActivityValue", savedInstanceState.getString("TestActivityKey"));
496521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen            super.onRestoreInstanceState(savedInstanceState);
497521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        }
498521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen
499521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        @Override
500521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        public Object onRetainNonConfigurationInstance() {
501521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen            transcript.add("onRetainNonConfigurationInstance");
502521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen            return new Integer(5);
503521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        }
504521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen
505521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        @Override
506521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        public void onPause() {
507521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen            transcript.add("onPause");
508521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen            super.onPause();
509521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        }
510521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen
511521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        @Override
512521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        public void onDestroy() {
513521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen            transcript.add("onDestroy");
514521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen            super.onDestroy();
515521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        }
516521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen
517521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        @Override
518521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        public void onCreate(Bundle savedInstanceState) {
519521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen            transcript.add("onCreate");
520f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson
521f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson            if( isRecreating ) {
522f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson                assertTrue(savedInstanceState.containsKey("TestActivityKey"));
523f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson                assertEquals("TestActivityValue", savedInstanceState.getString("TestActivityKey"));
524f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson            }
525f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson
526521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen            super.onCreate(savedInstanceState);
527521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        }
528521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen
529521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        @Override
530521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        public void onStart() {
531521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen            transcript.add("onStart");
532521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen            super.onStart();
533521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        }
534521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen
535521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        @Override
536f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson        public void onPostCreate(Bundle savedInstanceState) {
537f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson            transcript.add("onPostCreate");
538f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson            super.onPostCreate(savedInstanceState);
539f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson        }
540f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson
541f9fae237b421f257e8fcc2316d8fcfde81762537Levi Wilson        @Override
542521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        public void onStop() {
543521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen            transcript.add("onStop");
544521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen            super.onStop();
545521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        }
546521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen
547521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        @Override
548521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        public void onResume() {
549521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen            transcript.add("onResume");
550521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen            super.onResume();
551521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen        }
552521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen    }
553521cabb44ef11199544abf17cfc1b7fb84019914Jon Boekenoogen
554256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante    private static class DialogCreatingActivity extends Activity {
555256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante        @Override
556256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante        protected Dialog onCreateDialog(int id) {
557256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante            return new Dialog(this);
558256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante        }
559256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante    }
560c6526af59ebcc818c95680ac6f8efe83a0b65644adriancowham
561256949ba5562873047aecf1bf47533e5ae1cd933Phil Goodwin & Phil Plante    private static class DialogLifeCycleActivity extends Activity {
56285af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        public boolean createdDialog = false;
56385af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        public boolean preparedDialog = false;
56485af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        public boolean preparedDialogWithBundle = false;
56585af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        public Dialog dialog = null;
56685af7906879a68c99b1878dac22605fa32454f3fRich Humphrey
5674e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin        @Override
5684e3b6432e36c8d7e95cee1066bd71a511f7c7b88Chris Perry & Phil Goodwin        protected void onDestroy() {
5690add4ea006647573fc11fac463c87842f2dcc403Christian Williams            super.onDestroy();
5700add4ea006647573fc11fac463c87842f2dcc403Christian Williams        }
57185af7906879a68c99b1878dac22605fa32454f3fRich Humphrey
57285af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        @Override
57385af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        protected Dialog onCreateDialog(int id) {
57485af7906879a68c99b1878dac22605fa32454f3fRich Humphrey            createdDialog = true;
57585af7906879a68c99b1878dac22605fa32454f3fRich Humphrey            return dialog;
57685af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        }
57785af7906879a68c99b1878dac22605fa32454f3fRich Humphrey
57885af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        @Override
57985af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        protected void onPrepareDialog(int id, Dialog dialog) {
58085af7906879a68c99b1878dac22605fa32454f3fRich Humphrey            preparedDialog = true;
58185af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        }
58285af7906879a68c99b1878dac22605fa32454f3fRich Humphrey
58385af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        @Override
58485af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        protected void onPrepareDialog(int id, Dialog dialog, Bundle bundle) {
58585af7906879a68c99b1878dac22605fa32454f3fRich Humphrey            preparedDialogWithBundle = true;
58685af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        }
58785af7906879a68c99b1878dac22605fa32454f3fRich Humphrey    }
58885af7906879a68c99b1878dac22605fa32454f3fRich Humphrey
58985af7906879a68c99b1878dac22605fa32454f3fRich Humphrey    private static class ActivityWithOnCreateDialog extends Activity {
59085af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        boolean onCreateDialogWasCalled = false;
59185af7906879a68c99b1878dac22605fa32454f3fRich Humphrey
59285af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        @Override
59385af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        protected Dialog onCreateDialog(int id) {
59485af7906879a68c99b1878dac22605fa32454f3fRich Humphrey            onCreateDialogWasCalled = true;
59585af7906879a68c99b1878dac22605fa32454f3fRich Humphrey            return new Dialog(null);
59685af7906879a68c99b1878dac22605fa32454f3fRich Humphrey        }
5970add4ea006647573fc11fac463c87842f2dcc403Christian Williams    }
5980add4ea006647573fc11fac463c87842f2dcc403Christian Williams}
599