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 import static org.mockito.Mockito.mock; 23 import static org.mockito.Mockito.when; 24 25 import android.app.admin.DevicePolicyManager; 26 import android.content.Context; 27 import android.content.pm.ResolveInfo; 28 29 import androidx.test.filters.MediumTest; 30 import androidx.test.platform.app.InstrumentationRegistry; 31 import androidx.test.runner.AndroidJUnit4; 32 33 import com.android.documentsui.base.RootInfo; 34 import com.android.documentsui.base.State; 35 import com.android.documentsui.base.UserId; 36 import com.android.documentsui.testing.TestProvidersAccess; 37 import com.android.documentsui.testing.TestResolveInfo; 38 39 import org.junit.Before; 40 import org.junit.Test; 41 import org.junit.runner.RunWith; 42 43 import java.util.ArrayList; 44 import java.util.Collections; 45 import java.util.List; 46 47 /** 48 * An unit test for RootsFragment. 49 */ 50 @RunWith(AndroidJUnit4.class) 51 @MediumTest 52 public class RootsFragmentTest { 53 54 private Context mContext; 55 private DevicePolicyManager mDevicePolicyManager; 56 private RootsFragment mRootsFragment; 57 58 private static final String[] EXPECTED_SORTED_RESULT = { 59 TestProvidersAccess.RECENTS.title, 60 TestProvidersAccess.IMAGE.title, 61 TestProvidersAccess.VIDEO.title, 62 TestProvidersAccess.AUDIO.title, 63 TestProvidersAccess.DOCUMENT.title, 64 TestProvidersAccess.DOWNLOADS.title, 65 "" /* SpacerItem */, 66 TestProvidersAccess.EXTERNALSTORAGE.title, 67 TestProvidersAccess.HAMMY.title, 68 "" /* SpacerItem */, 69 TestProvidersAccess.INSPECTOR.title, 70 TestProvidersAccess.PICKLES.title}; 71 72 @Before setUp()73 public void setUp() { 74 mContext = mock(Context.class); 75 mDevicePolicyManager = mock(DevicePolicyManager.class); 76 when(mContext.getResources()).thenReturn( 77 InstrumentationRegistry.getInstrumentation().getTargetContext().getResources()); 78 when(mContext.getSystemService(Context.DEVICE_POLICY_SERVICE)) 79 .thenReturn(mDevicePolicyManager); 80 81 mRootsFragment = new RootsFragment(); 82 } 83 84 @Test testSortLoadResult_WithCorrectOrder()85 public void testSortLoadResult_WithCorrectOrder() { 86 List<Item> items = mRootsFragment.sortLoadResult( 87 mContext, 88 new State(), 89 createFakeRootInfoList(), 90 null /* excludePackage */, null /* handlerAppIntent */, new TestProvidersAccess(), 91 UserId.DEFAULT_USER, 92 Collections.singletonList(UserId.DEFAULT_USER), 93 /* maybeShowBadge */ false); 94 assertTrue(assertSortedResult(items)); 95 } 96 97 @Test testItemComparator_WithCorrectOrder()98 public void testItemComparator_WithCorrectOrder() { 99 final String testPackageName = "com.test1"; 100 final String errorTestPackageName = "com.test2"; 101 final RootsFragment.ItemComparator comp = new RootsFragment.ItemComparator(testPackageName); 102 final List<Item> rootList = new ArrayList<>(); 103 rootList.add(new RootItem(TestProvidersAccess.HAMMY, null /* actionHandler */, 104 errorTestPackageName, /* maybeShowBadge= */ false)); 105 rootList.add(new RootItem(TestProvidersAccess.INSPECTOR, null /* actionHandler */, 106 errorTestPackageName, /* maybeShowBadge= */ false)); 107 rootList.add(new RootItem(TestProvidersAccess.PICKLES, null /* actionHandler */, 108 testPackageName, /* maybeShowBadge= */ false)); 109 Collections.sort(rootList, comp); 110 111 assertEquals(rootList.get(0).title, TestProvidersAccess.PICKLES.title); 112 assertEquals(rootList.get(1).title, TestProvidersAccess.HAMMY.title); 113 assertEquals(rootList.get(2).title, TestProvidersAccess.INSPECTOR.title); 114 } 115 116 @Test testItemComparator_differentItemTypes_WithCorrectOrder()117 public void testItemComparator_differentItemTypes_WithCorrectOrder() { 118 final String testPackageName = "com.test1"; 119 final RootsFragment.ItemComparator comp = new RootsFragment.ItemComparator(testPackageName); 120 final List<Item> rootList = new ArrayList<>(); 121 rootList.add(new RootItem(TestProvidersAccess.HAMMY, null /* actionHandler */, 122 testPackageName, /* maybeShowBadge= */ false)); 123 124 final ResolveInfo info = TestResolveInfo.create(); 125 info.activityInfo.packageName = testPackageName; 126 127 rootList.add(new AppItem(info, TestProvidersAccess.PICKLES.title, UserId.DEFAULT_USER, 128 null /* actionHandler */)); 129 rootList.add(new RootAndAppItem(TestProvidersAccess.INSPECTOR, info, 130 null /* actionHandler */, /* maybeShowBadge= */ false)); 131 132 Collections.sort(rootList, comp); 133 134 assertEquals(rootList.get(0).title, TestProvidersAccess.HAMMY.title); 135 assertEquals(rootList.get(1).title, TestProvidersAccess.INSPECTOR.title); 136 assertEquals(rootList.get(2).title, TestProvidersAccess.PICKLES.title); 137 } 138 assertSortedResult(List<Item> items)139 private boolean assertSortedResult(List<Item> items) { 140 for (int i = 0; i < items.size(); i++) { 141 Item item = items.get(i); 142 if (item instanceof RootItem) { 143 assertEquals(EXPECTED_SORTED_RESULT[i], ((RootItem) item).root.title); 144 } else if (item instanceof SpacerItem) { 145 assertTrue(EXPECTED_SORTED_RESULT[i].isEmpty()); 146 } else { 147 return false; 148 } 149 } 150 return true; 151 } 152 createFakeRootInfoList()153 private List<RootInfo> createFakeRootInfoList() { 154 final List<RootInfo> fakeRootInfoList = new ArrayList<>(); 155 fakeRootInfoList.add(TestProvidersAccess.PICKLES); 156 fakeRootInfoList.add(TestProvidersAccess.HAMMY); 157 fakeRootInfoList.add(TestProvidersAccess.INSPECTOR); 158 fakeRootInfoList.add(TestProvidersAccess.DOWNLOADS); 159 fakeRootInfoList.add(TestProvidersAccess.AUDIO); 160 fakeRootInfoList.add(TestProvidersAccess.VIDEO); 161 fakeRootInfoList.add(TestProvidersAccess.RECENTS); 162 fakeRootInfoList.add(TestProvidersAccess.IMAGE); 163 fakeRootInfoList.add(TestProvidersAccess.EXTERNALSTORAGE); 164 fakeRootInfoList.add(TestProvidersAccess.DOCUMENT); 165 return fakeRootInfoList; 166 } 167 } 168