FragmentReceiveResultTest.java revision 754cb29c50f09a83251dd4bb633ba445b2411adb
17e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri/*
27e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri * Copyright (C) 2016 The Android Open Source Project
37e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri *
47e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri * Licensed under the Apache License, Version 2.0 (the "License");
57e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri * you may not use this file except in compliance with the License.
67e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri * You may obtain a copy of the License at
77e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri *
87e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri *      http://www.apache.org/licenses/LICENSE-2.0
97e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri *
107e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri * Unless required by applicable law or agreed to in writing, software
117e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri * distributed under the License is distributed on an "AS IS" BASIS,
127e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri * See the License for the specific language governing permissions and
147e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri * limitations under the License.
157e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri */
167e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarripackage android.support.v4.app;
177e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri
18754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport static junit.framework.TestCase.assertEquals;
19754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport static junit.framework.TestCase.assertTrue;
20754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport static junit.framework.TestCase.fail;
21754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikas
227e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarriimport android.app.Activity;
237e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarriimport android.app.PendingIntent;
247e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarriimport android.content.Intent;
257e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarriimport android.content.IntentSender;
26754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport android.support.fragment.test.R;
277e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarriimport android.support.test.InstrumentationRegistry;
28754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport android.support.test.filters.SmallTest;
297e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarriimport android.support.test.runner.AndroidJUnit4;
307e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarriimport android.support.v4.BaseInstrumentationTestCase;
317e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarriimport android.support.v4.app.test.FragmentResultActivity;
327e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarriimport android.support.v4.app.test.FragmentTestActivity;
337e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri
347e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarriimport org.junit.Before;
357e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarriimport org.junit.Test;
367e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarriimport org.junit.runner.RunWith;
377e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri
387e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri/**
397e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri * Tests for Fragment startActivityForResult and startIntentSenderForResult.
407e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri */
417e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri@RunWith(AndroidJUnit4.class)
427e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarripublic class FragmentReceiveResultTest extends BaseInstrumentationTestCase<FragmentTestActivity> {
437e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    private FragmentTestActivity mActivity;
447e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    private TestFragment mFragment;
457e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri
467e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    public FragmentReceiveResultTest() {
477e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        super(FragmentTestActivity.class);
487e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    }
497e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri
507e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    @Before
517e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    public void setUp() {
527e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        mActivity = mActivityTestRule.getActivity();
537e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        mFragment = attachTestFragment();
547e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    }
557e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri
567e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    @Test
577e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    @SmallTest
587e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    public void testStartActivityForResultOk() {
597e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        startActivityForResult(10, Activity.RESULT_OK, "content 10");
607e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri
617e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        assertTrue("Fragment should receive result", mFragment.mHasResult);
627e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        assertEquals(10, mFragment.mRequestCode);
637e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        assertEquals(Activity.RESULT_OK, mFragment.mResultCode);
647e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        assertEquals("content 10", mFragment.mResultContent);
657e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    }
667e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri
677e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    @Test
687e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    @SmallTest
697e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    public void testStartActivityForResultCanceled() {
707e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        startActivityForResult(20, Activity.RESULT_CANCELED, "content 20");
717e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri
727e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        assertTrue("Fragment should receive result", mFragment.mHasResult);
737e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        assertEquals(20, mFragment.mRequestCode);
747e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        assertEquals(Activity.RESULT_CANCELED, mFragment.mResultCode);
757e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        assertEquals("content 20", mFragment.mResultContent);
767e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    }
777e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri
787e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    @Test
797e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    @SmallTest
807e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    public void testStartIntentSenderForResultOk() {
817e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        startIntentSenderForResult(30, Activity.RESULT_OK, "content 30");
827e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri
837e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        assertTrue("Fragment should receive result", mFragment.mHasResult);
847e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        assertEquals(30, mFragment.mRequestCode);
857e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        assertEquals(Activity.RESULT_OK, mFragment.mResultCode);
867e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        assertEquals("content 30", mFragment.mResultContent);
877e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    }
887e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri
897e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    @Test
907e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    @SmallTest
917e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    public void testStartIntentSenderForResultCanceled() {
927e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        startIntentSenderForResult(40, Activity.RESULT_CANCELED, "content 40");
937e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri
947e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        assertTrue("Fragment should receive result", mFragment.mHasResult);
957e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        assertEquals(40, mFragment.mRequestCode);
967e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        assertEquals(Activity.RESULT_CANCELED, mFragment.mResultCode);
977e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        assertEquals("content 40", mFragment.mResultContent);
987e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    }
997e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri
1007e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    private TestFragment attachTestFragment() {
1017e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        final TestFragment fragment = new TestFragment();
1027e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
1037e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri            @Override
1047e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri            public void run() {
1057e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri                mActivity.getSupportFragmentManager().beginTransaction()
1067e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri                        .add(R.id.content, fragment)
1077e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri                        .addToBackStack(null)
1087e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri                        .commitAllowingStateLoss();
1097e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri                mActivity.getFragmentManager().executePendingTransactions();
1107e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri            }
1117e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        });
1127e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
1137e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        return fragment;
1147e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    }
1157e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri
1167e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    private void startActivityForResult(final int requestCode, final int resultCode,
1177e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri            final String content) {
1187e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
1197e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri            @Override
1207e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri            public void run() {
1217e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri                Intent intent = new Intent(mActivity, FragmentResultActivity.class);
1227e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri                intent.putExtra(FragmentResultActivity.EXTRA_RESULT_CODE, resultCode);
1237e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri                intent.putExtra(FragmentResultActivity.EXTRA_RESULT_CONTENT, content);
1247e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri
1257e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri                mFragment.startActivityForResult(intent, requestCode);
1267e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri            }
1277e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        });
1287e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
1297e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    }
1307e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri
1317e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    private void startIntentSenderForResult(final int requestCode, final int resultCode,
1327e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri            final String content) {
1337e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
1347e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri            @Override
1357e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri            public void run() {
1367e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri                Intent intent = new Intent(mActivity, FragmentResultActivity.class);
1377e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri                intent.putExtra(FragmentResultActivity.EXTRA_RESULT_CODE, resultCode);
1387e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri                intent.putExtra(FragmentResultActivity.EXTRA_RESULT_CONTENT, content);
1397e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri
1407e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri                PendingIntent pendingIntent = PendingIntent.getActivity(mActivity,
1417e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri                        requestCode, intent, 0);
1427e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri
1437e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri                try {
1447e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri                    mFragment.startIntentSenderForResult(pendingIntent.getIntentSender(),
1457e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri                            requestCode, null, 0, 0, 0, null);
1467e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri                } catch (IntentSender.SendIntentException e) {
1477e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri                    fail("IntentSender failed");
1487e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri                }
1497e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri            }
1507e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        });
1517e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
1527e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    }
1537e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri
154af556dcfc63652cafa822a3d742ad96c78bff037Clara Bayarri    public static class TestFragment extends Fragment {
1557e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        boolean mHasResult = false;
1567e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        int mRequestCode = -1;
1577e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        int mResultCode = 100;
1587e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        String mResultContent;
1597e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri
1607e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        @Override
1617e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        public void onActivityResult(int requestCode, int resultCode, Intent data) {
1627e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri            mHasResult = true;
1637e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri            mRequestCode = requestCode;
1647e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri            mResultCode = resultCode;
1657e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri            mResultContent = data.getStringExtra(FragmentResultActivity.EXTRA_RESULT_CONTENT);
1667e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri        }
1677e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri    }
1687e866aba6258c1c7c2e0e9b303d065f3ed88e841Clara Bayarri}
169