GuidedStepSupportFragmentTest.java revision 42df898f89e60afe9d45b95c8ce86e6b6fce89ce
18872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger/* This file is auto-generated from GuidedStepFragmentTest.java. DO NOT MODIFY. */ 28872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 38872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger/* 48872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger * Copyright (C) 2016 The Android Open Source Project 58872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger * 68872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger * Licensed under the Apache License, Version 2.0 (the "License"); 78872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger * you may not use this file except in compliance with the License. 88872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger * You may obtain a copy of the License at 98872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger * 108872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger * http://www.apache.org/licenses/LICENSE-2.0 118872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger * 128872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger * Unless required by applicable law or agreed to in writing, software 138872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger * distributed under the License is distributed on an "AS IS" BASIS, 148872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 158872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger * See the License for the specific language governing permissions and 168872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger * limitations under the License. 178872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger */ 188872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerpackage android.support.v17.leanback.app; 19ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe 208872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerimport static org.junit.Assert.assertEquals; 218872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerimport static org.junit.Assert.assertFalse; 22acb4099deff72c2c631f7110a405a3331d3e8b27Derek Sollenbergerimport static org.junit.Assert.assertTrue; 238872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerimport static org.mockito.Mockito.any; 248872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerimport static org.mockito.Mockito.doAnswer; 256ba30b85ddfbe37c338ee8dde3dd33322eb38d47Behdad Esfahbodimport static org.mockito.Mockito.timeout; 268872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerimport static org.mockito.Mockito.times; 278872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerimport static org.mockito.Mockito.verify; 288872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 298872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerimport android.os.Bundle; 308872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerimport android.support.test.filters.MediumTest; 318872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerimport android.support.test.runner.AndroidJUnit4; 328872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerimport android.support.v17.leanback.testutils.PollingCheck; 338872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerimport android.support.v17.leanback.widget.GuidedAction; 348872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerimport android.view.KeyEvent; 358872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerimport android.view.LayoutInflater; 368872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerimport android.view.View; 378872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerimport android.view.ViewGroup; 388872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 398872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerimport org.junit.Test; 408872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerimport org.junit.runner.RunWith; 418872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerimport org.mockito.ArgumentCaptor; 428872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerimport org.mockito.invocation.InvocationOnMock; 438872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerimport org.mockito.stubbing.Answer; 448872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 458872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerimport java.util.ArrayList; 468872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerimport java.util.List; 478872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 488872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger/** 498872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger * @hide from javadoc 508872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger */ 518872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger@MediumTest 528872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger@RunWith(AndroidJUnit4.class) 538872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenbergerpublic class GuidedStepSupportFragmentTest extends GuidedStepSupportFragmentTestBase { 548872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 558872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger private static final int ON_DESTROY_TIMEOUT = 5000; 568872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 578872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger @Test 588872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger public void nextAndBack() throws Throwable { 598872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger GuidedStepTestSupportFragment.Provider first = mockProvider("first"); 608872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger doAnswer(new Answer<Void>() { 618872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger public Void answer(InvocationOnMock invocation) { 628872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger List actions = (List) invocation.getArguments()[0]; 638872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger actions.add(new GuidedAction.Builder().id(1000).title("OK").build()); 648872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger return null; 658872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger } 668872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger }).when(first).onCreateActions(any(List.class), any(Bundle.class)); 678872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger doAnswer(new Answer<Void>() { 688872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger public Void answer(InvocationOnMock invocation) { 698872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger GuidedAction action = (GuidedAction) invocation.getArguments()[0]; 708872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger GuidedStepTestSupportFragment.Provider obj = (GuidedStepTestSupportFragment.Provider) 718872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger invocation.getMock(); 728872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger if (action.getId() == 1000) { 738872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger GuidedStepSupportFragment.add(obj.getFragmentManager(), 748872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger new GuidedStepTestSupportFragment("second")); 758872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger } 768872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger return null; 778872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger } 788872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger }).when(first).onGuidedActionClicked(any(GuidedAction.class)); 796ba30b85ddfbe37c338ee8dde3dd33322eb38d47Behdad Esfahbod 808872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger GuidedStepTestSupportFragment.Provider second = mockProvider("second"); 818872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 828872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger GuidedStepSupportFragmentTestActivity activity = launchTestActivity("first"); 838872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, times(1)).onCreate(any(Bundle.class)); 848872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, times(1)).onCreateGuidance(any(Bundle.class)); 858872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, times(1)).onCreateActions(any(List.class), any(Bundle.class)); 868872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, times(1)).onCreateButtonActions(any(List.class), any(Bundle.class)); 878872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, times(1)).onCreateView(any(LayoutInflater.class), any(ViewGroup.class), 888872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger any(Bundle.class), any(View.class)); 898872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, times(1)).onViewStateRestored(any(Bundle.class)); 908872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, times(1)).onStart(); 918872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, times(1)).onResume(); 928872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 938872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger sendKey(KeyEvent.KEYCODE_DPAD_CENTER); 948872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, times(1)).onGuidedActionClicked(any(GuidedAction.class)); 958872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 968872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger PollingCheck.waitFor(new EnterTransitionFinish(second)); 978872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, times(1)).onPause(); 988872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, times(1)).onStop(); 998872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, times(1)).onDestroyView(); 1008872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(second, times(1)).onCreate(any(Bundle.class)); 1018872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(second, times(1)).onCreateGuidance(any(Bundle.class)); 1028872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(second, times(1)).onCreateActions(any(List.class), any(Bundle.class)); 1038872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(second, times(1)).onCreateButtonActions(any(List.class), any(Bundle.class)); 1048872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(second, times(1)).onCreateView(any(LayoutInflater.class), any(ViewGroup.class), 1058872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger any(Bundle.class), any(View.class)); 1068872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(second, times(1)).onViewStateRestored(any(Bundle.class)); 1078872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(second, times(1)).onStart(); 1088872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(second, times(1)).onResume(); 1098872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 1108872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger sendKey(KeyEvent.KEYCODE_BACK); 1118872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 1128872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger PollingCheck.waitFor(new EnterTransitionFinish(first)); 1138872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(second, times(1)).onPause(); 1148872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(second, times(1)).onStop(); 1158872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(second, times(1)).onDestroyView(); 1168872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(second, times(1)).onDestroy(); 1178872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, times(1)).onCreateActions(any(List.class), any(Bundle.class)); 1188872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, times(2)).onCreateView(any(LayoutInflater.class), any(ViewGroup.class), 1198872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger any(Bundle.class), any(View.class)); 1208872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, times(2)).onViewStateRestored(any(Bundle.class)); 1218872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, times(2)).onStart(); 1228872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, times(2)).onResume(); 1238872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 1248872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger sendKey(KeyEvent.KEYCODE_BACK); 1258872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger PollingCheck.waitFor(new PollingCheck.ActivityDestroy(activity)); 1268872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, timeout(ON_DESTROY_TIMEOUT).times(1)).onDestroy(); 1278872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger assertTrue(activity.isDestroyed()); 1288872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger } 1298872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 1308872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger @Test 1318872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger public void restoreFragments() throws Throwable { 1328872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger GuidedStepTestSupportFragment.Provider first = mockProvider("first"); 1338872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger doAnswer(new Answer<Void>() { 1348872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger public Void answer(InvocationOnMock invocation) { 1358872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger List actions = (List) invocation.getArguments()[0]; 1368872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger actions.add(new GuidedAction.Builder().id(1000).title("OK").build()); 1378872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger actions.add(new GuidedAction.Builder().id(1001).editable(true).title("text") 1388872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger .build()); 1398872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger actions.add(new GuidedAction.Builder().id(1002).editable(true).title("text") 1408872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger .autoSaveRestoreEnabled(false).build()); 1418872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger return null; 1428872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger } 1438872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger }).when(first).onCreateActions(any(List.class), any(Bundle.class)); 1448872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger doAnswer(new Answer<Void>() { 1458872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger public Void answer(InvocationOnMock invocation) { 1468872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger GuidedAction action = (GuidedAction) invocation.getArguments()[0]; 1478872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger GuidedStepTestSupportFragment.Provider obj = (GuidedStepTestSupportFragment.Provider) 1488872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger invocation.getMock(); 1498872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger if (action.getId() == 1000) { 1508872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger GuidedStepSupportFragment.add(obj.getFragmentManager(), 1518872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger new GuidedStepTestSupportFragment("second")); 1528872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger } 1538872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger return null; 1548872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger } 1558872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger }).when(first).onGuidedActionClicked(any(GuidedAction.class)); 1568872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 1578872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger GuidedStepTestSupportFragment.Provider second = mockProvider("second"); 1588872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 1598872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger final GuidedStepSupportFragmentTestActivity activity = launchTestActivity("first"); 1608872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger first.getFragment().findActionById(1001).setTitle("modified text"); 1618872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger first.getFragment().findActionById(1002).setTitle("modified text"); 1628872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger sendKey(KeyEvent.KEYCODE_DPAD_CENTER); 1638872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger PollingCheck.waitFor(new EnterTransitionFinish(second)); 1648872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 1658872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger activityTestRule.runOnUiThread(new Runnable() { 1668872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger @Override 1678872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger public void run() { 1688872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger activity.recreate(); 1698872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger } 1708872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger }); 1718872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger PollingCheck.waitFor(new EnterTransitionFinish(second)); 1728872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, times(2)).onCreate(any(Bundle.class)); 1738872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, times(1)).onCreateView(any(LayoutInflater.class), any(ViewGroup.class), 1748872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger any(Bundle.class), any(View.class)); 1758872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, times(2)).onCreateActions(any(List.class), any(Bundle.class)); 1768872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, times(1)).onDestroy(); 1778872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(second, times(2)).onCreate(any(Bundle.class)); 1788872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(second, times(2)).onCreateView(any(LayoutInflater.class), any(ViewGroup.class), 1798872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger any(Bundle.class), any(View.class)); 1808872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(second, times(1)).onDestroy(); 1818872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger assertEquals("modified text", first.getFragment().findActionById(1001).getTitle()); 1828872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger assertEquals("text", first.getFragment().findActionById(1002).getTitle()); 1838872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 1848872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger sendKey(KeyEvent.KEYCODE_BACK); 1858872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger PollingCheck.waitFor(new EnterTransitionFinish(first)); 1868872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(second, times(2)).onPause(); 1878872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(second, times(2)).onStop(); 1888872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(second, times(2)).onDestroyView(); 1898872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(second, times(2)).onDestroy(); 1908872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, times(2)).onCreateView(any(LayoutInflater.class), any(ViewGroup.class), 1918872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger any(Bundle.class), any(View.class)); 1928872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger } 1938872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 1946ba30b85ddfbe37c338ee8dde3dd33322eb38d47Behdad Esfahbod 1958872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger @Test 1968872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger public void finishGuidedStepSupportFragment_finishes_activity() throws Throwable { 1978872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger GuidedStepTestSupportFragment.Provider first = mockProvider("first"); 1988872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger doAnswer(new Answer<Void>() { 1998872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger public Void answer(InvocationOnMock invocation) { 2006ba30b85ddfbe37c338ee8dde3dd33322eb38d47Behdad Esfahbod List actions = (List) invocation.getArguments()[0]; 2018872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger actions.add(new GuidedAction.Builder().id(1001).title("Finish activity").build()); 2028872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger return null; 2038872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger } 2048872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger }).when(first).onCreateActions(any(List.class), any(Bundle.class)); 2058872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger doAnswer(new Answer<Void>() { 2068872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger public Void answer(InvocationOnMock invocation) { 2078872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger GuidedAction action = (GuidedAction) invocation.getArguments()[0]; 2088872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger GuidedStepTestSupportFragment.Provider obj = (GuidedStepTestSupportFragment.Provider) 2098872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger invocation.getMock(); 2108872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger if (action.getId() == 1001) { 2118872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger obj.getFragment().finishGuidedStepSupportFragments(); 2128872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger } 2138872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger return null; 2148872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger } 2158872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger }).when(first).onGuidedActionClicked(any(GuidedAction.class)); 2166ba30b85ddfbe37c338ee8dde3dd33322eb38d47Behdad Esfahbod 2178872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger final GuidedStepSupportFragmentTestActivity activity = launchTestActivity("first"); 2188872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 2198872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger View viewFinish = first.getFragment().getActionItemView(0); 2208872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger assertTrue(viewFinish.hasFocus()); 2218872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger sendKey(KeyEvent.KEYCODE_DPAD_CENTER); 2226ba30b85ddfbe37c338ee8dde3dd33322eb38d47Behdad Esfahbod PollingCheck.waitFor(new PollingCheck.ActivityDestroy(activity)); 2238872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, timeout(ON_DESTROY_TIMEOUT).times(1)).onDestroy(); 2248872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger } 2258872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 2268872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger @Test 2278872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger public void finishGuidedStepSupportFragment_finishes_fragments() throws Throwable { 2288872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger GuidedStepTestSupportFragment.Provider first = mockProvider("first"); 2298872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger doAnswer(new Answer<Void>() { 2308872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger public Void answer(InvocationOnMock invocation) { 2318872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger List actions = (List) invocation.getArguments()[0]; 2328872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger actions.add(new GuidedAction.Builder().id(1001).title("Finish fragments").build()); 2338872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger return null; 2348872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger } 2358872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger }).when(first).onCreateActions(any(List.class), any(Bundle.class)); 2368872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger doAnswer(new Answer<Void>() { 2378872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger public Void answer(InvocationOnMock invocation) { 2386ba30b85ddfbe37c338ee8dde3dd33322eb38d47Behdad Esfahbod GuidedAction action = (GuidedAction) invocation.getArguments()[0]; 2398872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger GuidedStepTestSupportFragment.Provider obj = (GuidedStepTestSupportFragment.Provider) 2408872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger invocation.getMock(); 2418872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger if (action.getId() == 1001) { 2428872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger obj.getFragment().finishGuidedStepSupportFragments(); 2438872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger } 2446ba30b85ddfbe37c338ee8dde3dd33322eb38d47Behdad Esfahbod return null; 2458872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger } 2468872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger }).when(first).onGuidedActionClicked(any(GuidedAction.class)); 2478872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 2488872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger final GuidedStepSupportFragmentTestActivity activity = launchTestActivity("first", 2498872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger false /*asRoot*/); 2506ba30b85ddfbe37c338ee8dde3dd33322eb38d47Behdad Esfahbod 2518872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger View viewFinish = first.getFragment().getActionItemView(0); 2528872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger assertTrue(viewFinish.hasFocus()); 2538872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger sendKey(KeyEvent.KEYCODE_DPAD_CENTER); 2548872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 2558872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger // fragment should be destroyed, activity should not destroyed 2566ba30b85ddfbe37c338ee8dde3dd33322eb38d47Behdad Esfahbod waitOnDestroy(first, 1); 2578872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger assertFalse(activity.isDestroyed()); 2588872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger } 2598872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 2608872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger @Test 2618872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger public void subActions() throws Throwable { 2626ba30b85ddfbe37c338ee8dde3dd33322eb38d47Behdad Esfahbod final boolean[] expandSubActionInOnCreateView = new boolean[] {false}; 2638872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger GuidedStepTestSupportFragment.Provider first = mockProvider("first"); 2648872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger doAnswer(new Answer<Void>() { 2658872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger public Void answer(InvocationOnMock invocation) { 2668872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger GuidedStepTestSupportFragment.Provider obj = (GuidedStepTestSupportFragment.Provider) 2678872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger invocation.getMock(); 2688872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger if (expandSubActionInOnCreateView[0]) { 2696ba30b85ddfbe37c338ee8dde3dd33322eb38d47Behdad Esfahbod obj.getFragment().expandAction(obj.getFragment().findActionById(1000), false); 2708872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger } 2718872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger return null; 2728872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger } 2738872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger }).when(first).onCreateView(any(LayoutInflater.class), any(ViewGroup.class), 2748872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger any(Bundle.class), any(View.class)); 2758872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger doAnswer(new Answer<Void>() { 2768872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger public Void answer(InvocationOnMock invocation) { 2776ba30b85ddfbe37c338ee8dde3dd33322eb38d47Behdad Esfahbod List actions = (List) invocation.getArguments()[0]; 2788872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger List<GuidedAction> subActions = new ArrayList<GuidedAction>(); 2798872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger subActions.add(new GuidedAction.Builder().id(2000).title("item1").build()); 2808872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger subActions.add(new GuidedAction.Builder().id(2001).title("item2").build()); 2818872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger actions.add(new GuidedAction.Builder().id(1000).subActions(subActions) 2828872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger .title("list").build()); 2838872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger return null; 2848872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger } 2858872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger }).when(first).onCreateActions(any(List.class), any(Bundle.class)); 2868872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger doAnswer(new Answer<Boolean>() { 2878872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger public Boolean answer(InvocationOnMock invocation) { 2888872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger GuidedStepTestSupportFragment.Provider obj = (GuidedStepTestSupportFragment.Provider) 2898872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger invocation.getMock(); 2908872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger GuidedAction action = (GuidedAction) invocation.getArguments()[0]; 2918872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger if (action.getId() == 2000) { 2928872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger return true; 2938872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger } else if (action.getId() == 2001) { 2948872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger GuidedStepSupportFragment.add(obj.getFragmentManager(), 2958872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger new GuidedStepTestSupportFragment("second")); 2968872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger return false; 2978872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger } 2988872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger return false; 2998872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger } 3008872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger }).when(first).onSubGuidedActionClicked(any(GuidedAction.class)); 3018872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 3028872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger GuidedStepTestSupportFragment.Provider second = mockProvider("second"); 3038872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 3048872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger final GuidedStepSupportFragmentTestActivity activity = launchTestActivity("first"); 3058872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 3066ba30b85ddfbe37c338ee8dde3dd33322eb38d47Behdad Esfahbod // after clicked, it sub actions list should expand 3078872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger View viewForList = first.getFragment().getActionItemView(0); 3088872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger assertTrue(viewForList.hasFocus()); 3098872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger sendKey(KeyEvent.KEYCODE_DPAD_CENTER); 3108872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger PollingCheck.waitFor(new ExpandTransitionFinish(first)); 3118872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger assertFalse(viewForList.hasFocus()); 3128872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 3138872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger sendKey(KeyEvent.KEYCODE_DPAD_CENTER); 3148872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger ArgumentCaptor<GuidedAction> actionCapture = ArgumentCaptor.forClass(GuidedAction.class); 3158872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, times(1)).onSubGuidedActionClicked(actionCapture.capture()); 3166ba30b85ddfbe37c338ee8dde3dd33322eb38d47Behdad Esfahbod assertEquals(2000, actionCapture.getValue().getId()); 3178872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger // after clicked a sub action, it sub actions list should close 3188872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger PollingCheck.waitFor(new ExpandTransitionFinish(first)); 3198872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger assertTrue(viewForList.hasFocus()); 3206ba30b85ddfbe37c338ee8dde3dd33322eb38d47Behdad Esfahbod 3218872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger sendKey(KeyEvent.KEYCODE_DPAD_CENTER); 3228872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger PollingCheck.waitFor(new ExpandTransitionFinish(first)); 3238872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 3246ba30b85ddfbe37c338ee8dde3dd33322eb38d47Behdad Esfahbod assertFalse(viewForList.hasFocus()); 3258872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger sendKey(KeyEvent.KEYCODE_DPAD_DOWN); 3268872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger sendKey(KeyEvent.KEYCODE_DPAD_CENTER); 3278872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger ArgumentCaptor<GuidedAction> actionCapture2 = ArgumentCaptor.forClass(GuidedAction.class); 3288872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, times(2)).onSubGuidedActionClicked(actionCapture2.capture()); 3298872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger assertEquals(2001, actionCapture2.getValue().getId()); 3308872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 3318872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger PollingCheck.waitFor(new EnterTransitionFinish(second)); 3328872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(second, times(1)).onCreateView(any(LayoutInflater.class), any(ViewGroup.class), 3338872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger any(Bundle.class), any(View.class)); 3348872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 3356ba30b85ddfbe37c338ee8dde3dd33322eb38d47Behdad Esfahbod // test expand sub action when return to first fragment 3368872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger expandSubActionInOnCreateView[0] = true; 3378872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger sendKey(KeyEvent.KEYCODE_BACK); 3388872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger PollingCheck.waitFor(new EnterTransitionFinish(first)); 3396ba30b85ddfbe37c338ee8dde3dd33322eb38d47Behdad Esfahbod verify(first, times(2)).onCreateView(any(LayoutInflater.class), any(ViewGroup.class), 3408872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger any(Bundle.class), any(View.class)); 3418872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger assertTrue(first.getFragment().isExpanded()); 3428872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 3438872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger sendKey(KeyEvent.KEYCODE_BACK); 3448872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger PollingCheck.waitFor(new ExpandTransitionFinish(first)); 3458872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger assertFalse(first.getFragment().isExpanded()); 3468872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger 3478872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger sendKey(KeyEvent.KEYCODE_BACK); 3488872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger PollingCheck.waitFor(new PollingCheck.ActivityDestroy(activity)); 3498872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger verify(first, timeout(ON_DESTROY_TIMEOUT).times(1)).onDestroy(); 3506ba30b85ddfbe37c338ee8dde3dd33322eb38d47Behdad Esfahbod } 3518872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger} 3528872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger