1 /* 2 * Copyright (C) 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.documentsui.sidebar; 18 19 import static junit.framework.Assert.assertTrue; 20 21 import static org.junit.Assert.assertEquals; 22 23 import android.content.pm.ResolveInfo; 24 25 import androidx.test.filters.MediumTest; 26 import androidx.test.platform.app.InstrumentationRegistry; 27 import androidx.test.runner.AndroidJUnit4; 28 29 import com.android.documentsui.base.RootInfo; 30 import com.android.documentsui.base.State; 31 import com.android.documentsui.base.UserId; 32 import com.android.documentsui.testing.TestProvidersAccess; 33 import com.android.documentsui.testing.TestResolveInfo; 34 35 import org.junit.Before; 36 import org.junit.Test; 37 import org.junit.runner.RunWith; 38 39 import java.util.ArrayList; 40 import java.util.Collections; 41 import java.util.List; 42 43 /** 44 * An unit test for RootsFragment. 45 */ 46 @RunWith(AndroidJUnit4.class) 47 @MediumTest 48 public class RootsFragmentTest { 49 50 private RootsFragment mRootsFragment; 51 52 private static final String[] EXPECTED_SORTED_RESULT = { 53 TestProvidersAccess.RECENTS.title, 54 TestProvidersAccess.IMAGE.title, 55 TestProvidersAccess.VIDEO.title, 56 TestProvidersAccess.AUDIO.title, 57 TestProvidersAccess.DOCUMENT.title, 58 TestProvidersAccess.DOWNLOADS.title, 59 "" /* SpacerItem */, 60 TestProvidersAccess.EXTERNALSTORAGE.title, 61 TestProvidersAccess.HAMMY.title, 62 "" /* SpacerItem */, 63 TestProvidersAccess.INSPECTOR.title, 64 TestProvidersAccess.PICKLES.title}; 65 66 @Before setUp()67 public void setUp() { 68 mRootsFragment = new RootsFragment(); 69 } 70 71 @Test testSortLoadResult_WithCorrectOrder()72 public void testSortLoadResult_WithCorrectOrder() { 73 List<Item> items = mRootsFragment.sortLoadResult( 74 InstrumentationRegistry.getInstrumentation().getTargetContext().getResources(), 75 new State(), 76 createFakeRootInfoList(), 77 null /* excludePackage */, null /* handlerAppIntent */, new TestProvidersAccess(), 78 UserId.DEFAULT_USER, 79 Collections.singletonList(UserId.DEFAULT_USER), 80 /* maybeShowBadge */ false); 81 assertTrue(assertSortedResult(items)); 82 } 83 84 @Test testItemComparator_WithCorrectOrder()85 public void testItemComparator_WithCorrectOrder() { 86 final String testPackageName = "com.test1"; 87 final String errorTestPackageName = "com.test2"; 88 final RootsFragment.ItemComparator comp = new RootsFragment.ItemComparator(testPackageName); 89 final List<Item> rootList = new ArrayList<>(); 90 rootList.add(new RootItem(TestProvidersAccess.HAMMY, null /* actionHandler */, 91 errorTestPackageName, /* maybeShowBadge= */ false)); 92 rootList.add(new RootItem(TestProvidersAccess.INSPECTOR, null /* actionHandler */, 93 errorTestPackageName, /* maybeShowBadge= */ false)); 94 rootList.add(new RootItem(TestProvidersAccess.PICKLES, null /* actionHandler */, 95 testPackageName, /* maybeShowBadge= */ false)); 96 Collections.sort(rootList, comp); 97 98 assertEquals(rootList.get(0).title, TestProvidersAccess.PICKLES.title); 99 assertEquals(rootList.get(1).title, TestProvidersAccess.HAMMY.title); 100 assertEquals(rootList.get(2).title, TestProvidersAccess.INSPECTOR.title); 101 } 102 103 @Test testItemComparator_differentItemTypes_WithCorrectOrder()104 public void testItemComparator_differentItemTypes_WithCorrectOrder() { 105 final String testPackageName = "com.test1"; 106 final RootsFragment.ItemComparator comp = new RootsFragment.ItemComparator(testPackageName); 107 final List<Item> rootList = new ArrayList<>(); 108 rootList.add(new RootItem(TestProvidersAccess.HAMMY, null /* actionHandler */, 109 testPackageName, /* maybeShowBadge= */ false)); 110 111 final ResolveInfo info = TestResolveInfo.create(); 112 info.activityInfo.packageName = testPackageName; 113 114 rootList.add(new AppItem(info, TestProvidersAccess.PICKLES.title, UserId.DEFAULT_USER, 115 null /* actionHandler */)); 116 rootList.add(new RootAndAppItem(TestProvidersAccess.INSPECTOR, info, 117 null /* actionHandler */, /* maybeShowBadge= */ false)); 118 119 Collections.sort(rootList, comp); 120 121 assertEquals(rootList.get(0).title, TestProvidersAccess.HAMMY.title); 122 assertEquals(rootList.get(1).title, TestProvidersAccess.INSPECTOR.title); 123 assertEquals(rootList.get(2).title, TestProvidersAccess.PICKLES.title); 124 } 125 assertSortedResult(List<Item> items)126 private boolean assertSortedResult(List<Item> items) { 127 for (int i = 0; i < items.size(); i++) { 128 Item item = items.get(i); 129 if (item instanceof RootItem) { 130 assertEquals(EXPECTED_SORTED_RESULT[i], ((RootItem) item).root.title); 131 } else if (item instanceof SpacerItem) { 132 assertTrue(EXPECTED_SORTED_RESULT[i].isEmpty()); 133 } else { 134 return false; 135 } 136 } 137 return true; 138 } 139 createFakeRootInfoList()140 private List<RootInfo> createFakeRootInfoList() { 141 final List<RootInfo> fakeRootInfoList = new ArrayList<>(); 142 fakeRootInfoList.add(TestProvidersAccess.PICKLES); 143 fakeRootInfoList.add(TestProvidersAccess.HAMMY); 144 fakeRootInfoList.add(TestProvidersAccess.INSPECTOR); 145 fakeRootInfoList.add(TestProvidersAccess.DOWNLOADS); 146 fakeRootInfoList.add(TestProvidersAccess.AUDIO); 147 fakeRootInfoList.add(TestProvidersAccess.VIDEO); 148 fakeRootInfoList.add(TestProvidersAccess.RECENTS); 149 fakeRootInfoList.add(TestProvidersAccess.IMAGE); 150 fakeRootInfoList.add(TestProvidersAccess.EXTERNALSTORAGE); 151 fakeRootInfoList.add(TestProvidersAccess.DOCUMENT); 152 return fakeRootInfoList; 153 } 154 } 155