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