1739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay/*
2739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay * Copyright (C) 2016 The Android Open Source Project
3739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay *
4739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay * Licensed under the Apache License, Version 2.0 (the "License");
5739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay * you may not use this file except in compliance with the License.
6739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay * You may obtain a copy of the License at
7739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay *
8739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay *      http://www.apache.org/licenses/LICENSE-2.0
9739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay *
10739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay * Unless required by applicable law or agreed to in writing, software
11739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay * distributed under the License is distributed on an "AS IS" BASIS,
12739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay * See the License for the specific language governing permissions and
14739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay * limitations under the License.
15739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay */
16739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay
17739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKaypackage com.android.documentsui;
18739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay
19f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tanimport static junit.framework.Assert.assertTrue;
20f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan
21988d8a354b00dce7e24deee187c08a4591956ac9Steve McKayimport static org.junit.Assert.assertEquals;
22988d8a354b00dce7e24deee187c08a4591956ac9Steve McKay
23739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKayimport android.content.Intent;
24f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tanimport android.net.Uri;
25739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKayimport android.os.Parcelable;
26f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tanimport android.provider.DocumentsContract;
271686883a8d049b399e34954a4feaa98490277ae8Garfield Tanimport android.provider.DocumentsContract.Path;
28988d8a354b00dce7e24deee187c08a4591956ac9Steve McKayimport android.support.test.filters.MediumTest;
29739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKayimport android.support.test.runner.AndroidJUnit4;
30739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay
31739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKayimport com.android.documentsui.base.DocumentStack;
32739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKayimport com.android.documentsui.base.RootInfo;
33739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKayimport com.android.documentsui.base.Shared;
34739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKayimport com.android.documentsui.dirlist.DocumentDetails;
35b6006b2ef723fdbb3fef3b4a350c8d363b127d0fSteve McKayimport com.android.documentsui.files.LauncherActivity;
36e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tanimport com.android.documentsui.sorting.SortDimension;
37e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tanimport com.android.documentsui.sorting.SortModel;
38f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tanimport com.android.documentsui.testing.DocumentStackAsserts;
39739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKayimport com.android.documentsui.testing.Roots;
40988d8a354b00dce7e24deee187c08a4591956ac9Steve McKayimport com.android.documentsui.testing.TestEnv;
41e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tanimport com.android.documentsui.testing.TestEventHandler;
429bd4099ee27f8302a06fc66980079f29127318f8Jon Mannimport com.android.documentsui.testing.TestProvidersAccess;
43739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay
44739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKayimport org.junit.Before;
45739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKayimport org.junit.Test;
46739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKayimport org.junit.runner.RunWith;
47739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay
481686883a8d049b399e34954a4feaa98490277ae8Garfield Tanimport java.util.Arrays;
491686883a8d049b399e34954a4feaa98490277ae8Garfield Tan
50c8889af6757ecb348fb8fd6dadf84d67d3478cbfSteve McKay/**
51c8889af6757ecb348fb8fd6dadf84d67d3478cbfSteve McKay * A unit test *for* AbstractActionHandler, not an abstract test baseclass.
52c8889af6757ecb348fb8fd6dadf84d67d3478cbfSteve McKay */
53739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay@RunWith(AndroidJUnit4.class)
54988d8a354b00dce7e24deee187c08a4591956ac9Steve McKay@MediumTest
55739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKaypublic class AbstractActionHandlerTest {
56739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay
57739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay    private TestActivity mActivity;
58988d8a354b00dce7e24deee187c08a4591956ac9Steve McKay    private TestEnv mEnv;
59739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay    private AbstractActionHandler<TestActivity> mHandler;
60739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay
61739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay    @Before
62739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay    public void setUp() {
63988d8a354b00dce7e24deee187c08a4591956ac9Steve McKay        mEnv = TestEnv.create();
64e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan        mActivity = TestActivity.create(mEnv);
65988d8a354b00dce7e24deee187c08a4591956ac9Steve McKay        mHandler = new AbstractActionHandler<TestActivity>(
66988d8a354b00dce7e24deee187c08a4591956ac9Steve McKay                mActivity,
67988d8a354b00dce7e24deee187c08a4591956ac9Steve McKay                mEnv.state,
682e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan                mEnv.providers,
69def4868b1e9ef8a5718c6bc2e165026cbe52b5daSteve McKay                mEnv.docs,
7063bf8135243605949a3bb140167ef91f5c6ae2aeGarfield Tan                mEnv.searchViewManager,
7130d8c7988e15336d995e4b5033ba533a8333446fJon Mann                mEnv::lookupExecutor,
7230d8c7988e15336d995e4b5033ba533a8333446fJon Mann                mEnv.injector) {
73739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay
74739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay            @Override
75739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay            public void openRoot(RootInfo root) {
76739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay                throw new UnsupportedOperationException();
77739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay            }
78739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay
79739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay            @Override
80d22cc1852ed3e028a37d713e41c57286d2e4c9f2Tomasz Mikolajewski            public boolean openDocument(DocumentDetails doc, @ViewType int type,
81d22cc1852ed3e028a37d713e41c57286d2e4c9f2Tomasz Mikolajewski                    @ViewType int fallback) {
82739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay                throw new UnsupportedOperationException();
83739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay            }
84988d8a354b00dce7e24deee187c08a4591956ac9Steve McKay
85988d8a354b00dce7e24deee187c08a4591956ac9Steve McKay            @Override
86988d8a354b00dce7e24deee187c08a4591956ac9Steve McKay            public void initLocation(Intent intent) {
87988d8a354b00dce7e24deee187c08a4591956ac9Steve McKay                throw new UnsupportedOperationException();
88988d8a354b00dce7e24deee187c08a4591956ac9Steve McKay            }
8992ae43d5d22331aad83e1a4302a7e1975f66354eSteve McKay
9092ae43d5d22331aad83e1a4302a7e1975f66354eSteve McKay            @Override
91f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan            protected void launchToDefaultLocation() {
92f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan                throw new UnsupportedOperationException();
93f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan            }
94739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay        };
95739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay    }
96739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay
97739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay    @Test
98739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay    public void testOpenNewWindow() {
99739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay        DocumentStack path = new DocumentStack(Roots.create("123"));
100739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay        mHandler.openInNewWindow(path);
101739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay
102739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay        Intent expected = LauncherActivity.createLaunchIntent(mActivity);
103739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay        expected.putExtra(Shared.EXTRA_STACK, (Parcelable) path);
104988d8a354b00dce7e24deee187c08a4591956ac9Steve McKay        Intent actual = mActivity.startActivity.getLastValue();
105988d8a354b00dce7e24deee187c08a4591956ac9Steve McKay        assertEquals(expected.toString(), actual.toString());
106739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay    }
1071686883a8d049b399e34954a4feaa98490277ae8Garfield Tan
1081686883a8d049b399e34954a4feaa98490277ae8Garfield Tan    @Test
1091686883a8d049b399e34954a4feaa98490277ae8Garfield Tan    public void testOpensContainerDocuments_jumpToNewLocation() throws Exception {
1107a4fa239abefd05d03d2e62c651d7b08f682d8b4Ben Lin        if (!mEnv.features.isLaunchToDocumentEnabled()) {
1117a4fa239abefd05d03d2e62c651d7b08f682d8b4Ben Lin            return;
1127a4fa239abefd05d03d2e62c651d7b08f682d8b4Ben Lin        }
1137a4fa239abefd05d03d2e62c651d7b08f682d8b4Ben Lin
1141686883a8d049b399e34954a4feaa98490277ae8Garfield Tan        mEnv.populateStack();
1151686883a8d049b399e34954a4feaa98490277ae8Garfield Tan
1161686883a8d049b399e34954a4feaa98490277ae8Garfield Tan        mEnv.searchViewManager.isSearching = true;
1172a837422d25b44f2847bc82e7c90b4e8fcde1518Garfield Tan        mEnv.docs.nextPath = new Path(
1189bd4099ee27f8302a06fc66980079f29127318f8Jon Mann                TestProvidersAccess.HOME.rootId,
1191686883a8d049b399e34954a4feaa98490277ae8Garfield Tan                Arrays.asList(TestEnv.FOLDER_1.documentId, TestEnv.FOLDER_2.documentId));
1201686883a8d049b399e34954a4feaa98490277ae8Garfield Tan        mEnv.docs.nextDocuments = Arrays.asList(TestEnv.FOLDER_1, TestEnv.FOLDER_2);
1211686883a8d049b399e34954a4feaa98490277ae8Garfield Tan
1221686883a8d049b399e34954a4feaa98490277ae8Garfield Tan        mHandler.openContainerDocument(TestEnv.FOLDER_2);
1231686883a8d049b399e34954a4feaa98490277ae8Garfield Tan
1241686883a8d049b399e34954a4feaa98490277ae8Garfield Tan        mEnv.beforeAsserts();
1251686883a8d049b399e34954a4feaa98490277ae8Garfield Tan
1262a837422d25b44f2847bc82e7c90b4e8fcde1518Garfield Tan        assertEquals(mEnv.docs.nextPath.getPath().size(), mEnv.state.stack.size());
1271686883a8d049b399e34954a4feaa98490277ae8Garfield Tan        assertEquals(TestEnv.FOLDER_2, mEnv.state.stack.peek());
1281686883a8d049b399e34954a4feaa98490277ae8Garfield Tan    }
1291686883a8d049b399e34954a4feaa98490277ae8Garfield Tan
1301686883a8d049b399e34954a4feaa98490277ae8Garfield Tan
1311686883a8d049b399e34954a4feaa98490277ae8Garfield Tan    @Test
1321686883a8d049b399e34954a4feaa98490277ae8Garfield Tan    public void testOpensContainerDocuments_pushToRootDoc_NoFindPathSupport() throws Exception {
1331686883a8d049b399e34954a4feaa98490277ae8Garfield Tan        mEnv.populateStack();
1341686883a8d049b399e34954a4feaa98490277ae8Garfield Tan
1351686883a8d049b399e34954a4feaa98490277ae8Garfield Tan        mEnv.searchViewManager.isSearching = true;
1361686883a8d049b399e34954a4feaa98490277ae8Garfield Tan        mEnv.docs.nextDocuments = Arrays.asList(TestEnv.FOLDER_1, TestEnv.FOLDER_2);
1371686883a8d049b399e34954a4feaa98490277ae8Garfield Tan
1381686883a8d049b399e34954a4feaa98490277ae8Garfield Tan        mHandler.openContainerDocument(TestEnv.FOLDER_2);
1391686883a8d049b399e34954a4feaa98490277ae8Garfield Tan
1401686883a8d049b399e34954a4feaa98490277ae8Garfield Tan        mEnv.beforeAsserts();
1411686883a8d049b399e34954a4feaa98490277ae8Garfield Tan
1421686883a8d049b399e34954a4feaa98490277ae8Garfield Tan        assertEquals(2, mEnv.state.stack.size());
1431686883a8d049b399e34954a4feaa98490277ae8Garfield Tan        assertEquals(TestEnv.FOLDER_2, mEnv.state.stack.pop());
1441686883a8d049b399e34954a4feaa98490277ae8Garfield Tan        assertEquals(TestEnv.FOLDER_0, mEnv.state.stack.pop());
1451686883a8d049b399e34954a4feaa98490277ae8Garfield Tan    }
146f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan
147f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan    @Test
148db7a0e72cf791ecc9529d4ad1023393dbdd7f3e9Ben Lin    public void testOpensDocument_AssertionErrorIfAlreadyInStack() throws Exception {
149db7a0e72cf791ecc9529d4ad1023393dbdd7f3e9Ben Lin        mEnv.populateStack();
150db7a0e72cf791ecc9529d4ad1023393dbdd7f3e9Ben Lin        boolean threw = false;
151db7a0e72cf791ecc9529d4ad1023393dbdd7f3e9Ben Lin        try {
152db7a0e72cf791ecc9529d4ad1023393dbdd7f3e9Ben Lin            mEnv.state.stack.push(TestEnv.FOLDER_0);
153db7a0e72cf791ecc9529d4ad1023393dbdd7f3e9Ben Lin        } catch (AssertionError e) {
154db7a0e72cf791ecc9529d4ad1023393dbdd7f3e9Ben Lin            threw = true;
155db7a0e72cf791ecc9529d4ad1023393dbdd7f3e9Ben Lin        }
156db7a0e72cf791ecc9529d4ad1023393dbdd7f3e9Ben Lin        assertTrue(threw);
157db7a0e72cf791ecc9529d4ad1023393dbdd7f3e9Ben Lin    }
158db7a0e72cf791ecc9529d4ad1023393dbdd7f3e9Ben Lin
159db7a0e72cf791ecc9529d4ad1023393dbdd7f3e9Ben Lin    @Test
160f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan    public void testLaunchToDocuments() throws Exception {
1617a4fa239abefd05d03d2e62c651d7b08f682d8b4Ben Lin        if (!mEnv.features.isLaunchToDocumentEnabled()) {
1627a4fa239abefd05d03d2e62c651d7b08f682d8b4Ben Lin            return;
1637a4fa239abefd05d03d2e62c651d7b08f682d8b4Ben Lin        }
1647a4fa239abefd05d03d2e62c651d7b08f682d8b4Ben Lin
165f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan        mEnv.docs.nextIsDocumentsUri = true;
166f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan        mEnv.docs.nextPath = new Path(
1679bd4099ee27f8302a06fc66980079f29127318f8Jon Mann                TestProvidersAccess.HOME.rootId,
168f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan                Arrays.asList(
169f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan                        TestEnv.FOLDER_0.documentId,
170f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan                        TestEnv.FOLDER_1.documentId,
171f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan                        TestEnv.FILE_GIF.documentId));
172f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan        mEnv.docs.nextDocuments =
173f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan                Arrays.asList(TestEnv.FOLDER_0, TestEnv.FOLDER_1, TestEnv.FILE_GIF);
174f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan
175f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan        mActivity.refreshCurrentRootAndDirectory.assertNotCalled();
176f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan        assertTrue(mHandler.launchToDocument(TestEnv.FILE_GIF.derivedUri));
177f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan
178f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan        mEnv.beforeAsserts();
179f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan
1809bd4099ee27f8302a06fc66980079f29127318f8Jon Mann        DocumentStackAsserts.assertEqualsTo(mEnv.state.stack, TestProvidersAccess.HOME,
181f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan                Arrays.asList(TestEnv.FOLDER_0, TestEnv.FOLDER_1));
182f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan        mActivity.refreshCurrentRootAndDirectory.assertCalled();
183f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan    }
184f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan
185f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan    @Test
186f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan    public void testLaunchToDocuments_convertsTreeUriToDocumentUri() throws Exception {
1877a4fa239abefd05d03d2e62c651d7b08f682d8b4Ben Lin        if (!mEnv.features.isLaunchToDocumentEnabled()) {
1887a4fa239abefd05d03d2e62c651d7b08f682d8b4Ben Lin            return;
1897a4fa239abefd05d03d2e62c651d7b08f682d8b4Ben Lin        }
1907a4fa239abefd05d03d2e62c651d7b08f682d8b4Ben Lin
191f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan        mEnv.docs.nextIsDocumentsUri = true;
192f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan        mEnv.docs.nextPath = new Path(
1939bd4099ee27f8302a06fc66980079f29127318f8Jon Mann                TestProvidersAccess.HOME.rootId,
194f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan                Arrays.asList(
195f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan                        TestEnv.FOLDER_0.documentId,
196f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan                        TestEnv.FOLDER_1.documentId,
197f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan                        TestEnv.FILE_GIF.documentId));
198f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan        mEnv.docs.nextDocuments =
199f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan                Arrays.asList(TestEnv.FOLDER_0, TestEnv.FOLDER_1, TestEnv.FILE_GIF);
200f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan
201f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan        final Uri treeBaseUri = DocumentsContract.buildTreeDocumentUri(
2029bd4099ee27f8302a06fc66980079f29127318f8Jon Mann                TestProvidersAccess.HOME.authority, TestEnv.FOLDER_0.documentId);
203f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan        final Uri treeDocUri = DocumentsContract.buildDocumentUriUsingTree(
204f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan                treeBaseUri, TestEnv.FILE_GIF.documentId);
205f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan        assertTrue(mHandler.launchToDocument(treeDocUri));
206f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan
207f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan        mEnv.beforeAsserts();
208f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan
2099bd4099ee27f8302a06fc66980079f29127318f8Jon Mann        DocumentStackAsserts.assertEqualsTo(mEnv.state.stack, TestProvidersAccess.HOME,
210f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan                Arrays.asList(TestEnv.FOLDER_0, TestEnv.FOLDER_1));
211f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan        mEnv.docs.lastUri.assertLastArgument(TestEnv.FILE_GIF.derivedUri);
212f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan        mActivity.refreshCurrentRootAndDirectory.assertCalled();
213f8969d63aa9e6d67e594997080f883ec84dfac71Garfield Tan    }
214e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan
215e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan    @Test
216e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan    public void testLoadChildrenDocuments() throws Exception {
2179bd4099ee27f8302a06fc66980079f29127318f8Jon Mann        mEnv.state.stack.changeRoot(TestProvidersAccess.HOME);
218e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan        mEnv.state.stack.push(TestEnv.FOLDER_0);
219e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan
220e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan        mEnv.state.sortModel.sortByUser(
221e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan                SortModel.SORT_DIMENSION_ID_TITLE, SortDimension.SORT_DIRECTION_ASCENDING);
222e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan
2232e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan        mEnv.mockProviders.get(TestProvidersAccess.HOME.authority)
224e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan                .setNextChildDocumentsReturns(TestEnv.FILE_APK, TestEnv.FILE_GIF);
225e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan
226e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan        mHandler.loadDocumentsForCurrentStack();
227e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan        mActivity.loaderManager.runAsyncTaskLoader(AbstractActionHandler.LOADER_ID);
228e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan
229e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan        assertEquals(2, mEnv.model.getItemCount());
230e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan        String[] modelIds = mEnv.model.getModelIds();
231e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan        assertEquals(TestEnv.FILE_APK, mEnv.model.getDocument(modelIds[0]));
232e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan        assertEquals(TestEnv.FILE_GIF, mEnv.model.getDocument(modelIds[1]));
233e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan    }
234e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan
235e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan    @Test
236e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan    public void testLoadChildrenDocuments_failsWithNonRecentsAndEmptyStack() throws Exception {
2379bd4099ee27f8302a06fc66980079f29127318f8Jon Mann        mEnv.state.stack.changeRoot(TestProvidersAccess.HOME);
238e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan
2392e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan        mEnv.mockProviders.get(TestProvidersAccess.HOME.authority)
240e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan                .setNextChildDocumentsReturns(TestEnv.FILE_APK, TestEnv.FILE_GIF);
241e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan
242e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan        TestEventHandler<Model.Update> listener = new TestEventHandler<>();
243e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan        mEnv.model.addUpdateListener(listener::accept);
244e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan
245e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan        mHandler.loadDocumentsForCurrentStack();
246e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan
247e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan        assertTrue(listener.getLastValue().hasException());
248e967033315ed64bca8c89d601d187fd12754f1fbGarfield Tan    }
249739f94ba0dc9be264d9596dac551fd63082d2fddSteve McKay}
250