FingerprintGestureControllerTest.java revision 27fcd9c97a2ceb50bab026237390207e5ee9e290
1/* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.server.accessibility; 18 19import android.accessibilityservice.FingerprintGestureController; 20import android.accessibilityservice.FingerprintGestureController.FingerprintGestureCallback; 21import android.accessibilityservice.IAccessibilityServiceConnection; 22import android.os.Looper; 23import org.junit.Before; 24import org.junit.BeforeClass; 25import org.junit.Test; 26import org.mockito.Mock; 27import org.mockito.MockitoAnnotations; 28 29import static android.accessibilityservice.FingerprintGestureController.FINGERPRINT_GESTURE_SWIPE_DOWN; 30 31import static org.junit.Assert.assertFalse; 32import static org.junit.Assert.assertTrue; 33import static org.mockito.Mockito.reset; 34import static org.mockito.Mockito.times; 35import static org.mockito.Mockito.verify; 36import static org.mockito.Mockito.verifyZeroInteractions; 37import static org.mockito.Mockito.when; 38 39/** 40 * Tests for FingerprintGestureController. 41 * TODO: These tests aren't really for server code, so this isn't their ideal home. 42 */ 43public class FingerprintGestureControllerTest { 44 @Mock IAccessibilityServiceConnection mMockAccessibilityServiceConnection; 45 @Mock FingerprintGestureCallback mMockFingerprintGestureCallback; 46 FingerprintGestureController mFingerprintGestureController; 47 48 @BeforeClass 49 public static void oneTimeInitialization() { 50 if (Looper.myLooper() == null) { 51 Looper.prepare(); 52 } 53 } 54 55 @Before 56 public void setUp() { 57 MockitoAnnotations.initMocks(this); 58 mFingerprintGestureController = 59 new FingerprintGestureController(mMockAccessibilityServiceConnection); 60 } 61 62 @Test 63 public void testIsGestureDetectionActive_returnsValueFromServer() throws Exception { 64 when(mMockAccessibilityServiceConnection.isFingerprintGestureDetectionAvailable()) 65 .thenReturn(true); 66 assertTrue(mFingerprintGestureController.isGestureDetectionAvailable()); 67 when(mMockAccessibilityServiceConnection.isFingerprintGestureDetectionAvailable()) 68 .thenReturn(false); 69 assertFalse(mFingerprintGestureController.isGestureDetectionAvailable()); 70 } 71 72 @Test 73 public void testCallbacks_withNoListeners_shouldNotCrash() { 74 mFingerprintGestureController.onGestureDetectionActiveChanged(true); 75 mFingerprintGestureController.onGesture(FINGERPRINT_GESTURE_SWIPE_DOWN); 76 } 77 78 @Test 79 public void testDetectionActiveCallback_noHandler_shouldCallback() { 80 mFingerprintGestureController.registerFingerprintGestureCallback( 81 mMockFingerprintGestureCallback, null); 82 mFingerprintGestureController.onGestureDetectionActiveChanged(true); 83 verify(mMockFingerprintGestureCallback, times(1)) 84 .onGestureDetectionAvailabilityChanged(true); 85 mFingerprintGestureController.onGestureDetectionActiveChanged(false); 86 verify(mMockFingerprintGestureCallback, times(1)) 87 .onGestureDetectionAvailabilityChanged(false); 88 89 reset(mMockFingerprintGestureCallback); 90 mFingerprintGestureController.unregisterFingerprintGestureCallback( 91 mMockFingerprintGestureCallback); 92 mFingerprintGestureController.onGestureDetectionActiveChanged(true); 93 mFingerprintGestureController.onGestureDetectionActiveChanged(false); 94 verifyZeroInteractions(mMockFingerprintGestureCallback); 95 } 96 97 @Test 98 public void testDetectionActiveCallback_withHandler_shouldPostRunnableToHandler() { 99 MessageCapturingHandler messageCapturingHandler = new MessageCapturingHandler((message) -> { 100 message.getCallback().run(); 101 return true; 102 }); 103 104 mFingerprintGestureController.registerFingerprintGestureCallback( 105 mMockFingerprintGestureCallback, messageCapturingHandler); 106 mFingerprintGestureController.onGestureDetectionActiveChanged(true); 107 verify(mMockFingerprintGestureCallback, times(0)) 108 .onGestureDetectionAvailabilityChanged(true); 109 messageCapturingHandler.sendLastMessage(); 110 verify(mMockFingerprintGestureCallback, times(1)) 111 .onGestureDetectionAvailabilityChanged(true); 112 113 mFingerprintGestureController.onGestureDetectionActiveChanged(false); 114 verify(mMockFingerprintGestureCallback, times(0)) 115 .onGestureDetectionAvailabilityChanged(false); 116 messageCapturingHandler.sendLastMessage(); 117 verify(mMockFingerprintGestureCallback, times(1)) 118 .onGestureDetectionAvailabilityChanged(false); 119 120 reset(mMockFingerprintGestureCallback); 121 mFingerprintGestureController.unregisterFingerprintGestureCallback( 122 mMockFingerprintGestureCallback); 123 mFingerprintGestureController.onGestureDetectionActiveChanged(true); 124 mFingerprintGestureController.onGestureDetectionActiveChanged(false); 125 assertFalse(messageCapturingHandler.hasMessages()); 126 verifyZeroInteractions(mMockFingerprintGestureCallback); 127 } 128 129 @Test 130 public void testGestureCallback_noHandler_shouldCallListener() { 131 mFingerprintGestureController.registerFingerprintGestureCallback( 132 mMockFingerprintGestureCallback, null); 133 mFingerprintGestureController.onGesture(FINGERPRINT_GESTURE_SWIPE_DOWN); 134 verify(mMockFingerprintGestureCallback, times(1)).onGesture(FINGERPRINT_GESTURE_SWIPE_DOWN); 135 136 reset(mMockFingerprintGestureCallback); 137 mFingerprintGestureController.unregisterFingerprintGestureCallback( 138 mMockFingerprintGestureCallback); 139 mFingerprintGestureController.onGesture(FINGERPRINT_GESTURE_SWIPE_DOWN); 140 verifyZeroInteractions(mMockFingerprintGestureCallback); 141 } 142 143 @Test 144 public void testGestureCallback_withHandler_shouldPostRunnableToHandler() { 145 MessageCapturingHandler messageCapturingHandler = new MessageCapturingHandler((message) -> { 146 message.getCallback().run(); 147 return true; 148 }); 149 150 mFingerprintGestureController.registerFingerprintGestureCallback( 151 mMockFingerprintGestureCallback, messageCapturingHandler); 152 mFingerprintGestureController.onGesture(FINGERPRINT_GESTURE_SWIPE_DOWN); 153 verify(mMockFingerprintGestureCallback, times(0)).onGesture(FINGERPRINT_GESTURE_SWIPE_DOWN); 154 messageCapturingHandler.sendLastMessage(); 155 verify(mMockFingerprintGestureCallback, times(1)).onGesture(FINGERPRINT_GESTURE_SWIPE_DOWN); 156 157 reset(mMockFingerprintGestureCallback); 158 mFingerprintGestureController.unregisterFingerprintGestureCallback( 159 mMockFingerprintGestureCallback); 160 mFingerprintGestureController.onGesture(FINGERPRINT_GESTURE_SWIPE_DOWN); 161 assertFalse(messageCapturingHandler.hasMessages()); 162 verifyZeroInteractions(mMockFingerprintGestureCallback); 163 } 164} 165