Home | History | Annotate | Download | only in accessibility
      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 
     17 package com.android.server.accessibility;
     18 
     19 import android.accessibilityservice.FingerprintGestureController;
     20 import android.accessibilityservice.FingerprintGestureController.FingerprintGestureCallback;
     21 import android.accessibilityservice.IAccessibilityServiceConnection;
     22 import android.os.Looper;
     23 import org.junit.Before;
     24 import org.junit.BeforeClass;
     25 import org.junit.Test;
     26 import org.mockito.Mock;
     27 import org.mockito.MockitoAnnotations;
     28 
     29 import static android.accessibilityservice.FingerprintGestureController.FINGERPRINT_GESTURE_SWIPE_DOWN;
     30 
     31 import static org.junit.Assert.assertFalse;
     32 import static org.junit.Assert.assertTrue;
     33 import static org.mockito.Mockito.reset;
     34 import static org.mockito.Mockito.times;
     35 import static org.mockito.Mockito.verify;
     36 import static org.mockito.Mockito.verifyZeroInteractions;
     37 import 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  */
     43 public 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))
    135                 .onGestureDetected(FINGERPRINT_GESTURE_SWIPE_DOWN);
    136 
    137         reset(mMockFingerprintGestureCallback);
    138         mFingerprintGestureController.unregisterFingerprintGestureCallback(
    139                 mMockFingerprintGestureCallback);
    140         mFingerprintGestureController.onGesture(FINGERPRINT_GESTURE_SWIPE_DOWN);
    141         verifyZeroInteractions(mMockFingerprintGestureCallback);
    142     }
    143 
    144     @Test
    145     public void testGestureCallback_withHandler_shouldPostRunnableToHandler() {
    146         MessageCapturingHandler messageCapturingHandler = new MessageCapturingHandler((message) -> {
    147             message.getCallback().run();
    148             return true;
    149         });
    150 
    151         mFingerprintGestureController.registerFingerprintGestureCallback(
    152                 mMockFingerprintGestureCallback, messageCapturingHandler);
    153         mFingerprintGestureController.onGesture(FINGERPRINT_GESTURE_SWIPE_DOWN);
    154         verify(mMockFingerprintGestureCallback, times(0))
    155                 .onGestureDetected(FINGERPRINT_GESTURE_SWIPE_DOWN);
    156         messageCapturingHandler.sendLastMessage();
    157         verify(mMockFingerprintGestureCallback, times(1))
    158                 .onGestureDetected(FINGERPRINT_GESTURE_SWIPE_DOWN);
    159 
    160         reset(mMockFingerprintGestureCallback);
    161         mFingerprintGestureController.unregisterFingerprintGestureCallback(
    162                 mMockFingerprintGestureCallback);
    163         mFingerprintGestureController.onGesture(FINGERPRINT_GESTURE_SWIPE_DOWN);
    164         assertFalse(messageCapturingHandler.hasMessages());
    165         verifyZeroInteractions(mMockFingerprintGestureCallback);
    166     }
    167 }
    168