diff options
| author | 2020-12-04 08:30:02 +0000 | |
|---|---|---|
| committer | 2020-12-04 08:30:02 +0000 | |
| commit | 645e56e8247cbf3848da829a54e44e4bd1649687 (patch) | |
| tree | ea9b53faf17b95d2efeda39b595a3400230d39fb | |
| parent | 41572fda62f4b57469c06a3adbd08faa39d5de7a (diff) | |
| parent | d9061364e3b18d22e32f9c80011e853699cb6037 (diff) | |
Merge "refactor MagnificationModeSwitchTest"
| -rw-r--r-- | packages/SystemUI/tests/src/com/android/systemui/accessibility/MagnificationModeSwitchTest.java | 171 |
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; + } } |