mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-03 17:36:49 +00:00
Updating Robolectric tests
> Adding multi-thread support > Simulating actual loader loading flow > Moving some android tests to robolectic Change-Id: Ie17a448f20e8a4b1f18ecc33d22054bbf9e18729
This commit is contained in:
@@ -4,54 +4,70 @@ import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Mockito.any;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Rect;
|
||||
import android.util.Pair;
|
||||
|
||||
import com.android.launcher3.InvariantDeviceProfile;
|
||||
import com.android.launcher3.ItemInfo;
|
||||
import com.android.launcher3.LauncherAppState;
|
||||
import com.android.launcher3.LauncherSettings;
|
||||
import com.android.launcher3.LauncherSettings.Favorites;
|
||||
import com.android.launcher3.WorkspaceItemInfo;
|
||||
import com.android.launcher3.model.BgDataModel.Callbacks;
|
||||
import com.android.launcher3.util.ContentWriter;
|
||||
import com.android.launcher3.util.GridOccupancy;
|
||||
import com.android.launcher3.util.IntArray;
|
||||
import com.android.launcher3.util.IntSparseArrayMap;
|
||||
import com.android.launcher3.util.LauncherModelHelper;
|
||||
import com.android.launcher3.util.LauncherRoboTestRunner;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.annotation.LooperMode;
|
||||
import org.robolectric.annotation.LooperMode.Mode;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
/**
|
||||
* Tests for {@link AddWorkspaceItemsTask}
|
||||
*/
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class AddWorkspaceItemsTaskTest extends BaseModelUpdateTaskTestCase {
|
||||
@RunWith(LauncherRoboTestRunner.class)
|
||||
@LooperMode(Mode.PAUSED)
|
||||
public class AddWorkspaceItemsTaskTest {
|
||||
|
||||
private final ComponentName mComponent1 = new ComponentName("a", "b");
|
||||
private final ComponentName mComponent2 = new ComponentName("b", "b");
|
||||
|
||||
private IntArray existingScreens;
|
||||
private IntArray newScreens;
|
||||
private IntSparseArrayMap<GridOccupancy> screenOccupancy;
|
||||
private Context mTargetContext;
|
||||
private InvariantDeviceProfile mIdp;
|
||||
private LauncherAppState mAppState;
|
||||
private LauncherModelHelper mModelHelper;
|
||||
|
||||
private IntArray mExistingScreens;
|
||||
private IntArray mNewScreens;
|
||||
private IntSparseArrayMap<GridOccupancy> mScreenOccupancy;
|
||||
|
||||
@Before
|
||||
public void initData() throws Exception {
|
||||
existingScreens = new IntArray();
|
||||
screenOccupancy = new IntSparseArrayMap<>();
|
||||
newScreens = new IntArray();
|
||||
public void setup() {
|
||||
mModelHelper = new LauncherModelHelper();
|
||||
mTargetContext = RuntimeEnvironment.application;
|
||||
mIdp = InvariantDeviceProfile.INSTANCE.get(mTargetContext);
|
||||
mIdp.numColumns = mIdp.numRows = 5;
|
||||
mAppState = LauncherAppState.getInstance(mTargetContext);
|
||||
|
||||
idp.numColumns = 5;
|
||||
idp.numRows = 5;
|
||||
mExistingScreens = new IntArray();
|
||||
mScreenOccupancy = new IntSparseArrayMap<>();
|
||||
mNewScreens = new IntArray();
|
||||
}
|
||||
|
||||
private AddWorkspaceItemsTask newTask(ItemInfo... items) {
|
||||
@@ -70,17 +86,17 @@ public class AddWorkspaceItemsTaskTest extends BaseModelUpdateTaskTestCase {
|
||||
// Second screen has 2 holes of sizes 3x2 and 2x3
|
||||
setupWorkspaceWithHoles(nextId, 2, new Rect(2, 0, 5, 2), new Rect(0, 2, 2, 5));
|
||||
|
||||
int[] spaceFound = newTask()
|
||||
.findSpaceForItem(appState, bgDataModel, existingScreens, newScreens, 1, 1);
|
||||
int[] spaceFound = newTask().findSpaceForItem(
|
||||
mAppState, mModelHelper.getBgDataModel(), mExistingScreens, mNewScreens, 1, 1);
|
||||
assertEquals(2, spaceFound[0]);
|
||||
assertTrue(screenOccupancy.get(spaceFound[0])
|
||||
assertTrue(mScreenOccupancy.get(spaceFound[0])
|
||||
.isRegionVacant(spaceFound[1], spaceFound[2], 1, 1));
|
||||
|
||||
// Find a larger space
|
||||
spaceFound = newTask()
|
||||
.findSpaceForItem(appState, bgDataModel, existingScreens, newScreens, 2, 3);
|
||||
spaceFound = newTask().findSpaceForItem(
|
||||
mAppState, mModelHelper.getBgDataModel(), mExistingScreens, mNewScreens, 2, 3);
|
||||
assertEquals(2, spaceFound[0]);
|
||||
assertTrue(screenOccupancy.get(spaceFound[0])
|
||||
assertTrue(mScreenOccupancy.get(spaceFound[0])
|
||||
.isRegionVacant(spaceFound[1], spaceFound[2], 2, 3));
|
||||
}
|
||||
|
||||
@@ -89,11 +105,11 @@ public class AddWorkspaceItemsTaskTest extends BaseModelUpdateTaskTestCase {
|
||||
// First screen has 2 holes of sizes 3x2 and 2x3
|
||||
setupWorkspaceWithHoles(1, 1, new Rect(2, 0, 5, 2), new Rect(0, 2, 2, 5));
|
||||
|
||||
IntArray oldScreens = existingScreens.clone();
|
||||
int[] spaceFound = newTask()
|
||||
.findSpaceForItem(appState, bgDataModel, existingScreens, newScreens, 3, 3);
|
||||
IntArray oldScreens = mExistingScreens.clone();
|
||||
int[] spaceFound = newTask().findSpaceForItem(
|
||||
mAppState, mModelHelper.getBgDataModel(), mExistingScreens, mNewScreens, 3, 3);
|
||||
assertFalse(oldScreens.contains(spaceFound[0]));
|
||||
assertTrue(newScreens.contains(spaceFound[0]));
|
||||
assertTrue(mNewScreens.contains(spaceFound[0]));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -105,11 +121,14 @@ public class AddWorkspaceItemsTaskTest extends BaseModelUpdateTaskTestCase {
|
||||
setupWorkspaceWithHoles(1, 1, new Rect(2, 2, 3, 3));
|
||||
|
||||
// Nothing was added
|
||||
assertTrue(executeTaskForTest(newTask(info)).isEmpty());
|
||||
assertTrue(mModelHelper.executeTaskForTest(newTask(info)).isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAddItem_some_items_added() throws Exception {
|
||||
Callbacks callbacks = mock(Callbacks.class);
|
||||
mModelHelper.getModel().initialize(callbacks);
|
||||
|
||||
WorkspaceItemInfo info = new WorkspaceItemInfo();
|
||||
info.intent = new Intent().setComponent(mComponent1);
|
||||
|
||||
@@ -119,7 +138,7 @@ public class AddWorkspaceItemsTaskTest extends BaseModelUpdateTaskTestCase {
|
||||
// Setup a screen with a hole
|
||||
setupWorkspaceWithHoles(1, 1, new Rect(2, 2, 3, 3));
|
||||
|
||||
executeTaskForTest(newTask(info, info2)).get(0).run();
|
||||
mModelHelper.executeTaskForTest(newTask(info, info2)).get(0).run();
|
||||
ArgumentCaptor<ArrayList> notAnimated = ArgumentCaptor.forClass(ArrayList.class);
|
||||
ArgumentCaptor<ArrayList> animated = ArgumentCaptor.forClass(ArrayList.class);
|
||||
|
||||
@@ -134,18 +153,23 @@ public class AddWorkspaceItemsTaskTest extends BaseModelUpdateTaskTestCase {
|
||||
}
|
||||
|
||||
private int setupWorkspaceWithHoles(int startId, int screenId, Rect... holes) throws Exception {
|
||||
GridOccupancy occupancy = new GridOccupancy(idp.numColumns, idp.numRows);
|
||||
occupancy.markCells(0, 0, idp.numColumns, idp.numRows, true);
|
||||
return mModelHelper.executeSimpleTask(
|
||||
model -> writeWorkspaceWithHoles(model, startId, screenId, holes));
|
||||
}
|
||||
|
||||
private int writeWorkspaceWithHoles(
|
||||
BgDataModel bgDataModel, int startId, int screenId, Rect... holes) {
|
||||
GridOccupancy occupancy = new GridOccupancy(mIdp.numColumns, mIdp.numRows);
|
||||
occupancy.markCells(0, 0, mIdp.numColumns, mIdp.numRows, true);
|
||||
for (Rect r : holes) {
|
||||
occupancy.markCells(r, false);
|
||||
}
|
||||
|
||||
existingScreens.add(screenId);
|
||||
screenOccupancy.append(screenId, occupancy);
|
||||
mExistingScreens.add(screenId);
|
||||
mScreenOccupancy.append(screenId, occupancy);
|
||||
|
||||
ExecutorService executor = Executors.newSingleThreadExecutor();
|
||||
for (int x = 0; x < idp.numColumns; x++) {
|
||||
for (int y = 0; y < idp.numRows; y++) {
|
||||
for (int x = 0; x < mIdp.numColumns; x++) {
|
||||
for (int y = 0; y < mIdp.numRows; y++) {
|
||||
if (!occupancy.cells[x][y]) {
|
||||
continue;
|
||||
}
|
||||
@@ -157,20 +181,15 @@ public class AddWorkspaceItemsTaskTest extends BaseModelUpdateTaskTestCase {
|
||||
info.cellX = x;
|
||||
info.cellY = y;
|
||||
info.container = LauncherSettings.Favorites.CONTAINER_DESKTOP;
|
||||
bgDataModel.addItem(targetContext, info, false);
|
||||
bgDataModel.addItem(mTargetContext, info, false);
|
||||
|
||||
executor.execute(() -> {
|
||||
ContentWriter writer = new ContentWriter(targetContext);
|
||||
info.writeToValues(writer);
|
||||
writer.put(Favorites._ID, info.id);
|
||||
targetContext.getContentResolver().insert(Favorites.CONTENT_URI,
|
||||
writer.getValues(targetContext));
|
||||
});
|
||||
ContentWriter writer = new ContentWriter(mTargetContext);
|
||||
info.writeToValues(writer);
|
||||
writer.put(Favorites._ID, info.id);
|
||||
mTargetContext.getContentResolver().insert(Favorites.CONTENT_URI,
|
||||
writer.getValues(mTargetContext));
|
||||
}
|
||||
}
|
||||
|
||||
executor.submit(() -> null).get();
|
||||
executor.shutdown();
|
||||
return startId;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user