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