From 6bbf6004f8c746cc50c622ec1759f77ea76af9ef Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Wed, 17 Apr 2019 18:38:52 -0700 Subject: Removing ShortcutInfoCompat and directly using ShortcutInfo Change-Id: I2842689e192a206c0d31558c8126eae1c7904598 --- .../launcher3/config/FlagOverrideSampleTest.java | 1 - .../launcher3/model/GridSizeMigrationTaskTest.java | 10 +- .../launcher3/popup/PopupPopulatorTest.java | 147 +++++++++++++++++++++ 3 files changed, 154 insertions(+), 4 deletions(-) create mode 100644 robolectric_tests/src/com/android/launcher3/popup/PopupPopulatorTest.java (limited to 'robolectric_tests') diff --git a/robolectric_tests/src/com/android/launcher3/config/FlagOverrideSampleTest.java b/robolectric_tests/src/com/android/launcher3/config/FlagOverrideSampleTest.java index ae81ff252..135134816 100644 --- a/robolectric_tests/src/com/android/launcher3/config/FlagOverrideSampleTest.java +++ b/robolectric_tests/src/com/android/launcher3/config/FlagOverrideSampleTest.java @@ -22,7 +22,6 @@ public class FlagOverrideSampleTest { public final FlagOverrideRule flags = new FlagOverrideRule(); @FlagOverride(key = "EXAMPLE_FLAG", value = true) - @FlagOverride(key = "QUICK_SWITCH", value = false) @Test public void withFlagOn() { assertTrue(FeatureFlags.EXAMPLE_FLAG.get()); diff --git a/robolectric_tests/src/com/android/launcher3/model/GridSizeMigrationTaskTest.java b/robolectric_tests/src/com/android/launcher3/model/GridSizeMigrationTaskTest.java index ce07a273f..53f6a06fd 100644 --- a/robolectric_tests/src/com/android/launcher3/model/GridSizeMigrationTaskTest.java +++ b/robolectric_tests/src/com/android/launcher3/model/GridSizeMigrationTaskTest.java @@ -10,8 +10,8 @@ import android.graphics.Point; import com.android.launcher3.InvariantDeviceProfile; import com.android.launcher3.LauncherSettings; +import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.config.FlagOverrideRule; -import com.android.launcher3.config.FlagOverrideRule.FlagOverride; import com.android.launcher3.model.GridSizeMigrationTask.MultiStepMigrationTask; import com.android.launcher3.util.IntArray; @@ -210,9 +210,11 @@ public class GridSizeMigrationTaskTest extends BaseGridChangesTestCase { }}); } - @FlagOverride(key = "QSB_ON_FIRST_SCREEN", value = true) @Test public void testWorkspace_first_row_blocked() throws Exception { + if (!FeatureFlags.QSB_ON_FIRST_SCREEN) { + return; + } // The first screen has one item on the 4th column which needs moving, as the first row // will be kept empty. int[][][] ids = createGrid(new int[][][]{{ @@ -236,9 +238,11 @@ public class GridSizeMigrationTaskTest extends BaseGridChangesTestCase { }}); } - @FlagOverride(key = "QSB_ON_FIRST_SCREEN", value = true) @Test public void testWorkspace_items_moved_to_empty_first_row() throws Exception { + if (!FeatureFlags.QSB_ON_FIRST_SCREEN) { + return; + } // Items will get moved to the next screen to keep the first screen empty. int[][][] ids = createGrid(new int[][][]{{ { -1, -1, -1, -1}, diff --git a/robolectric_tests/src/com/android/launcher3/popup/PopupPopulatorTest.java b/robolectric_tests/src/com/android/launcher3/popup/PopupPopulatorTest.java new file mode 100644 index 000000000..83bf7dac8 --- /dev/null +++ b/robolectric_tests/src/com/android/launcher3/popup/PopupPopulatorTest.java @@ -0,0 +1,147 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3.popup; + +import static com.android.launcher3.popup.PopupPopulator.MAX_SHORTCUTS; +import static com.android.launcher3.popup.PopupPopulator.NUM_DYNAMIC; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.spy; + +import android.content.pm.ShortcutInfo; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * Tests the sorting and filtering of shortcuts in {@link PopupPopulator}. + */ +@RunWith(RobolectricTestRunner.class) +public class PopupPopulatorTest { + + @Test + public void testSortAndFilterShortcuts() { + filterShortcutsAndAssertNumStaticAndDynamic(createShortcutsList(3, 0), 3, 0); + filterShortcutsAndAssertNumStaticAndDynamic(createShortcutsList(0, 3), 0, 3); + filterShortcutsAndAssertNumStaticAndDynamic(createShortcutsList(5, 0), MAX_SHORTCUTS, 0); + filterShortcutsAndAssertNumStaticAndDynamic(createShortcutsList(0, 5), 0, MAX_SHORTCUTS); + filterShortcutsAndAssertNumStaticAndDynamic(createShortcutsList(3, 3), + MAX_SHORTCUTS - NUM_DYNAMIC, NUM_DYNAMIC); + filterShortcutsAndAssertNumStaticAndDynamic(createShortcutsList(5, 5), + MAX_SHORTCUTS - NUM_DYNAMIC, NUM_DYNAMIC); + filterShortcutsAndAssertNumStaticAndDynamic(createShortcutsList(5, 1), MAX_SHORTCUTS - 1, 1); + filterShortcutsAndAssertNumStaticAndDynamic(createShortcutsList(1, 5), 1, MAX_SHORTCUTS - 1); + filterShortcutsAndAssertNumStaticAndDynamic(createShortcutsList(5, 3), + MAX_SHORTCUTS - NUM_DYNAMIC, NUM_DYNAMIC); + filterShortcutsAndAssertNumStaticAndDynamic(createShortcutsList(3, 5), + MAX_SHORTCUTS - NUM_DYNAMIC, NUM_DYNAMIC); + } + + @Test + public void testDeDupeShortcutId() { + // Successfully remove one of the shortcuts + filterShortcutsAndAssertNumStaticAndDynamic(createShortcutsList(3, 0), 2, 0, generateId(true, 1)); + filterShortcutsAndAssertNumStaticAndDynamic(createShortcutsList(0, 3), 0, 2, generateId(false, 1)); + filterShortcutsAndAssertNumStaticAndDynamic(createShortcutsList(2, 2), 2, 1, generateId(false, 1)); + filterShortcutsAndAssertNumStaticAndDynamic(createShortcutsList(2, 2), 1, 2, generateId(true, 1)); + // Successfully keep all shortcuts when id doesn't exist + filterShortcutsAndAssertNumStaticAndDynamic(createShortcutsList(3, 0), 3, 0, generateId(false, 1)); + filterShortcutsAndAssertNumStaticAndDynamic(createShortcutsList(3, 0), 3, 0, generateId(true, 4)); + filterShortcutsAndAssertNumStaticAndDynamic(createShortcutsList(2, 2), 2, 2, generateId(false, 4)); + filterShortcutsAndAssertNumStaticAndDynamic(createShortcutsList(2, 2), 2, 2, generateId(true, 4)); + } + + private String generateId(boolean isStatic, int rank) { + return (isStatic ? "static" : "dynamic") + rank; + } + + private void filterShortcutsAndAssertNumStaticAndDynamic( + List shortcuts, int expectedStatic, int expectedDynamic) { + filterShortcutsAndAssertNumStaticAndDynamic(shortcuts, expectedStatic, expectedDynamic, null); + } + + private void filterShortcutsAndAssertNumStaticAndDynamic(List shortcuts, + int expectedStatic, int expectedDynamic, String shortcutIdToRemove) { + Collections.shuffle(shortcuts); + List filteredShortcuts = PopupPopulator.sortAndFilterShortcuts( + shortcuts, shortcutIdToRemove); + assertIsSorted(filteredShortcuts); + + int numStatic = 0; + int numDynamic = 0; + for (ShortcutInfo shortcut : filteredShortcuts) { + if (shortcut.isDeclaredInManifest()) { + numStatic++; + } + if (shortcut.isDynamic()) { + numDynamic++; + } + } + assertEquals(expectedStatic, numStatic); + assertEquals(expectedDynamic, numDynamic); + } + + private void assertIsSorted(List shortcuts) { + int lastStaticRank = -1; + int lastDynamicRank = -1; + boolean hasSeenDynamic = false; + for (ShortcutInfo shortcut : shortcuts) { + int rank = shortcut.getRank(); + if (shortcut.isDeclaredInManifest()) { + assertFalse("Static shortcuts should come before all dynamic shortcuts.", + hasSeenDynamic); + assertTrue(rank > lastStaticRank); + lastStaticRank = rank; + } + if (shortcut.isDynamic()) { + hasSeenDynamic = true; + assertTrue(rank > lastDynamicRank); + lastDynamicRank = rank; + } + } + } + + private List createShortcutsList(int numStatic, int numDynamic) { + List shortcuts = new ArrayList<>(); + for (int i = 0; i < numStatic; i++) { + shortcuts.add(createInfo(true, i)); + } + for (int i = 0; i < numDynamic; i++) { + shortcuts.add(createInfo(false, i)); + } + return shortcuts; + } + + private ShortcutInfo createInfo(boolean isStatic, int rank) { + ShortcutInfo info = spy(new ShortcutInfo.Builder( + RuntimeEnvironment.application, generateId(isStatic, rank)) + .setRank(rank) + .build()); + doReturn(isStatic).when(info).isDeclaredInManifest(); + doReturn(!isStatic).when(info).isDynamic(); + return info; + } +} \ No newline at end of file -- cgit v1.2.3