Commit df2505c9 authored by Yun Liu's avatar Yun Liu Committed by Commit Bot

Convert and add several tests by Espresso API and a custom test rule for DownloadActivity.

Add a custom ActivityTestRule for DownloadActivity which can turn off animation scales during tests.

Spinner is removed in Download Home V2

Bug: 904030
Change-Id: If00ea1400b17bdbbc49fe2414d0c80a5ec47885b
Reviewed-on: https://chromium-review.googlesource.com/c/1278207
Commit-Queue: Yun Liu <yliuyliu@google.com>
Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Reviewed-by: default avatarXing Liu <xingliu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#612390}
parent ea36de23
......@@ -1935,6 +1935,7 @@ chrome_test_java_sources = [
"javatests/src/org/chromium/chrome/browser/dom_distiller/DistillabilityServiceTest.java",
"javatests/src/org/chromium/chrome/browser/dom_distiller/DistilledPagePrefsTest.java",
"javatests/src/org/chromium/chrome/browser/download/ChromeDownloadDelegateTest.java",
"javatests/src/org/chromium/chrome/browser/download/DisableAnimationsRule.java",
"javatests/src/org/chromium/chrome/browser/download/DownloadActivityTest.java",
"javatests/src/org/chromium/chrome/browser/download/DownloadInfoBarControllerTest.java",
"javatests/src/org/chromium/chrome/browser/download/DownloadManagerServiceTest.java",
......
......@@ -9,6 +9,7 @@
{% block extra_uses_permissions %}
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.SET_ANIMATION_SCALE"/>
{% endblock %}
{% block extra_application_definitions_for_test %}
......
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.download;
import android.os.IBinder;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
import org.chromium.base.Log;
import java.lang.reflect.Method;
import java.util.Arrays;
/**
* {@link TestRule} to disable animations for UI testing.
*/
public class DisableAnimationsRule implements TestRule {
private Method mSetAnimationScalesMethod;
private Method mGetAnimationScalesMethod;
private Object mWindowManagerObject;
private static final float DISABLED_SCALE_FACTOR = 0.0f;
private static final float DEFAULT_SCALE_FACTOR = 1.0f;
private static final String TAG = "disable_animations";
/**
* Invoke setAnimationScalesMethod to turn off system animations, such as Window animation
* scale, Transition animation scale, Animator duration scale, which can improve stability
* and reduce flakiness for UI testing.
*/
public DisableAnimationsRule() {
try {
Class<?> windowManagerStubClazz = Class.forName("android.view.IWindowManager$Stub");
Method asInterface =
windowManagerStubClazz.getDeclaredMethod("asInterface", IBinder.class);
Class<?> serviceManagerClazz = Class.forName("android.os.ServiceManager");
Method getService = serviceManagerClazz.getDeclaredMethod("getService", String.class);
Class<?> windowManagerClazz = Class.forName("android.view.IWindowManager");
mSetAnimationScalesMethod =
windowManagerClazz.getDeclaredMethod("setAnimationScales", float[].class);
mGetAnimationScalesMethod = windowManagerClazz.getDeclaredMethod("getAnimationScales");
IBinder windowManagerBinder = (IBinder) getService.invoke(null, "window");
mWindowManagerObject = asInterface.invoke(null, windowManagerBinder);
} catch (Exception e) {
Log.w(TAG, "Failed to access animation methods", e);
}
}
@Override
public Statement apply(final Statement statement, Description description) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
setAnimationScaleFactors(DISABLED_SCALE_FACTOR);
try {
statement.evaluate();
} finally {
setAnimationScaleFactors(DEFAULT_SCALE_FACTOR);
}
}
};
}
private void setAnimationScaleFactors(float scaleFactor) {
try {
float[] scaleFactors = (float[]) mGetAnimationScalesMethod.invoke(mWindowManagerObject);
Arrays.fill(scaleFactors, scaleFactor);
mSetAnimationScalesMethod.invoke(mWindowManagerObject, scaleFactors);
} catch (Exception e) {
Log.w(TAG, "Failed to set animation scale factors", e);
}
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment