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