b3e8ae8230
Strictmode leak detector is still a goal, but we might not be able to achieve it in R. Strictmode has several framework-side bugs that perhaps hide Launcher-side strictmode violations, while the time to fix everything is limited, and new leaks get introduced all the time. For now, implementing a check that is slightly more relaxed than Strictmode, but still ensures the absence of leaks. I’ll keep eliminating Strictmode violations as well as keep strengthening the makeshift checker conditions until we’ll be able to enable Strictmode in continuous testing. I’m disabling Strictmode checks for now so that they don’t generate unnecessary hprof dumps, but leaving the code dealing with strictmode. Bug: 139137636 Change-Id: Ib10136b0d4e9892f70a19cd052ae5a54cf0a4efb
74 lines
2.6 KiB
Java
74 lines
2.6 KiB
Java
package com.android.launcher3.ui;
|
|
|
|
import android.util.Log;
|
|
import android.view.Surface;
|
|
|
|
import com.android.launcher3.tapl.TestHelpers;
|
|
|
|
import org.junit.rules.TestRule;
|
|
import org.junit.runner.Description;
|
|
import org.junit.runners.model.Statement;
|
|
|
|
class PortraitLandscapeRunner implements TestRule {
|
|
private static final String TAG = "PortraitLandscapeRunner";
|
|
private AbstractLauncherUiTest mTest;
|
|
|
|
public PortraitLandscapeRunner(AbstractLauncherUiTest test) {
|
|
mTest = test;
|
|
}
|
|
|
|
@Override
|
|
public Statement apply(Statement base, Description description) {
|
|
if (!TestHelpers.isInLauncherProcess() ||
|
|
description.getAnnotation(AbstractLauncherUiTest.PortraitLandscape.class) == null) {
|
|
return base;
|
|
}
|
|
|
|
return new Statement() {
|
|
@Override
|
|
public void evaluate() throws Throwable {
|
|
try {
|
|
mTest.mDevice.pressHome();
|
|
mTest.waitForLauncherCondition("Launcher activity wasn't created",
|
|
launcher -> launcher != null);
|
|
|
|
mTest.executeOnLauncher(launcher ->
|
|
launcher.getRotationHelper().forceAllowRotationForTesting(
|
|
true));
|
|
|
|
evaluateInPortrait();
|
|
evaluateInLandscape();
|
|
} catch (Throwable e) {
|
|
Log.e(TAG, "Error", e);
|
|
throw e;
|
|
} finally {
|
|
mTest.mDevice.setOrientationNatural();
|
|
mTest.executeOnLauncher(launcher ->
|
|
{
|
|
if (launcher != null) {
|
|
launcher.getRotationHelper().forceAllowRotationForTesting(false);
|
|
}
|
|
});
|
|
mTest.mLauncher.setExpectedRotation(Surface.ROTATION_0);
|
|
}
|
|
}
|
|
|
|
private void evaluateInPortrait() throws Throwable {
|
|
mTest.mDevice.setOrientationNatural();
|
|
mTest.mLauncher.setExpectedRotation(Surface.ROTATION_0);
|
|
AbstractLauncherUiTest.checkDetectedLeaks(mTest.mLauncher);
|
|
base.evaluate();
|
|
mTest.getDevice().pressHome();
|
|
}
|
|
|
|
private void evaluateInLandscape() throws Throwable {
|
|
mTest.mDevice.setOrientationLeft();
|
|
mTest.mLauncher.setExpectedRotation(Surface.ROTATION_90);
|
|
AbstractLauncherUiTest.checkDetectedLeaks(mTest.mLauncher);
|
|
base.evaluate();
|
|
mTest.getDevice().pressHome();
|
|
}
|
|
};
|
|
}
|
|
}
|