summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ryan Lin <ryanlwlin@google.com> 2020-12-04 08:30:02 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-12-04 08:30:02 +0000
commit645e56e8247cbf3848da829a54e44e4bd1649687 (patch)
treeea9b53faf17b95d2efeda39b595a3400230d39fb
parent41572fda62f4b57469c06a3adbd08faa39d5de7a (diff)
parentd9061364e3b18d22e32f9c80011e853699cb6037 (diff)
Merge "refactor MagnificationModeSwitchTest"
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java171
1 files changed, 101 insertions, 70 deletions
diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java
index a0ae35ffef00..11150432f757 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java
@@ -29,20 +29,23 @@ import static com.android.systemui.accessibility.MagnificationModeSwitch.FADING_
import static com.android.systemui.accessibility.MagnificationModeSwitch.getIconResId;
import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertNotNull;
import static org.hamcrest.CoreMatchers.hasItems;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.content.pm.ActivityInfo;
+import android.os.SystemClock;
import android.os.UserHandle;
import android.provider.Settings;
import android.testing.AndroidTestingRunner;
@@ -60,15 +63,18 @@ import androidx.test.filters.SmallTest;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
+import java.util.ArrayList;
+import java.util.List;
+
@SmallTest
@RunWith(AndroidTestingRunner.class)
public class MagnificationModeSwitchTest extends SysuiTestCase {
@@ -81,11 +87,10 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
private AccessibilityManager mAccessibilityManager;
@Mock
private WindowManager mWindowManager;
- @Mock
private ViewPropertyAnimator mViewPropertyAnimator;
private MagnificationModeSwitch mMagnificationModeSwitch;
- @Captor
- private ArgumentCaptor<View.OnTouchListener> mTouchListenerCaptor;
+ private View.OnTouchListener mTouchListener;
+ private List<MotionEvent> mMotionEvents = new ArrayList<>();
@Before
public void setUp() throws Exception {
@@ -97,9 +102,23 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
mContext.addMockSystemService(Context.WINDOW_SERVICE, mWindowManager);
mContext.addMockSystemService(Context.ACCESSIBILITY_SERVICE, mAccessibilityManager);
mSpyImageView = Mockito.spy(new ImageView(mContext));
- resetMockImageViewAndAnimator();
-
+ mViewPropertyAnimator = Mockito.spy(mSpyImageView.animate());
+ resetAndStubMockImageViewAndAnimator();
+ doAnswer((invocation) -> {
+ mTouchListener = invocation.getArgument(0);
+ return null;
+ }).when(mSpyImageView).setOnTouchListener(
+ any(View.OnTouchListener.class));
mMagnificationModeSwitch = new MagnificationModeSwitch(mContext, mSpyImageView);
+ assertNotNull(mTouchListener);
+ }
+
+ @After
+ public void tearDown() {
+ for (MotionEvent event:mMotionEvents) {
+ event.recycle();
+ }
+ mMotionEvents.clear();
}
@Test
@@ -124,7 +143,7 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
}
@Test
- public void showMagnificationButton_a11yTimeout_autoFadeOut() {
+ public void showMagnificationButton_setA11yTimeout_postDelayedAnimationWithA11yTimeout() {
final int a11yTimeout = 12345;
when(mAccessibilityManager.getRecommendedTimeoutMillis(anyInt(), anyInt())).thenReturn(
a11yTimeout);
@@ -134,14 +153,21 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
verify(mAccessibilityManager).getRecommendedTimeoutMillis(
DEFAULT_FADE_OUT_ANIMATION_DELAY_MS, AccessibilityManager.FLAG_CONTENT_ICONS
| AccessibilityManager.FLAG_CONTENT_CONTROLS);
- final ArgumentCaptor<Runnable> fadeOutCaptor = ArgumentCaptor.forClass(Runnable.class);
- final ArgumentCaptor<Long> fadeOutDelay = ArgumentCaptor.forClass(Long.class);
- verify(mSpyImageView).postOnAnimationDelayed(fadeOutCaptor.capture(),
- fadeOutDelay.capture());
- assertEquals(a11yTimeout, (long) fadeOutDelay.getValue());
+ verify(mSpyImageView).postOnAnimationDelayed(any(Runnable.class), eq((long) a11yTimeout));
+ }
+
+ @Test
+ public void showMagnificationButton_windowMode_verifyAnimationEndAction() {
+ // Execute the runnable immediately to run the animation.
+ doAnswer((invocation) -> {
+ final Runnable action = invocation.getArgument(0);
+ action.run();
+ return null;
+ }).when(mSpyImageView).postOnAnimationDelayed(any(Runnable.class), anyLong());
+
+ mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
// Verify the end action after fade-out.
- fadeOutCaptor.getValue().run();
final ArgumentCaptor<Runnable> endActionCaptor = ArgumentCaptor.forClass(Runnable.class);
verify(mViewPropertyAnimator).withEndAction(endActionCaptor.capture());
@@ -154,7 +180,7 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
@Test
public void onConfigurationChanged_buttonIsShowing_setImageResource() {
mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
- resetMockImageViewAndAnimator();
+ resetAndStubMockImageViewAndAnimator();
mMagnificationModeSwitch.onConfigurationChanged(ActivityInfo.CONFIG_DENSITY);
@@ -165,42 +191,46 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
@Test
public void performSingleTap_fullscreenMode_removeViewAndChangeSettingsValue() {
mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
- resetMockImageViewAndAnimator();
+ resetAndStubMockImageViewAndAnimator();
// Perform a single-tap
- final View.OnTouchListener listener = mTouchListenerCaptor.getValue();
- listener.onTouch(mSpyImageView, MotionEvent.obtain(
- 0, 0, ACTION_DOWN, 100, 100, 0));
+ final long downTime = SystemClock.uptimeMillis();
+ mTouchListener.onTouch(mSpyImageView,
+ obtainMotionEvent(downTime, 0, ACTION_DOWN, 100, 100));
+
verify(mViewPropertyAnimator).cancel();
- resetMockImageViewAndAnimator();
- listener.onTouch(mSpyImageView, MotionEvent.obtain(
- 0, ViewConfiguration.getTapTimeout(), ACTION_UP, 100, 100, 0));
+ resetAndStubMockImageViewAndAnimator();
+ mTouchListener.onTouch(mSpyImageView,
+ obtainMotionEvent(downTime, downTime, ACTION_UP, 100, 100));
+
verifyTapAction(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
}
@Test
- public void showMagnificationButton_performDragging_updateViewLayout() {
+ public void performDragging_showMagnificationButton_updateViewLayout() {
mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
- resetMockImageViewAndAnimator();
-
- // Perform dragging
- final View.OnTouchListener listener = mTouchListenerCaptor.getValue();
- final int offset = ViewConfiguration.get(mContext).getScaledTouchSlop();
+ resetAndStubMockImageViewAndAnimator();
final int previousMode = Settings.Secure.getIntForUser(mContext.getContentResolver(),
Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE, 0, UserHandle.USER_CURRENT);
- listener.onTouch(mSpyImageView, MotionEvent.obtain(
- 0, 0, ACTION_DOWN, 100, 100, 0));
+
+ // Perform dragging
+ final int offset = ViewConfiguration.get(mContext).getScaledTouchSlop() + 10;
+ final long downTime = SystemClock.uptimeMillis();
+ mTouchListener.onTouch(mSpyImageView, obtainMotionEvent(
+ downTime, 0, ACTION_DOWN, 100, 100));
verify(mViewPropertyAnimator).cancel();
- listener.onTouch(mSpyImageView, MotionEvent.obtain(
- 0, ViewConfiguration.getTapTimeout(), ACTION_MOVE, 100 + offset, 100, 0));
+ mTouchListener.onTouch(mSpyImageView,
+ obtainMotionEvent(downTime, downTime, ACTION_MOVE, 100 + offset,
+ 100));
verify(mWindowManager).updateViewLayout(eq(mSpyImageView),
any(WindowManager.LayoutParams.class));
- resetMockImageViewAndAnimator();
- listener.onTouch(mSpyImageView, MotionEvent.obtain(
- 0, ViewConfiguration.getTapTimeout() + 10, ACTION_UP, 100 + offset, 100, 0));
+ resetAndStubMockImageViewAndAnimator();
+ mTouchListener.onTouch(mSpyImageView, obtainMotionEvent(
+ downTime, downTime, ACTION_UP, 100 + offset, 100));
+
assertModeUnchanged(previousMode);
assertShowFadingAnimation(FADE_OUT_ALPHA);
}
@@ -208,18 +238,17 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
@Test
public void performSingleTapActionCanceled_showButtonAnimation() {
mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
- resetMockImageViewAndAnimator();
-
- // Perform single tap
- final View.OnTouchListener listener = mTouchListenerCaptor.getValue();
+ resetAndStubMockImageViewAndAnimator();
final int previousMode = Settings.Secure.getInt(mContext.getContentResolver(),
Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE, 0);
- listener.onTouch(mSpyImageView, MotionEvent.obtain(
- 0, 0, ACTION_DOWN, 100, 100, 0));
- resetMockImageViewAndAnimator();
- listener.onTouch(mSpyImageView, MotionEvent.obtain(
- 0, ViewConfiguration.getTapTimeout(), ACTION_CANCEL, 100, 100, 0));
+ final long downTime = SystemClock.uptimeMillis();
+ mTouchListener.onTouch(mSpyImageView, obtainMotionEvent(
+ downTime, downTime, ACTION_DOWN, 100, 100));
+ resetAndStubMockImageViewAndAnimator();
+ mTouchListener.onTouch(mSpyImageView, obtainMotionEvent(
+ downTime, downTime, ACTION_CANCEL, 100, 100));
+
assertModeUnchanged(previousMode);
assertShowFadingAnimation(FADE_OUT_ALPHA);
}
@@ -227,21 +256,21 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
@Test
public void performDraggingActionCanceled_showButtonAnimation() {
mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
- resetMockImageViewAndAnimator();
-
- // Perform dragging
- final View.OnTouchListener listener = mTouchListenerCaptor.getValue();
- final int offset = ViewConfiguration.get(mContext).getScaledTouchSlop();
+ resetAndStubMockImageViewAndAnimator();
final int previousMode = Settings.Secure.getInt(mContext.getContentResolver(),
Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE, 0);
- listener.onTouch(mSpyImageView, MotionEvent.obtain(
- 0, 0, ACTION_DOWN, 100, 100, 0));
- listener.onTouch(mSpyImageView, MotionEvent.obtain(
- 0, ViewConfiguration.getTapTimeout(), ACTION_MOVE, 100 + offset, 100, 0));
-
- resetMockImageViewAndAnimator();
- listener.onTouch(mSpyImageView, MotionEvent.obtain(
- 0, ViewConfiguration.getTapTimeout(), ACTION_CANCEL, 100 + offset, 100, 0));
+
+ // Perform dragging
+ final long downTime = SystemClock.uptimeMillis();
+ final int offset = ViewConfiguration.get(mContext).getScaledTouchSlop() + 10;
+ mTouchListener.onTouch(mSpyImageView, obtainMotionEvent(
+ 0, 0, ACTION_DOWN, 100, 100));
+ mTouchListener.onTouch(mSpyImageView, obtainMotionEvent(
+ downTime, downTime, ACTION_MOVE, 100 + offset, 100));
+ resetAndStubMockImageViewAndAnimator();
+ mTouchListener.onTouch(mSpyImageView, obtainMotionEvent(
+ downTime, downTime, ACTION_CANCEL, 100 + offset, 100));
+
assertModeUnchanged(previousMode);
assertShowFadingAnimation(FADE_OUT_ALPHA);
}
@@ -266,7 +295,7 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
@Test
public void performA11yActions_showWindowModeButton_verifyTapAction() {
mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW);
- resetMockImageViewAndAnimator();
+ resetAndStubMockImageViewAndAnimator();
mSpyImageView.performAccessibilityAction(
ACTION_CLICK.getId(), null);
@@ -278,7 +307,7 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
public void showButton_showFadeOutAnimation_fadeOutAnimationCanceled() {
mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
assertShowFadingAnimation(FADE_OUT_ALPHA);
- resetMockImageViewAndAnimator();
+ resetAndStubMockImageViewAndAnimator();
mMagnificationModeSwitch.showButton(ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN);
@@ -327,7 +356,7 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
} else { // Fade-out
verify(mSpyImageView).postOnAnimationDelayed(runnableCaptor.capture(), anyLong());
}
- resetMockAnimator();
+ resetAndStubMockAnimator();
runnableCaptor.getValue().run();
@@ -336,20 +365,15 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
verify(mViewPropertyAnimator).start();
}
- private void resetMockImageViewAndAnimator() {
+ private void resetAndStubMockImageViewAndAnimator() {
+ resetAndStubMockAnimator();
Mockito.reset(mSpyImageView);
- doAnswer(invocation -> null).when(mSpyImageView).setOnTouchListener(
- mTouchListenerCaptor.capture());
- resetMockAnimator();
+ doReturn(mViewPropertyAnimator).when(mSpyImageView).animate();
}
- private void resetMockAnimator() {
+ private void resetAndStubMockAnimator() {
Mockito.reset(mViewPropertyAnimator);
- when(mViewPropertyAnimator.setDuration(anyLong())).thenReturn(mViewPropertyAnimator);
- when(mViewPropertyAnimator.alpha(anyFloat())).thenReturn(mViewPropertyAnimator);
- when(mViewPropertyAnimator.withEndAction(any(Runnable.class))).thenReturn(
- mViewPropertyAnimator);
- when(mSpyImageView.animate()).thenReturn(mViewPropertyAnimator);
+ doNothing().when(mViewPropertyAnimator).start();
}
/**
@@ -366,4 +390,11 @@ public class MagnificationModeSwitchTest extends SysuiTestCase {
Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE, 0, UserHandle.USER_CURRENT);
assertEquals(expectedMode, actualMode);
}
+
+ private MotionEvent obtainMotionEvent(long downTime, long eventTime, int action, float x,
+ float y) {
+ MotionEvent event = MotionEvent.obtain(downTime, eventTime, action, x, y, 0);
+ mMotionEvents.add(event);
+ return event;
+ }
}