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