Files
lawnchair/tests/src/com/android/launcher3/ui/PortraitLandscapeRunner.java
Vadim Tryshev 7a4d696bbb Saving test artifacts in TAPL when the failure is diagnosed
Not waiting for FailureWatcher to catch the exception and save
artifacts. This will help to save test artifacts before potential
deinitialization in the test which may change the screen contents.

Bug: 187761685
Test: presubmit
Flag: N/A
Change-Id: I7aa95028acfae3fe0895fc5df4ea6f6912fcda52
2024-04-29 11:53:08 -07:00

102 lines
3.7 KiB
Java

package com.android.launcher3.ui;
import android.util.Log;
import android.view.Surface;
import com.android.launcher3.Launcher;
import com.android.launcher3.tapl.TestHelpers;
import com.android.launcher3.util.rule.FailureWatcher;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
public class PortraitLandscapeRunner<LAUNCHER_TYPE extends Launcher> implements TestRule {
private static final String TAG = "PortraitLandscapeRunner";
private AbstractLauncherUiTest<LAUNCHER_TYPE> mTest;
// Annotation for tests that need to be run in portrait and landscape modes.
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface PortraitLandscape {
}
public PortraitLandscapeRunner(AbstractLauncherUiTest<LAUNCHER_TYPE> test) {
mTest = test;
}
@Override
public Statement apply(Statement base, Description description) {
if (!TestHelpers.isInLauncherProcess()
|| description.getAnnotation(PortraitLandscape.class) == null) {
return base;
}
return new Statement() {
@Override
public void evaluate() throws Throwable {
try {
try {
// we expect to begin unlocked...
AbstractLauncherUiTest.verifyKeyguardInvisible();
mTest.mDevice.pressHome();
mTest.waitForLauncherCondition("Launcher activity wasn't created",
Objects::nonNull,
TimeUnit.SECONDS.toMillis(20));
mTest.executeOnLauncher(launcher ->
launcher.getRotationHelper().forceAllowRotationForTesting(
true));
} catch (Throwable e) {
FailureWatcher.onError(mTest.mLauncher, description);
throw e;
}
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);
// and end unlocked...
AbstractLauncherUiTest.verifyKeyguardInvisible();
}
}
private void evaluateInPortrait() throws Throwable {
mTest.mDevice.setOrientationNatural();
mTest.mLauncher.setExpectedRotation(Surface.ROTATION_0);
AbstractLauncherUiTest.checkDetectedLeaks(mTest.mLauncher, true);
base.evaluate();
mTest.getDevice().pressHome();
}
private void evaluateInLandscape() throws Throwable {
mTest.mDevice.setOrientationLeft();
mTest.mLauncher.setExpectedRotation(Surface.ROTATION_90);
AbstractLauncherUiTest.checkDetectedLeaks(mTest.mLauncher, true);
base.evaluate();
mTest.getDevice().pressHome();
}
};
}
}