Home | History | Annotate | Download | only in tests
      1 /* * Copyright (C) 2017 The Android Open Source Project
      2  *
      3  * Licensed under the Apache License, Version 2.0 (the "License");
      4  * you may not use this file except in compliance with the License.
      5  * You may obtain a copy of the License at
      6  *
      7  *      http://www.apache.org/licenses/LICENSE-2.0
      8  *
      9  * Unless required by applicable law or agreed to in writing, software
     10  * distributed under the License is distributed on an "AS IS" BASIS,
     11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12  * See the License for the specific language governing permissions and
     13  * limitations under the License
     14  */
     15 
     16 package com.android.server.telecom.tests;
     17 
     18 import android.media.AudioManager;
     19 import android.media.ToneGenerator;
     20 import android.test.suitebuilder.annotation.SmallTest;
     21 
     22 import com.android.server.telecom.Call;
     23 import com.android.server.telecom.DtmfLocalTonePlayer;
     24 import com.android.server.telecom.R;
     25 
     26 import org.mockito.Mock;
     27 
     28 import static org.mockito.Matchers.anyInt;
     29 import static org.mockito.Matchers.eq;
     30 import static org.mockito.Mockito.never;
     31 import static org.mockito.Mockito.verify;
     32 import static org.mockito.Mockito.when;
     33 
     34 public class DtmfLocalTonePlayerTest extends TelecomTestCase {
     35     private static final int TIMEOUT = 2000;
     36     @Mock DtmfLocalTonePlayer.ToneGeneratorProxy mToneProxy;
     37     @Mock Call mCall;
     38 
     39     DtmfLocalTonePlayer mPlayer;
     40 
     41     public void setUp() throws Exception {
     42         super.setUp();
     43         mContext = mComponentContextFixture.getTestDouble().getApplicationContext();
     44         mPlayer = new DtmfLocalTonePlayer(mToneProxy);
     45         when(mCall.getContext()).thenReturn(mContext);
     46     }
     47 
     48     @SmallTest
     49     public void testSupportedStart() {
     50         when(mContext.getResources().getBoolean(R.bool.allow_local_dtmf_tones)).thenReturn(true);
     51         when(mToneProxy.isPresent()).thenReturn(true);
     52         mPlayer.onForegroundCallChanged(null, mCall);
     53         waitForHandlerAction(mPlayer.getHandler(), TIMEOUT);
     54         verify(mToneProxy).create();
     55     }
     56 
     57     @SmallTest
     58     public void testUnsupportedStart() {
     59         when(mContext.getResources().getBoolean(R.bool.allow_local_dtmf_tones)).thenReturn(false);
     60         when(mToneProxy.isPresent()).thenReturn(true);
     61         mPlayer.onForegroundCallChanged(null, mCall);
     62         waitForHandlerAction(mPlayer.getHandler(), TIMEOUT);
     63         verify(mToneProxy, never()).create();
     64     }
     65 
     66     @SmallTest
     67     public void testPlayToneWhenUninitialized() {
     68         when(mContext.getResources().getBoolean(R.bool.allow_local_dtmf_tones)).thenReturn(false);
     69         when(mToneProxy.isPresent()).thenReturn(false);
     70         mPlayer.onForegroundCallChanged(null, mCall);
     71         mPlayer.playTone(mCall, '9');
     72         waitForHandlerAction(mPlayer.getHandler(), TIMEOUT);
     73         verify(mToneProxy, never()).startTone(anyInt(), anyInt());
     74     }
     75 
     76     @SmallTest
     77     public void testPlayToneWhenInitialized() {
     78         when(mContext.getResources().getBoolean(R.bool.allow_local_dtmf_tones)).thenReturn(true);
     79         when(mToneProxy.isPresent()).thenReturn(true);
     80         mPlayer.onForegroundCallChanged(null, mCall);
     81         mPlayer.playTone(mCall, '9');
     82         waitForHandlerAction(mPlayer.getHandler(), TIMEOUT);
     83         verify(mToneProxy).startTone(eq(ToneGenerator.TONE_DTMF_9), eq(-1));
     84     }
     85 
     86     @SmallTest
     87     public void testStopToneWhenUninitialized() {
     88         when(mContext.getResources().getBoolean(R.bool.allow_local_dtmf_tones)).thenReturn(false);
     89         when(mToneProxy.isPresent()).thenReturn(false);
     90         mPlayer.onForegroundCallChanged(null, mCall);
     91         mPlayer.stopTone(mCall);
     92         waitForHandlerAction(mPlayer.getHandler(), TIMEOUT);
     93         verify(mToneProxy, never()).stopTone();
     94     }
     95 
     96     @SmallTest
     97     public void testStopToneWhenInitialized() {
     98         when(mContext.getResources().getBoolean(R.bool.allow_local_dtmf_tones)).thenReturn(true);
     99         when(mToneProxy.isPresent()).thenReturn(true);
    100         mPlayer.onForegroundCallChanged(null, mCall);
    101         mPlayer.stopTone(mCall);
    102         waitForHandlerAction(mPlayer.getHandler(), TIMEOUT);
    103         verify(mToneProxy).stopTone();
    104     }
    105 
    106     @SmallTest
    107     public void testProperTeardown() {
    108         when(mContext.getResources().getBoolean(R.bool.allow_local_dtmf_tones)).thenReturn(true);
    109         when(mToneProxy.isPresent()).thenReturn(true);
    110         mPlayer.onForegroundCallChanged(null, mCall);
    111         mPlayer.onForegroundCallChanged(mCall, null);
    112         waitForHandlerAction(mPlayer.getHandler(), TIMEOUT);
    113         verify(mToneProxy).release();
    114     }
    115 }
    116