summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Michal Brzezinski <brzezinski@google.com> 2022-01-20 14:00:42 +0000
committer Michal Brzezinski <brzezinski@google.com> 2022-01-21 15:31:03 +0000
commit809b6fd75d122be5bc8c9572b308228fecbc1e8d (patch)
tree27f6b886008ce8fab30e7bc1267bb45f72bd4416
parent7b422dc1a1a4fdfac47c38587197e1d478981e0b (diff)
Fixing leaks in WindowMagnificationControllerTest
The main part of this fix is always using field of mWindowMagnificationController because it's always properly cleaned up in @After. Lack of cleaning in one test was causing the leak. Additionally, I switched mock of Handler to FakeHandler - this alone fixes the problem but only by hiding the symptom. Anyway it's likely safer to use fake instead of mock and errors should not spill to other tests. As an extra touch in the process this CL overrides default animator to use 0 time instead of the default one which takes some real time. Fixes: 214021969 Test: adb shell am instrument -w -e \ class com.android.systemui.accessibility.WindowMagnificationControllerTest,com.android.systemui.controls.management.ControlsRequestDialogTest \ com.android.systemui.tests/androidx.test.runner.AndroidJUnitRunner Change-Id: I9326e48dccd93acc82e271c9eb7f137090c83dd3
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java26
1 files changed, 10 insertions, 16 deletions
diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java
index 5ad651728c66..433e7108f0f8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java
@@ -32,7 +32,6 @@ import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.atLeastOnce;
@@ -42,6 +41,7 @@ import static org.mockito.Mockito.timeout;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.animation.ValueAnimator;
import android.app.Instrumentation;
import android.content.Context;
import android.content.pm.ActivityInfo;
@@ -52,6 +52,7 @@ import android.graphics.Rect;
import android.os.Handler;
import android.os.SystemClock;
import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
import android.testing.TestableResources;
import android.text.TextUtils;
import android.view.Display;
@@ -71,6 +72,7 @@ import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.model.SysUiState;
import com.android.systemui.util.leak.ReferenceTestUtils;
+import com.android.systemui.utils.os.FakeHandler;
import org.junit.After;
import org.junit.Before;
@@ -85,13 +87,12 @@ import org.mockito.MockitoAnnotations;
import java.util.List;
@LargeTest
+@TestableLooper.RunWithLooper
@RunWith(AndroidTestingRunner.class)
public class WindowMagnificationControllerTest extends SysuiTestCase {
private static final int LAYOUT_CHANGE_TIMEOUT_MS = 5000;
@Mock
- private Handler mHandler;
- @Mock
private SfVsyncFrameCallbackProvider mSfVsyncFrameProvider;
@Mock
private MirrorWindowControl mMirrorWindowControl;
@@ -99,17 +100,21 @@ public class WindowMagnificationControllerTest extends SysuiTestCase {
private WindowMagnifierCallback mWindowMagnifierCallback;
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private SurfaceControl.Transaction mTransaction = new SurfaceControl.Transaction();
+
+ private Handler mHandler;
private TestableWindowManager mWindowManager;
private SysUiState mSysUiState = new SysUiState();
private Resources mResources;
private WindowMagnificationAnimationController mWindowMagnificationAnimationController;
private WindowMagnificationController mWindowMagnificationController;
private Instrumentation mInstrumentation;
+ private final ValueAnimator mValueAnimator = ValueAnimator.ofFloat(0, 1.0f).setDuration(0);
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = Mockito.spy(getContext());
+ mHandler = new FakeHandler(TestableLooper.get(this).getLooper());
mInstrumentation = InstrumentationRegistry.getInstrumentation();
final WindowManager wm = mContext.getSystemService(WindowManager.class);
mWindowManager = spy(new TestableWindowManager(wm));
@@ -121,17 +126,11 @@ public class WindowMagnificationControllerTest extends SysuiTestCase {
return null;
}).when(mSfVsyncFrameProvider).postFrameCallback(
any(FrameCallback.class));
- doAnswer(invocation -> {
- final Runnable runnable = invocation.getArgument(0);
- runnable.run();
- return null;
- }).when(mHandler).post(
- any(Runnable.class));
mSysUiState.addCallback(Mockito.mock(SysUiState.SysUiStateCallback.class));
mResources = getContext().getOrCreateTestableResources().getResources();
mWindowMagnificationAnimationController = new WindowMagnificationAnimationController(
- mContext);
+ mContext, mValueAnimator);
mWindowMagnificationController = new WindowMagnificationController(mContext,
mHandler, mWindowMagnificationAnimationController, mSfVsyncFrameProvider,
mMirrorWindowControl, mTransaction, mWindowMagnifierCallback, mSysUiState);
@@ -144,6 +143,7 @@ public class WindowMagnificationControllerTest extends SysuiTestCase {
public void tearDown() {
mInstrumentation.runOnMainSync(
() -> mWindowMagnificationController.deleteWindowMagnification());
+ mValueAnimator.cancel();
}
@Test
@@ -288,12 +288,6 @@ public class WindowMagnificationControllerTest extends SysuiTestCase {
@Test
public void setScale_enabled_expectedValueAndUpdateStateDescription() {
- doAnswer(invocation -> {
- final Runnable runnable = invocation.getArgument(0);
- runnable.run();
- return null;
- }).when(mHandler).postDelayed(any(Runnable.class), anyLong());
-
mInstrumentation.runOnMainSync(
() -> mWindowMagnificationController.enableWindowMagnificationInternal(2.0f,
Float.NaN, Float.NaN));