1 /*
2  * Copyright (C) 2016 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;
18 
19 import static org.mockito.Mockito.spy;
20 
21 import android.os.Handler;
22 import android.os.Looper;
23 import android.util.Log;
24 
25 import com.android.internal.telephony.PhoneConfigurationManager;
26 
27 import org.mockito.MockitoAnnotations;
28 
29 import java.util.concurrent.CountDownLatch;
30 import java.util.concurrent.TimeUnit;
31 
32 /**
33  * Helper class to load Mockito Resources into a test.
34  */
35 public class TelephonyTestBase {
36 
37     protected TestContext mContext;
38 
setUp()39     public void setUp() throws Exception {
40         MockitoAnnotations.initMocks(this);
41         mContext = spy(new TestContext());
42         // Set up the looper if it does not exist on the test thread.
43         if (Looper.myLooper() == null) {
44             Looper.prepare();
45             // Wait until the looper is not null anymore
46             for(int i = 0; i < 5; i++) {
47                 if (Looper.myLooper() != null) {
48                     break;
49                 }
50                 Looper.prepare();
51                 Thread.sleep(100);
52             }
53         }
54     }
55 
tearDown()56     public void tearDown() throws Exception {
57         // Ensure there are no static references to handlers after test completes.
58         PhoneConfigurationManager.unregisterAllMultiSimConfigChangeRegistrants();
59     }
60 
waitForHandlerAction(Handler h, long timeoutMillis)61     protected final void waitForHandlerAction(Handler h, long timeoutMillis) {
62         final CountDownLatch lock = new CountDownLatch(1);
63         h.post(lock::countDown);
64         while (lock.getCount() > 0) {
65             try {
66                 lock.await(timeoutMillis, TimeUnit.MILLISECONDS);
67             } catch (InterruptedException e) {
68                 // do nothing
69             }
70         }
71     }
72 
waitForHandlerActionDelayed(Handler h, long timeoutMillis, long delayMs)73     protected final void waitForHandlerActionDelayed(Handler h, long timeoutMillis, long delayMs) {
74         final CountDownLatch lock = new CountDownLatch(1);
75         h.postDelayed(lock::countDown, delayMs);
76         while (lock.getCount() > 0) {
77             try {
78                 lock.await(timeoutMillis, TimeUnit.MILLISECONDS);
79             } catch (InterruptedException e) {
80                 // do nothing
81             }
82         }
83     }
84 
waitForMs(long ms)85     protected void waitForMs(long ms) {
86         try {
87             Thread.sleep(ms);
88         } catch (InterruptedException e) {
89             Log.e("TelephonyTestBase", "InterruptedException while waiting: " + e);
90         }
91     }
92 
getTestContext()93     protected TestContext getTestContext() {
94         return mContext;
95     }
96 }
97