ActivityTest.java revision ea74b95565e92521affdc7cc1a773e10fd235a96
1package com.xtremelabs.robolectric.shadows; 2 3import android.app.Activity; 4import android.appwidget.AppWidgetProvider; 5import android.content.Intent; 6import android.content.IntentFilter; 7import android.net.Uri; 8import com.xtremelabs.robolectric.ApplicationResolver; 9import com.xtremelabs.robolectric.Robolectric; 10import com.xtremelabs.robolectric.WithTestDefaultsRunner; 11import com.xtremelabs.robolectric.util.Transcript; 12import org.junit.Test; 13import org.junit.runner.RunWith; 14 15import java.io.File; 16 17import static com.xtremelabs.robolectric.Robolectric.shadowOf; 18import static org.hamcrest.Matchers.startsWith; 19import static org.junit.Assert.assertEquals; 20import static org.junit.Assert.assertThat; 21import static org.junit.Assert.fail; 22 23@RunWith(WithTestDefaultsRunner.class) 24public class ActivityTest { 25 26 @Test(expected = IllegalStateException.class) 27 public void shouldComplainIfActivityIsDestroyedWithRegisteredBroadcastReceivers() throws Exception { 28 MyActivity activity = new MyActivity(); 29 activity.registerReceiver(new AppWidgetProvider(), new IntentFilter()); 30 activity.onDestroy(); 31 } 32 33 @Test 34 public void shouldNotComplainIfActivityIsDestroyedWhileAnotherActivityHasRegisteredBroadcastReceivers() throws Exception { 35 MyActivity activity = new MyActivity(); 36 37 MyActivity activity2 = new MyActivity(); 38 activity2.registerReceiver(new AppWidgetProvider(), new IntentFilter()); 39 40 activity.onDestroy(); // should not throw exception 41 } 42 43 @Test 44 public void startActivityForResultAndReceiveResult_shouldSendResponsesBackToActivity() throws Exception { 45 final Transcript transcript = new Transcript(); 46 Activity activity = new Activity() { 47 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { 48 transcript.add("onActivityResult called with requestCode " + requestCode + ", resultCode " + resultCode + ", intent data " + data.getData()); 49 } 50 }; 51 activity.startActivityForResult(new Intent().setType("audio/*"), 123); 52 activity.startActivityForResult(new Intent().setType("image/*"), 456); 53 54 shadowOf(activity).receiveResult(new Intent().setType("image/*"), Activity.RESULT_OK, 55 new Intent().setData(Uri.parse("content:foo"))); 56 transcript.assertEventsSoFar("onActivityResult called with requestCode 456, resultCode -1, intent data content:foo"); 57 } 58 59 @Test 60 public void startActivityForResultAndReceiveResult_whenNoIntentMatches_shouldThrowException() throws Exception { 61 Activity activity = new Activity() { 62 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { 63 throw new IllegalStateException("should not be called"); 64 } 65 }; 66 activity.startActivityForResult(new Intent().setType("audio/*"), 123); 67 activity.startActivityForResult(new Intent().setType("image/*"), 456); 68 69 Intent requestIntent = new Intent().setType("video/*"); 70 try { 71 shadowOf(activity).receiveResult(requestIntent, Activity.RESULT_OK, 72 new Intent().setData(Uri.parse("content:foo"))); 73 fail(); 74 } catch (Exception e) { 75 assertThat(e.getMessage(), startsWith("No intent matches " + requestIntent)); 76 } 77 } 78 79 @Test 80 public void shouldRetrievePackageNameFromTheManifest() throws Exception { 81 Robolectric.application = new ApplicationResolver("test" + File.separator + "TestAndroidManifestWithPackageName.xml").resolveApplication(); 82 assertEquals("com.wacka.wa", new Activity().getPackageName()); 83 } 84 85 private static class MyActivity extends Activity { 86 @Override protected void onDestroy() { 87 super.onDestroy(); 88 } 89 } 90} 91