Fix TaskPositionerTests

In [1], we use getBounds() instead of getDimBounds(), which makes
original mock useless. This failure was not found since we don't run it
in presubmit. The first attempt is to try to use getBounds() instead of
getDimBounds(). However, it makes tests flaky since we may mock Task
in WindowTestBase#tearDown at the smae time, which lead to
MockException. We use real Task and setBounds directly to prevent the
flaky.
We also fixed some coding conventions in TaskPositionerTests

[1]: Id81d0b0a5f82be28fabed3ad22e713fc4fa7536d

Fix: 128820963
Test: atest TaskPositionerTests

Change-Id: Iaa50b74ccec19a399cfbfa45afa8136acb466055
This commit is contained in:
Charles Chen
2019-03-22 20:58:00 +08:00
parent 835f260d60
commit 2cb5a0f0cc
2 changed files with 60 additions and 64 deletions

View File

@@ -104,7 +104,8 @@ class TaskPositioner {
private int mMinVisibleWidth; private int mMinVisibleWidth;
private int mMinVisibleHeight; private int mMinVisibleHeight;
private Task mTask; @VisibleForTesting
Task mTask;
private boolean mResizing; private boolean mResizing;
private boolean mPreserveOrientation; private boolean mPreserveOrientation;
private boolean mStartOrientationWasLandscape; private boolean mStartOrientationWasLandscape;

View File

@@ -19,16 +19,14 @@ package com.android.server.wm;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.any;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
import static com.android.server.wm.TaskPositioner.MIN_ASPECT; import static com.android.server.wm.TaskPositioner.MIN_ASPECT;
import static com.android.server.wm.WindowManagerService.dipToPixel; import static com.android.server.wm.WindowManagerService.dipToPixel;
import static com.android.server.wm.WindowState.MINIMUM_VISIBLE_HEIGHT_IN_DP; import static com.android.server.wm.WindowState.MINIMUM_VISIBLE_HEIGHT_IN_DP;
import static com.android.server.wm.WindowState.MINIMUM_VISIBLE_WIDTH_IN_DP; import static com.android.server.wm.WindowState.MINIMUM_VISIBLE_WIDTH_IN_DP;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNull; import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
@@ -39,9 +37,9 @@ import android.util.DisplayMetrics;
import android.util.Log; import android.util.Log;
import android.view.Display; import android.view.Display;
import androidx.test.filters.FlakyTest;
import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest;
import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -53,7 +51,6 @@ import org.junit.Test;
*/ */
@SmallTest @SmallTest
@Presubmit @Presubmit
@FlakyTest
public class TaskPositionerTests extends WindowTestsBase { public class TaskPositionerTests extends WindowTestsBase {
private static final boolean DEBUGGING = false; private static final boolean DEBUGGING = false;
@@ -66,10 +63,9 @@ public class TaskPositionerTests extends WindowTestsBase {
private int mMinVisibleHeight; private int mMinVisibleHeight;
private TaskPositioner mPositioner; private TaskPositioner mPositioner;
private WindowState mWindow; private WindowState mWindow;
private Rect mDimBounds = new Rect();
@Before @Before
public void setUp() throws Exception { public void setUp() {
TaskPositioner.setFactory(null); TaskPositioner.setFactory(null);
final Display display = mDisplayContent.getDisplay(); final Display display = mDisplayContent.getDisplay();
@@ -84,17 +80,16 @@ public class TaskPositionerTests extends WindowTestsBase {
mPositioner.register(mDisplayContent); mPositioner.register(mDisplayContent);
mWindow = createWindow(null, TYPE_BASE_APPLICATION, "window"); mWindow = createWindow(null, TYPE_BASE_APPLICATION, "window");
final Task task = mWindow.getTask(); mPositioner.mTask = mWindow.getTask();
spyOn(task);
doAnswer(invocation -> {
final Rect rect = (Rect) invocation.getArguments()[0];
rect.set(mDimBounds);
return null;
}).when(task).getDimBounds(any(Rect.class));
mWindow.getStack().setWindowingMode(WINDOWING_MODE_FREEFORM); mWindow.getStack().setWindowingMode(WINDOWING_MODE_FREEFORM);
} }
@After
public void tearDown() {
mWindow = null;
mPositioner = null;
}
@Test @Test
public void testOverrideFactory() { public void testOverrideFactory() {
final boolean[] created = new boolean[1]; final boolean[] created = new boolean[1];
@@ -119,11 +114,11 @@ public class TaskPositionerTests extends WindowTestsBase {
public void testBasicFreeWindowResizing() { public void testBasicFreeWindowResizing() {
final Rect r = new Rect(100, 220, 700, 520); final Rect r = new Rect(100, 220, 700, 520);
final int midY = (r.top + r.bottom) / 2; final int midY = (r.top + r.bottom) / 2;
mDimBounds.set(r); mPositioner.mTask.setBounds(r, true);
// Start a drag resize starting upper left. // Start a drag resize starting upper left.
mPositioner.startDrag(mWindow, true /*resizing*/, mPositioner.startDrag(mWindow, true /* resizing */,
false /*preserveOrientation*/, r.left - MOUSE_DELTA_X, r.top - MOUSE_DELTA_Y); false /* preserveOrientation */, r.left - MOUSE_DELTA_X, r.top - MOUSE_DELTA_Y);
assertBoundsEquals(r, mPositioner.getWindowDragBounds()); assertBoundsEquals(r, mPositioner.getWindowDragBounds());
// Drag to a good landscape size. // Drag to a good landscape size.
@@ -149,8 +144,8 @@ public class TaskPositionerTests extends WindowTestsBase {
mPositioner.getWindowDragBounds()); mPositioner.getWindowDragBounds());
// Start a drag resize left and see that only the left coord changes.. // Start a drag resize left and see that only the left coord changes..
mPositioner.startDrag(mWindow, true /*resizing*/, mPositioner.startDrag(mWindow, true /* resizing */,
false /*preserveOrientation*/, r.left - MOUSE_DELTA_X, midY); false /* preserveOrientation */, r.left - MOUSE_DELTA_X, midY);
// Drag to the left. // Drag to the left.
mPositioner.resizeDrag(0.0f, midY); mPositioner.resizeDrag(0.0f, midY);
@@ -181,77 +176,77 @@ public class TaskPositionerTests extends WindowTestsBase {
final Rect r = new Rect(100, 220, 700, 520); final Rect r = new Rect(100, 220, 700, 520);
final int midX = (r.left + r.right) / 2; final int midX = (r.left + r.right) / 2;
final int midY = (r.top + r.bottom) / 2; final int midY = (r.top + r.bottom) / 2;
mDimBounds.set(r); mPositioner.mTask.setBounds(r, true);
// Drag upper left. // Drag upper left.
mPositioner.startDrag(mWindow, true /*resizing*/, mPositioner.startDrag(mWindow, true /* resizing */,
false /*preserveOrientation*/, r.left - MOUSE_DELTA_X, r.top - MOUSE_DELTA_Y); false /* preserveOrientation */, r.left - MOUSE_DELTA_X, r.top - MOUSE_DELTA_Y);
mPositioner.resizeDrag(0.0f, 0.0f); mPositioner.resizeDrag(0.0f, 0.0f);
assertTrue(r.left != mPositioner.getWindowDragBounds().left); assertNotEquals(r.left, mPositioner.getWindowDragBounds().left);
assertEquals(r.right, mPositioner.getWindowDragBounds().right); assertEquals(r.right, mPositioner.getWindowDragBounds().right);
assertTrue(r.top != mPositioner.getWindowDragBounds().top); assertNotEquals(r.top, mPositioner.getWindowDragBounds().top);
assertEquals(r.bottom, mPositioner.getWindowDragBounds().bottom); assertEquals(r.bottom, mPositioner.getWindowDragBounds().bottom);
// Drag upper. // Drag upper.
mPositioner.startDrag(mWindow, true /*resizing*/, mPositioner.startDrag(mWindow, true /* resizing */,
false /*preserveOrientation*/, midX, r.top - MOUSE_DELTA_Y); false /* preserveOrientation */, midX, r.top - MOUSE_DELTA_Y);
mPositioner.resizeDrag(0.0f, 0.0f); mPositioner.resizeDrag(0.0f, 0.0f);
assertEquals(r.left, mPositioner.getWindowDragBounds().left); assertEquals(r.left, mPositioner.getWindowDragBounds().left);
assertEquals(r.right, mPositioner.getWindowDragBounds().right); assertEquals(r.right, mPositioner.getWindowDragBounds().right);
assertTrue(r.top != mPositioner.getWindowDragBounds().top); assertNotEquals(r.top, mPositioner.getWindowDragBounds().top);
assertEquals(r.bottom, mPositioner.getWindowDragBounds().bottom); assertEquals(r.bottom, mPositioner.getWindowDragBounds().bottom);
// Drag upper right. // Drag upper right.
mPositioner.startDrag(mWindow, true /*resizing*/, mPositioner.startDrag(mWindow, true /* resizing */,
false /*preserveOrientation*/, r.right + MOUSE_DELTA_X, r.top - MOUSE_DELTA_Y); false /* preserveOrientation */, r.right + MOUSE_DELTA_X, r.top - MOUSE_DELTA_Y);
mPositioner.resizeDrag(r.right + 100, 0.0f); mPositioner.resizeDrag(r.right + 100, 0.0f);
assertEquals(r.left, mPositioner.getWindowDragBounds().left); assertEquals(r.left, mPositioner.getWindowDragBounds().left);
assertTrue(r.right != mPositioner.getWindowDragBounds().right); assertNotEquals(r.right, mPositioner.getWindowDragBounds().right);
assertTrue(r.top != mPositioner.getWindowDragBounds().top); assertNotEquals(r.top, mPositioner.getWindowDragBounds().top);
assertEquals(r.bottom, mPositioner.getWindowDragBounds().bottom); assertEquals(r.bottom, mPositioner.getWindowDragBounds().bottom);
// Drag right. // Drag right.
mPositioner.startDrag(mWindow, true /*resizing*/, mPositioner.startDrag(mWindow, true /* resizing */,
false /*preserveOrientation*/, r.right + MOUSE_DELTA_X, midY); false /* preserveOrientation */, r.right + MOUSE_DELTA_X, midY);
mPositioner.resizeDrag(r.right + 100, 0.0f); mPositioner.resizeDrag(r.right + 100, 0.0f);
assertEquals(r.left, mPositioner.getWindowDragBounds().left); assertEquals(r.left, mPositioner.getWindowDragBounds().left);
assertTrue(r.right != mPositioner.getWindowDragBounds().right); assertNotEquals(r.right, mPositioner.getWindowDragBounds().right);
assertEquals(r.top, mPositioner.getWindowDragBounds().top); assertEquals(r.top, mPositioner.getWindowDragBounds().top);
assertEquals(r.bottom, mPositioner.getWindowDragBounds().bottom); assertEquals(r.bottom, mPositioner.getWindowDragBounds().bottom);
// Drag bottom right. // Drag bottom right.
mPositioner.startDrag(mWindow, true /*resizing*/, mPositioner.startDrag(mWindow, true /* resizing */,
false /*preserveOrientation*/, false /* preserveOrientation */,
r.right + MOUSE_DELTA_X, r.bottom + MOUSE_DELTA_Y); r.right + MOUSE_DELTA_X, r.bottom + MOUSE_DELTA_Y);
mPositioner.resizeDrag(r.right + 100, r.bottom + 100); mPositioner.resizeDrag(r.right + 100, r.bottom + 100);
assertEquals(r.left, mPositioner.getWindowDragBounds().left); assertEquals(r.left, mPositioner.getWindowDragBounds().left);
assertTrue(r.right != mPositioner.getWindowDragBounds().right); assertNotEquals(r.right, mPositioner.getWindowDragBounds().right);
assertEquals(r.top, mPositioner.getWindowDragBounds().top); assertEquals(r.top, mPositioner.getWindowDragBounds().top);
assertTrue(r.bottom != mPositioner.getWindowDragBounds().bottom); assertNotEquals(r.bottom, mPositioner.getWindowDragBounds().bottom);
// Drag bottom. // Drag bottom.
mPositioner.startDrag(mWindow, true /*resizing*/, mPositioner.startDrag(mWindow, true /* resizing */,
false /*preserveOrientation*/, midX, r.bottom + MOUSE_DELTA_Y); false /* preserveOrientation */, midX, r.bottom + MOUSE_DELTA_Y);
mPositioner.resizeDrag(r.right + 100, r.bottom + 100); mPositioner.resizeDrag(r.right + 100, r.bottom + 100);
assertEquals(r.left, mPositioner.getWindowDragBounds().left); assertEquals(r.left, mPositioner.getWindowDragBounds().left);
assertEquals(r.right, mPositioner.getWindowDragBounds().right); assertEquals(r.right, mPositioner.getWindowDragBounds().right);
assertEquals(r.top, mPositioner.getWindowDragBounds().top); assertEquals(r.top, mPositioner.getWindowDragBounds().top);
assertTrue(r.bottom != mPositioner.getWindowDragBounds().bottom); assertNotEquals(r.bottom, mPositioner.getWindowDragBounds().bottom);
// Drag bottom left. // Drag bottom left.
mPositioner.startDrag(mWindow, true /*resizing*/, mPositioner.startDrag(mWindow, true /* resizing */,
false /*preserveOrientation*/, r.left - MOUSE_DELTA_X, r.bottom + MOUSE_DELTA_Y); false /* preserveOrientation */, r.left - MOUSE_DELTA_X, r.bottom + MOUSE_DELTA_Y);
mPositioner.resizeDrag(0.0f, r.bottom + 100); mPositioner.resizeDrag(0.0f, r.bottom + 100);
assertTrue(r.left != mPositioner.getWindowDragBounds().left); assertNotEquals(r.left, mPositioner.getWindowDragBounds().left);
assertEquals(r.right, mPositioner.getWindowDragBounds().right); assertEquals(r.right, mPositioner.getWindowDragBounds().right);
assertEquals(r.top, mPositioner.getWindowDragBounds().top); assertEquals(r.top, mPositioner.getWindowDragBounds().top);
assertTrue(r.bottom != mPositioner.getWindowDragBounds().bottom); assertNotEquals(r.bottom, mPositioner.getWindowDragBounds().bottom);
// Drag left. // Drag left.
mPositioner.startDrag(mWindow, true /*resizing*/, mPositioner.startDrag(mWindow, true /* resizing */,
false /*preserveOrientation*/, r.left - MOUSE_DELTA_X, midX); false /* preserveOrientation */, r.left - MOUSE_DELTA_X, midY);
mPositioner.resizeDrag(0.0f, r.bottom + 100); mPositioner.resizeDrag(0.0f, r.bottom + 100);
assertTrue(r.left != mPositioner.getWindowDragBounds().left); assertNotEquals(r.left, mPositioner.getWindowDragBounds().left);
assertEquals(r.right, mPositioner.getWindowDragBounds().right); assertEquals(r.right, mPositioner.getWindowDragBounds().right);
assertEquals(r.top, mPositioner.getWindowDragBounds().top); assertEquals(r.top, mPositioner.getWindowDragBounds().top);
assertEquals(r.bottom, mPositioner.getWindowDragBounds().bottom); assertEquals(r.bottom, mPositioner.getWindowDragBounds().bottom);
@@ -264,10 +259,10 @@ public class TaskPositionerTests extends WindowTestsBase {
@Test @Test
public void testLandscapePreservedWindowResizingDragTopLeft() { public void testLandscapePreservedWindowResizingDragTopLeft() {
final Rect r = new Rect(100, 220, 700, 520); final Rect r = new Rect(100, 220, 700, 520);
mDimBounds.set(r); mPositioner.mTask.setBounds(r, true);
mPositioner.startDrag(mWindow, true /*resizing*/, mPositioner.startDrag(mWindow, true /* resizing */,
true /*preserveOrientation*/, r.left - MOUSE_DELTA_X, r.top - MOUSE_DELTA_Y); true /* preserveOrientation */, r.left - MOUSE_DELTA_X, r.top - MOUSE_DELTA_Y);
assertBoundsEquals(r, mPositioner.getWindowDragBounds()); assertBoundsEquals(r, mPositioner.getWindowDragBounds());
// Drag to a good landscape size. // Drag to a good landscape size.
@@ -303,10 +298,10 @@ public class TaskPositionerTests extends WindowTestsBase {
public void testLandscapePreservedWindowResizingDragLeft() { public void testLandscapePreservedWindowResizingDragLeft() {
final Rect r = new Rect(100, 220, 700, 520); final Rect r = new Rect(100, 220, 700, 520);
final int midY = (r.top + r.bottom) / 2; final int midY = (r.top + r.bottom) / 2;
mDimBounds.set(r); mPositioner.mTask.setBounds(r, true);
mPositioner.startDrag(mWindow, true /*resizing*/, mPositioner.startDrag(mWindow, true /* resizing */,
true /*preserveOrientation*/, r.left - MOUSE_DELTA_X, midY); true /* preserveOrientation */, r.left - MOUSE_DELTA_X, midY);
// Drag to the left. // Drag to the left.
mPositioner.resizeDrag(0.0f, midY); mPositioner.resizeDrag(0.0f, midY);
@@ -344,7 +339,7 @@ public class TaskPositionerTests extends WindowTestsBase {
public void testLandscapePreservedWindowResizingDragTop() { public void testLandscapePreservedWindowResizingDragTop() {
final Rect r = new Rect(100, 220, 700, 520); final Rect r = new Rect(100, 220, 700, 520);
final int midX = (r.left + r.right) / 2; final int midX = (r.left + r.right) / 2;
mDimBounds.set(r); mPositioner.mTask.setBounds(r, true);
mPositioner.startDrag(mWindow, true /*resizing*/, mPositioner.startDrag(mWindow, true /*resizing*/,
true /*preserveOrientation*/, midX, r.top - MOUSE_DELTA_Y); true /*preserveOrientation*/, midX, r.top - MOUSE_DELTA_Y);
@@ -380,7 +375,7 @@ public class TaskPositionerTests extends WindowTestsBase {
@Test @Test
public void testPortraitPreservedWindowResizingDragTopLeft() { public void testPortraitPreservedWindowResizingDragTopLeft() {
final Rect r = new Rect(330, 100, 630, 600); final Rect r = new Rect(330, 100, 630, 600);
mDimBounds.set(r); mPositioner.mTask.setBounds(r, true);
mPositioner.startDrag(mWindow, true /*resizing*/, mPositioner.startDrag(mWindow, true /*resizing*/,
true /*preserveOrientation*/, r.left - MOUSE_DELTA_X, r.top - MOUSE_DELTA_Y); true /*preserveOrientation*/, r.left - MOUSE_DELTA_X, r.top - MOUSE_DELTA_Y);
@@ -414,10 +409,10 @@ public class TaskPositionerTests extends WindowTestsBase {
public void testPortraitPreservedWindowResizingDragLeft() { public void testPortraitPreservedWindowResizingDragLeft() {
final Rect r = new Rect(330, 100, 630, 600); final Rect r = new Rect(330, 100, 630, 600);
final int midY = (r.top + r.bottom) / 2; final int midY = (r.top + r.bottom) / 2;
mDimBounds.set(r); mPositioner.mTask.setBounds(r, true);
mPositioner.startDrag(mWindow, true /*resizing*/, mPositioner.startDrag(mWindow, true /* resizing */,
true /*preserveOrientation*/, r.left - MOUSE_DELTA_X, midY); true /* preserveOrientation */, r.left - MOUSE_DELTA_X, midY);
// Drag to the left. // Drag to the left.
mPositioner.resizeDrag(0.0f, midY); mPositioner.resizeDrag(0.0f, midY);
@@ -457,10 +452,10 @@ public class TaskPositionerTests extends WindowTestsBase {
public void testPortraitPreservedWindowResizingDragTop() { public void testPortraitPreservedWindowResizingDragTop() {
final Rect r = new Rect(330, 100, 630, 600); final Rect r = new Rect(330, 100, 630, 600);
final int midX = (r.left + r.right) / 2; final int midX = (r.left + r.right) / 2;
mDimBounds.set(r); mPositioner.mTask.setBounds(r, true);
mPositioner.startDrag(mWindow, true /*resizing*/, mPositioner.startDrag(mWindow, true /* resizing */,
true /*preserveOrientation*/, midX, r.top - MOUSE_DELTA_Y); true /* preserveOrientation */, midX, r.top - MOUSE_DELTA_Y);
// Drag to the left (no change). // Drag to the left (no change).
mPositioner.resizeDrag(0.0f, r.top); mPositioner.resizeDrag(0.0f, r.top);