ActivityTest.java revision ea74b95565e92521affdc7cc1a773e10fd235a96
133873d2b41a5cd2597b20a4e88eb8942944c0f23Tyler Schultzpackage com.xtremelabs.robolectric.shadows; 20add4ea006647573fc11fac463c87842f2dcc403Christian Williams 30add4ea006647573fc11fac463c87842f2dcc403Christian Williamsimport android.app.Activity; 40add4ea006647573fc11fac463c87842f2dcc403Christian Williamsimport android.appwidget.AppWidgetProvider; 5b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williamsimport android.content.Intent; 60add4ea006647573fc11fac463c87842f2dcc403Christian Williamsimport android.content.IntentFilter; 7b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williamsimport android.net.Uri; 8ce8adbf01d520e692a7eb6b72874c0182966127bPhil Goodwin & Tyler Schultzimport com.xtremelabs.robolectric.ApplicationResolver; 90add4ea006647573fc11fac463c87842f2dcc403Christian Williamsimport com.xtremelabs.robolectric.Robolectric; 1007257335f88da163910cc0bd039e6163edc38580Gregg Van Hove & Phil Goodwinimport com.xtremelabs.robolectric.WithTestDefaultsRunner; 11b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williamsimport com.xtremelabs.robolectric.util.Transcript; 120add4ea006647573fc11fac463c87842f2dcc403Christian Williamsimport org.junit.Test; 130add4ea006647573fc11fac463c87842f2dcc403Christian Williamsimport org.junit.runner.RunWith; 140add4ea006647573fc11fac463c87842f2dcc403Christian Williams 15ce8adbf01d520e692a7eb6b72874c0182966127bPhil Goodwin & Tyler Schultzimport java.io.File; 16ce8adbf01d520e692a7eb6b72874c0182966127bPhil Goodwin & Tyler Schultz 17b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williamsimport static com.xtremelabs.robolectric.Robolectric.shadowOf; 18b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williamsimport static org.hamcrest.Matchers.startsWith; 19ce8adbf01d520e692a7eb6b72874c0182966127bPhil Goodwin & Tyler Schultzimport static org.junit.Assert.assertEquals; 20b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williamsimport static org.junit.Assert.assertThat; 21b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williamsimport static org.junit.Assert.fail; 22b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams 2307257335f88da163910cc0bd039e6163edc38580Gregg Van Hove & Phil Goodwin@RunWith(WithTestDefaultsRunner.class) 240add4ea006647573fc11fac463c87842f2dcc403Christian Williamspublic class ActivityTest { 250add4ea006647573fc11fac463c87842f2dcc403Christian Williams 260add4ea006647573fc11fac463c87842f2dcc403Christian Williams @Test(expected = IllegalStateException.class) 270add4ea006647573fc11fac463c87842f2dcc403Christian Williams public void shouldComplainIfActivityIsDestroyedWithRegisteredBroadcastReceivers() throws Exception { 280add4ea006647573fc11fac463c87842f2dcc403Christian Williams MyActivity activity = new MyActivity(); 290add4ea006647573fc11fac463c87842f2dcc403Christian Williams activity.registerReceiver(new AppWidgetProvider(), new IntentFilter()); 300add4ea006647573fc11fac463c87842f2dcc403Christian Williams activity.onDestroy(); 310add4ea006647573fc11fac463c87842f2dcc403Christian Williams } 320add4ea006647573fc11fac463c87842f2dcc403Christian Williams 330add4ea006647573fc11fac463c87842f2dcc403Christian Williams @Test 340add4ea006647573fc11fac463c87842f2dcc403Christian Williams public void shouldNotComplainIfActivityIsDestroyedWhileAnotherActivityHasRegisteredBroadcastReceivers() throws Exception { 350add4ea006647573fc11fac463c87842f2dcc403Christian Williams MyActivity activity = new MyActivity(); 360add4ea006647573fc11fac463c87842f2dcc403Christian Williams 370add4ea006647573fc11fac463c87842f2dcc403Christian Williams MyActivity activity2 = new MyActivity(); 380add4ea006647573fc11fac463c87842f2dcc403Christian Williams activity2.registerReceiver(new AppWidgetProvider(), new IntentFilter()); 390add4ea006647573fc11fac463c87842f2dcc403Christian Williams 400add4ea006647573fc11fac463c87842f2dcc403Christian Williams activity.onDestroy(); // should not throw exception 410add4ea006647573fc11fac463c87842f2dcc403Christian Williams } 420add4ea006647573fc11fac463c87842f2dcc403Christian Williams 43b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams @Test 44b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams public void startActivityForResultAndReceiveResult_shouldSendResponsesBackToActivity() throws Exception { 45b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams final Transcript transcript = new Transcript(); 46b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams Activity activity = new Activity() { 47b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { 48b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams transcript.add("onActivityResult called with requestCode " + requestCode + ", resultCode " + resultCode + ", intent data " + data.getData()); 49b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams } 50b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams }; 51b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams activity.startActivityForResult(new Intent().setType("audio/*"), 123); 52b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams activity.startActivityForResult(new Intent().setType("image/*"), 456); 53b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams 54b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams shadowOf(activity).receiveResult(new Intent().setType("image/*"), Activity.RESULT_OK, 55b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams new Intent().setData(Uri.parse("content:foo"))); 56b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams transcript.assertEventsSoFar("onActivityResult called with requestCode 456, resultCode -1, intent data content:foo"); 57b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams } 58b832a2815d03667cbe1415bfcfd596292cb76f85Josh Lauer & Christian Williams 59b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams @Test 60b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams public void startActivityForResultAndReceiveResult_whenNoIntentMatches_shouldThrowException() throws Exception { 61b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams Activity activity = new Activity() { 62b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { 63b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams throw new IllegalStateException("should not be called"); 64b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams } 65b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams }; 66b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams activity.startActivityForResult(new Intent().setType("audio/*"), 123); 67b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams activity.startActivityForResult(new Intent().setType("image/*"), 456); 68b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams 69b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams Intent requestIntent = new Intent().setType("video/*"); 70b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams try { 71b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams shadowOf(activity).receiveResult(requestIntent, Activity.RESULT_OK, 72b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams new Intent().setData(Uri.parse("content:foo"))); 73b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams fail(); 74b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams } catch (Exception e) { 75b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams assertThat(e.getMessage(), startsWith("No intent matches " + requestIntent)); 76b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams } 77b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams } 78b76cabccd9f35b57fe486faf7d5763952c07c1a9Josh Lauer & Christian Williams 79ea74b95565e92521affdc7cc1a773e10fd235a96Josh Lauer & Christian Williams @Test 80ce8adbf01d520e692a7eb6b72874c0182966127bPhil Goodwin & Tyler Schultz public void shouldRetrievePackageNameFromTheManifest() throws Exception { 81ce8adbf01d520e692a7eb6b72874c0182966127bPhil Goodwin & Tyler Schultz Robolectric.application = new ApplicationResolver("test" + File.separator + "TestAndroidManifestWithPackageName.xml").resolveApplication(); 82ce8adbf01d520e692a7eb6b72874c0182966127bPhil Goodwin & Tyler Schultz assertEquals("com.wacka.wa", new Activity().getPackageName()); 83ce8adbf01d520e692a7eb6b72874c0182966127bPhil Goodwin & Tyler Schultz } 84ce8adbf01d520e692a7eb6b72874c0182966127bPhil Goodwin & Tyler Schultz 850add4ea006647573fc11fac463c87842f2dcc403Christian Williams private static class MyActivity extends Activity { 860add4ea006647573fc11fac463c87842f2dcc403Christian Williams @Override protected void onDestroy() { 870add4ea006647573fc11fac463c87842f2dcc403Christian Williams super.onDestroy(); 880add4ea006647573fc11fac463c87842f2dcc403Christian Williams } 890add4ea006647573fc11fac463c87842f2dcc403Christian Williams } 900add4ea006647573fc11fac463c87842f2dcc403Christian Williams} 91