• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.robolectric.shadows;
2 
3 import static android.content.Context.TELEPHONY_SUBSCRIPTION_SERVICE;
4 import static android.os.Build.VERSION_CODES.N;
5 import static android.os.Build.VERSION_CODES.O_MR1;
6 import static android.os.Build.VERSION_CODES.P;
7 import static android.os.Build.VERSION_CODES.Q;
8 import static android.os.Build.VERSION_CODES.R;
9 import static android.os.Build.VERSION_CODES.TIRAMISU;
10 import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
11 import static com.google.common.truth.Truth.assertThat;
12 import static org.junit.Assert.assertThrows;
13 import static org.robolectric.Shadows.shadowOf;
14 
15 import android.os.Handler;
16 import android.os.Looper;
17 import android.telephony.SubscriptionInfo;
18 import android.telephony.SubscriptionManager;
19 import androidx.test.ext.junit.runners.AndroidJUnit4;
20 import org.junit.Before;
21 import org.junit.Test;
22 import org.junit.runner.RunWith;
23 import org.robolectric.annotation.Config;
24 import org.robolectric.shadows.ShadowSubscriptionManager.SubscriptionInfoBuilder;
25 
26 /** Test for {@link ShadowSubscriptionManager}. */
27 @RunWith(AndroidJUnit4.class)
28 @Config(minSdk = N)
29 public class ShadowSubscriptionManagerTest {
30 
31   private SubscriptionManager subscriptionManager;
32 
33   @Before
setUp()34   public void setUp() throws Exception {
35     subscriptionManager =
36         (SubscriptionManager)
37             getApplicationContext().getSystemService(TELEPHONY_SUBSCRIPTION_SERVICE);
38   }
39 
40   @Config(minSdk = R)
41   @Test
shouldGiveActiveDataSubscriptionId()42   public void shouldGiveActiveDataSubscriptionId() {
43     int testId = 42;
44     ShadowSubscriptionManager.setActiveDataSubscriptionId(testId);
45     assertThat(SubscriptionManager.getActiveDataSubscriptionId()).isEqualTo(testId);
46   }
47 
48   @Test
shouldGiveDefaultSubscriptionId()49   public void shouldGiveDefaultSubscriptionId() {
50     int testId = 42;
51     ShadowSubscriptionManager.setDefaultSubscriptionId(testId);
52     assertThat(SubscriptionManager.getDefaultSubscriptionId()).isEqualTo(testId);
53   }
54 
55   @Test
shouldGiveDefaultDataSubscriptionId()56   public void shouldGiveDefaultDataSubscriptionId() {
57     int testId = 42;
58     ShadowSubscriptionManager.setDefaultDataSubscriptionId(testId);
59     assertThat(SubscriptionManager.getDefaultDataSubscriptionId()).isEqualTo(testId);
60   }
61 
62   @Test
shouldGiveDefaultSmsSubscriptionId()63   public void shouldGiveDefaultSmsSubscriptionId() {
64     int testId = 42;
65     ShadowSubscriptionManager.setDefaultSmsSubscriptionId(testId);
66     assertThat(SubscriptionManager.getDefaultSmsSubscriptionId()).isEqualTo(testId);
67   }
68 
69   @Test
shouldGiveDefaultVoiceSubscriptionId()70   public void shouldGiveDefaultVoiceSubscriptionId() {
71     int testId = 42;
72     ShadowSubscriptionManager.setDefaultVoiceSubscriptionId(testId);
73     assertThat(SubscriptionManager.getDefaultVoiceSubscriptionId()).isEqualTo(testId);
74   }
75 
76   @Test
addOnSubscriptionsChangedListener_shouldCallbackImmediately()77   public void addOnSubscriptionsChangedListener_shouldCallbackImmediately() {
78     DummySubscriptionsChangedListener listener = new DummySubscriptionsChangedListener();
79     shadowOf(subscriptionManager).addOnSubscriptionsChangedListener(listener);
80 
81     assertThat(listener.subscriptionChangedCount).isEqualTo(1);
82   }
83 
84   @Test
addOnSubscriptionsChangedListener_shouldAddListener()85   public void addOnSubscriptionsChangedListener_shouldAddListener() {
86     DummySubscriptionsChangedListener listener = new DummySubscriptionsChangedListener();
87     shadowOf(subscriptionManager).addOnSubscriptionsChangedListener(listener);
88 
89     shadowOf(subscriptionManager)
90         .setActiveSubscriptionInfos(
91             SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo());
92 
93     assertThat(listener.subscriptionChangedCount).isEqualTo(2);
94   }
95 
96   @Test
97   public void
addOnSubscriptionsChangedListener_whenHasExecutorParameter_shouldCallbackImmediately()98       addOnSubscriptionsChangedListener_whenHasExecutorParameter_shouldCallbackImmediately() {
99     DummySubscriptionsChangedListener listener = new DummySubscriptionsChangedListener();
100     shadowOf(subscriptionManager)
101         .addOnSubscriptionsChangedListener(new Handler(Looper.getMainLooper())::post, listener);
102 
103     assertThat(listener.subscriptionChangedCount).isEqualTo(1);
104   }
105 
106   @Test
addOnSubscriptionsChangedListener_whenHasExecutorParameter_shouldAddListener()107   public void addOnSubscriptionsChangedListener_whenHasExecutorParameter_shouldAddListener() {
108     DummySubscriptionsChangedListener listener = new DummySubscriptionsChangedListener();
109     shadowOf(subscriptionManager)
110         .addOnSubscriptionsChangedListener(new Handler(Looper.getMainLooper())::post, listener);
111 
112     shadowOf(subscriptionManager)
113         .setActiveSubscriptionInfos(
114             SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo());
115 
116     assertThat(listener.subscriptionChangedCount).isEqualTo(2);
117   }
118 
119   @Test
removeOnSubscriptionsChangedListener_shouldRemoveListener()120   public void removeOnSubscriptionsChangedListener_shouldRemoveListener() {
121     DummySubscriptionsChangedListener listener = new DummySubscriptionsChangedListener();
122     DummySubscriptionsChangedListener listener2 = new DummySubscriptionsChangedListener();
123     shadowOf(subscriptionManager).addOnSubscriptionsChangedListener(listener);
124     shadowOf(subscriptionManager).addOnSubscriptionsChangedListener(listener2);
125 
126     shadowOf(subscriptionManager).removeOnSubscriptionsChangedListener(listener);
127     shadowOf(subscriptionManager)
128         .setActiveSubscriptionInfos(
129             SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo());
130 
131     assertThat(listener.subscriptionChangedCount).isEqualTo(1);
132     assertThat(listener2.subscriptionChangedCount).isEqualTo(2);
133   }
134 
135   @Test
hasOnSubscriptionsChangedListener_whenListenerNotExist_shouldReturnFalse()136   public void hasOnSubscriptionsChangedListener_whenListenerNotExist_shouldReturnFalse() {
137     DummySubscriptionsChangedListener listener = new DummySubscriptionsChangedListener();
138 
139     assertThat(shadowOf(subscriptionManager).hasOnSubscriptionsChangedListener(listener)).isFalse();
140   }
141 
142   @Test
hasOnSubscriptionsChangedListener_whenListenerExist_shouldReturnTrue()143   public void hasOnSubscriptionsChangedListener_whenListenerExist_shouldReturnTrue() {
144     DummySubscriptionsChangedListener listener = new DummySubscriptionsChangedListener();
145     shadowOf(subscriptionManager).addOnSubscriptionsChangedListener(listener);
146 
147     assertThat(shadowOf(subscriptionManager).hasOnSubscriptionsChangedListener(listener)).isTrue();
148   }
149 
150   @Test
getActiveSubscriptionInfo_shouldReturnInfoWithSubId()151   public void getActiveSubscriptionInfo_shouldReturnInfoWithSubId() {
152     SubscriptionInfo expectedSubscriptionInfo =
153         SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo();
154     shadowOf(subscriptionManager).setActiveSubscriptionInfos(expectedSubscriptionInfo);
155 
156     assertThat(shadowOf(subscriptionManager).getActiveSubscriptionInfo(123))
157         .isSameInstanceAs(expectedSubscriptionInfo);
158   }
159 
160   @Test
getActiveSubscriptionInfo_shouldThrowExceptionWhenNoPermissions()161   public void getActiveSubscriptionInfo_shouldThrowExceptionWhenNoPermissions() {
162     shadowOf(subscriptionManager).setReadPhoneStatePermission(false);
163     assertThrows(
164         SecurityException.class,
165         () ->
166             shadowOf(subscriptionManager)
167                 .getActiveSubscriptionInfo(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID));
168   }
169 
170   @Test
getActiveSubscriptionInfoList_shouldReturnInfoList()171   public void getActiveSubscriptionInfoList_shouldReturnInfoList() {
172     SubscriptionInfo expectedSubscriptionInfo =
173         SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo();
174     shadowOf(subscriptionManager).setActiveSubscriptionInfos(expectedSubscriptionInfo);
175 
176     assertThat(shadowOf(subscriptionManager).getActiveSubscriptionInfoList())
177         .containsExactly(expectedSubscriptionInfo);
178   }
179 
180   @Test
getActiveSubscriptionInfoList_shouldThrowExceptionWhenNoPermissions()181   public void getActiveSubscriptionInfoList_shouldThrowExceptionWhenNoPermissions() {
182     shadowOf(subscriptionManager).setReadPhoneStatePermission(false);
183     assertThrows(
184         SecurityException.class,
185         () -> shadowOf(subscriptionManager).getActiveSubscriptionInfoList());
186   }
187 
188   @Test
getActiveSubscriptionInfoForSimSlotIndex_shouldReturnInfoWithSlotIndex()189   public void getActiveSubscriptionInfoForSimSlotIndex_shouldReturnInfoWithSlotIndex() {
190     SubscriptionInfo expectedSubscriptionInfo =
191         SubscriptionInfoBuilder.newBuilder().setSimSlotIndex(123).buildSubscriptionInfo();
192     shadowOf(subscriptionManager).setActiveSubscriptionInfos(expectedSubscriptionInfo);
193 
194     assertThat(shadowOf(subscriptionManager).getActiveSubscriptionInfoForSimSlotIndex(123))
195         .isSameInstanceAs(expectedSubscriptionInfo);
196   }
197 
198   @Test
getActiveSubscriptionInfoForSimSlotIndex_shouldThrowExceptionWhenNoPermissions()199   public void getActiveSubscriptionInfoForSimSlotIndex_shouldThrowExceptionWhenNoPermissions() {
200     shadowOf(subscriptionManager).setReadPhoneStatePermission(false);
201     assertThrows(
202         SecurityException.class,
203         () -> shadowOf(subscriptionManager).getActiveSubscriptionInfoForSimSlotIndex(123));
204   }
205 
206   @Test
getActiveSubscriptionInfo_shouldReturnNullForNullList()207   public void getActiveSubscriptionInfo_shouldReturnNullForNullList() {
208     shadowOf(subscriptionManager).setActiveSubscriptionInfoList(null);
209     assertThat(shadowOf(subscriptionManager).getActiveSubscriptionInfo(123)).isNull();
210   }
211 
212   @Test
getActiveSubscriptionInfo_shouldReturnNullForNullVarargsList()213   public void getActiveSubscriptionInfo_shouldReturnNullForNullVarargsList() {
214     shadowOf(subscriptionManager).setActiveSubscriptionInfos((SubscriptionInfo[]) null);
215     assertThat(shadowOf(subscriptionManager).getActiveSubscriptionInfo(123)).isNull();
216   }
217 
218   @Test
getActiveSubscriptionInfo_shouldReturnNullForEmptyList()219   public void getActiveSubscriptionInfo_shouldReturnNullForEmptyList() {
220     shadowOf(subscriptionManager).setActiveSubscriptionInfos();
221     assertThat(shadowOf(subscriptionManager).getActiveSubscriptionInfo(123)).isNull();
222   }
223 
224   @Test
isNetworkRoaming_shouldReturnTrueIfSet()225   public void isNetworkRoaming_shouldReturnTrueIfSet() {
226     shadowOf(subscriptionManager).setNetworkRoamingStatus(123, /* isNetworkRoaming= */ true);
227     assertThat(shadowOf(subscriptionManager).isNetworkRoaming(123)).isTrue();
228   }
229 
230   /** Multi act-asserts are discouraged but here we are testing the set+unset. */
231   @Test
isNetworkRoaming_shouldReturnFalseIfUnset()232   public void isNetworkRoaming_shouldReturnFalseIfUnset() {
233     shadowOf(subscriptionManager).setNetworkRoamingStatus(123, /* isNetworkRoaming= */ true);
234     assertThat(shadowOf(subscriptionManager).isNetworkRoaming(123)).isTrue();
235 
236     shadowOf(subscriptionManager).setNetworkRoamingStatus(123, /* isNetworkRoaming= */ false);
237     assertThat(shadowOf(subscriptionManager).isNetworkRoaming(123)).isFalse();
238   }
239 
240   /** Multi act-asserts are discouraged but here we are testing the set+clear. */
241   @Test
isNetworkRoaming_shouldReturnFalseOnClear()242   public void isNetworkRoaming_shouldReturnFalseOnClear() {
243     shadowOf(subscriptionManager).setNetworkRoamingStatus(123, /* isNetworkRoaming= */ true);
244     assertThat(shadowOf(subscriptionManager).isNetworkRoaming(123)).isTrue();
245 
246     shadowOf(subscriptionManager).clearNetworkRoamingStatus();
247     assertThat(shadowOf(subscriptionManager).isNetworkRoaming(123)).isFalse();
248   }
249 
250   @Test
getActiveSubscriptionInfoCount_shouldReturnZeroIfActiveSubscriptionInfoListNotSet()251   public void getActiveSubscriptionInfoCount_shouldReturnZeroIfActiveSubscriptionInfoListNotSet() {
252     shadowOf(subscriptionManager).setActiveSubscriptionInfoList(null);
253 
254     assertThat(shadowOf(subscriptionManager).getActiveSubscriptionInfoCount()).isEqualTo(0);
255   }
256 
257   @Test
getActiveSubscriptionInfoCount_shouldReturnSizeOfActiveSubscriptionInfosList()258   public void getActiveSubscriptionInfoCount_shouldReturnSizeOfActiveSubscriptionInfosList() {
259     SubscriptionInfo expectedSubscriptionInfo =
260         SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo();
261     shadowOf(subscriptionManager).setActiveSubscriptionInfos(expectedSubscriptionInfo);
262 
263     assertThat(shadowOf(subscriptionManager).getActiveSubscriptionInfoCount()).isEqualTo(1);
264   }
265 
266   @Test
getActiveSubscriptionInfoCountMax_returnsSubscriptionListCount()267   public void getActiveSubscriptionInfoCountMax_returnsSubscriptionListCount() {
268     SubscriptionInfo subscriptionInfo =
269         SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo();
270     shadowOf(subscriptionManager).setActiveSubscriptionInfos(subscriptionInfo);
271 
272     assertThat(subscriptionManager.getActiveSubscriptionInfoCountMax()).isEqualTo(1);
273   }
274 
275   @Test
getActiveSubscriptionInfoCountMax_nullInfoListIsZero()276   public void getActiveSubscriptionInfoCountMax_nullInfoListIsZero() {
277     shadowOf(subscriptionManager).setActiveSubscriptionInfoList(null);
278 
279     assertThat(subscriptionManager.getActiveSubscriptionInfoCountMax()).isEqualTo(0);
280   }
281 
282   @Test
getActiveSubscriptionInfoCountMax_shouldThrowExceptionWhenNoPermissions()283   public void getActiveSubscriptionInfoCountMax_shouldThrowExceptionWhenNoPermissions() {
284     shadowOf(subscriptionManager).setReadPhoneStatePermission(false);
285     assertThrows(
286         SecurityException.class, () -> subscriptionManager.getActiveSubscriptionInfoCountMax());
287   }
288 
289   @Test
290   @Config(minSdk = O_MR1)
getAccessibleSubscriptionInfoList()291   public void getAccessibleSubscriptionInfoList() {
292     SubscriptionInfo expectedSubscriptionInfo =
293         SubscriptionInfoBuilder.newBuilder().setId(123).setIsEmbedded(true).buildSubscriptionInfo();
294 
295     // Default
296     assertThat(shadowOf(subscriptionManager).getAccessibleSubscriptionInfoList()).isEmpty();
297 
298     // Null vararg
299     shadowOf(subscriptionManager).setAccessibleSubscriptionInfos();
300     assertThat(shadowOf(subscriptionManager).getAccessibleSubscriptionInfoList()).isEmpty();
301 
302     // A specific subscription
303     shadowOf(subscriptionManager).setAccessibleSubscriptionInfos(expectedSubscriptionInfo);
304     assertThat(shadowOf(subscriptionManager).getAccessibleSubscriptionInfoList())
305         .containsExactly(expectedSubscriptionInfo);
306   }
307 
308   @Test
309   @Config(minSdk = O_MR1)
setAccessibleSubscriptionInfoList_triggersSubscriptionsChanged()310   public void setAccessibleSubscriptionInfoList_triggersSubscriptionsChanged() {
311     DummySubscriptionsChangedListener listener = new DummySubscriptionsChangedListener();
312     subscriptionManager.addOnSubscriptionsChangedListener(listener);
313     // Invoked upon registration, but that's not important for this test
314     int initialInvocationCount = listener.subscriptionChangedCount;
315 
316     shadowOf(subscriptionManager)
317         .setAccessibleSubscriptionInfos(
318             SubscriptionInfoBuilder.newBuilder()
319                 .setId(123)
320                 .setIsEmbedded(true)
321                 .buildSubscriptionInfo());
322 
323     assertThat(listener.subscriptionChangedCount - initialInvocationCount).isEqualTo(1);
324   }
325 
326   @Test
getAvailableSubscriptionInfoList()327   public void getAvailableSubscriptionInfoList() {
328     SubscriptionInfo expectedSubscriptionInfo =
329         SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo();
330 
331     // default
332     assertThat(shadowOf(subscriptionManager).getAvailableSubscriptionInfoList()).isEmpty();
333 
334     // null condition
335     shadowOf(subscriptionManager).setAvailableSubscriptionInfos();
336     assertThat(shadowOf(subscriptionManager).getAvailableSubscriptionInfoList()).isEmpty();
337 
338     // set a specific subscription
339     shadowOf(subscriptionManager).setAvailableSubscriptionInfos(expectedSubscriptionInfo);
340     assertThat(shadowOf(subscriptionManager).getAvailableSubscriptionInfoList()).hasSize(1);
341     assertThat(shadowOf(subscriptionManager).getAvailableSubscriptionInfoList().get(0))
342         .isSameInstanceAs(expectedSubscriptionInfo);
343   }
344 
345   @Test
setAvailableSubscriptionInfoList_triggersSubscriptionsChanged()346   public void setAvailableSubscriptionInfoList_triggersSubscriptionsChanged() {
347     DummySubscriptionsChangedListener listener = new DummySubscriptionsChangedListener();
348     subscriptionManager.addOnSubscriptionsChangedListener(listener);
349     // Invoked upon registration, but that's not important for this test
350     int initialInvocationCount = listener.subscriptionChangedCount;
351 
352     shadowOf(subscriptionManager)
353         .setAvailableSubscriptionInfos(
354             SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo());
355 
356     assertThat(listener.subscriptionChangedCount - initialInvocationCount).isEqualTo(1);
357   }
358 
359   @Test
360   @Config(maxSdk = P)
getPhoneId_shouldReturnPhoneIdIfSet()361   public void getPhoneId_shouldReturnPhoneIdIfSet() {
362     ShadowSubscriptionManager.putPhoneId(123, 456);
363     assertThat(SubscriptionManager.getPhoneId(123)).isEqualTo(456);
364   }
365 
366   @Test
367   @Config(maxSdk = P)
getPhoneId_shouldReturnInvalidIfNotSet()368   public void getPhoneId_shouldReturnInvalidIfNotSet() {
369     ShadowSubscriptionManager.putPhoneId(123, 456);
370     assertThat(SubscriptionManager.getPhoneId(456))
371         .isEqualTo(ShadowSubscriptionManager.INVALID_PHONE_INDEX);
372   }
373 
374   @Test
375   @Config(maxSdk = P)
getPhoneId_shouldReturnInvalidIfRemoved()376   public void getPhoneId_shouldReturnInvalidIfRemoved() {
377     ShadowSubscriptionManager.putPhoneId(123, 456);
378     ShadowSubscriptionManager.removePhoneId(123);
379     assertThat(SubscriptionManager.getPhoneId(123))
380         .isEqualTo(ShadowSubscriptionManager.INVALID_PHONE_INDEX);
381   }
382 
383   @Test
384   @Config(maxSdk = P)
getPhoneId_shouldReturnInvalidIfCleared()385   public void getPhoneId_shouldReturnInvalidIfCleared() {
386     ShadowSubscriptionManager.putPhoneId(123, 456);
387     ShadowSubscriptionManager.clearPhoneIds();
388     assertThat(SubscriptionManager.getPhoneId(123))
389         .isEqualTo(ShadowSubscriptionManager.INVALID_PHONE_INDEX);
390   }
391 
392   @Test
393   @Config(maxSdk = P)
getPhoneId_shouldReturnInvalidIfReset()394   public void getPhoneId_shouldReturnInvalidIfReset() {
395     ShadowSubscriptionManager.putPhoneId(123, 456);
396     ShadowSubscriptionManager.reset();
397     assertThat(SubscriptionManager.getPhoneId(123))
398         .isEqualTo(ShadowSubscriptionManager.INVALID_PHONE_INDEX);
399   }
400 
401   @Test
setMcc()402   public void setMcc() {
403     assertThat(
404             ShadowSubscriptionManager.SubscriptionInfoBuilder.newBuilder()
405                 .setMcc("123")
406                 .buildSubscriptionInfo()
407                 .getMcc())
408         .isEqualTo(123);
409   }
410 
411   @Test
setMnc()412   public void setMnc() {
413     assertThat(
414             ShadowSubscriptionManager.SubscriptionInfoBuilder.newBuilder()
415                 .setMnc("123")
416                 .buildSubscriptionInfo()
417                 .getMnc())
418         .isEqualTo(123);
419   }
420 
421   @Test
422   @Config(minSdk = TIRAMISU)
getPhoneNumber_phoneNumberNotSet_returnsEmptyString()423   public void getPhoneNumber_phoneNumberNotSet_returnsEmptyString() {
424     assertThat(subscriptionManager.getPhoneNumber(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID))
425         .isEqualTo("");
426   }
427 
428   @Test
429   @Config(minSdk = TIRAMISU)
getPhoneNumber_setPhoneNumber_returnsPhoneNumber()430   public void getPhoneNumber_setPhoneNumber_returnsPhoneNumber() {
431     shadowOf(subscriptionManager)
432         .setPhoneNumber(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, "123");
433     assertThat(subscriptionManager.getPhoneNumber(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID))
434         .isEqualTo("123");
435   }
436 
437   @Test
438   @Config(minSdk = TIRAMISU)
getPhoneNumber_shouldThrowExceptionWhenNoPermissions()439   public void getPhoneNumber_shouldThrowExceptionWhenNoPermissions() {
440     shadowOf(subscriptionManager).setReadPhoneNumbersPermission(false);
441     assertThrows(
442         SecurityException.class,
443         () ->
444             shadowOf(subscriptionManager)
445                 .getPhoneNumber(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID));
446   }
447 
448   @Test
449   @Config(minSdk = TIRAMISU)
getPhoneNumberWithSource_phoneNumberNotSet_returnsEmptyString()450   public void getPhoneNumberWithSource_phoneNumberNotSet_returnsEmptyString() {
451     assertThat(
452             subscriptionManager.getPhoneNumber(
453                 SubscriptionManager.DEFAULT_SUBSCRIPTION_ID,
454                 SubscriptionManager.PHONE_NUMBER_SOURCE_UICC))
455         .isEqualTo("");
456     assertThat(
457             subscriptionManager.getPhoneNumber(
458                 SubscriptionManager.DEFAULT_SUBSCRIPTION_ID,
459                 SubscriptionManager.PHONE_NUMBER_SOURCE_CARRIER))
460         .isEqualTo("");
461     assertThat(
462             subscriptionManager.getPhoneNumber(
463                 SubscriptionManager.DEFAULT_SUBSCRIPTION_ID,
464                 SubscriptionManager.PHONE_NUMBER_SOURCE_IMS))
465         .isEqualTo("");
466   }
467 
468   @Test
469   @Config(minSdk = TIRAMISU)
getPhoneNumberWithSource_setPhoneNumber_returnsPhoneNumber()470   public void getPhoneNumberWithSource_setPhoneNumber_returnsPhoneNumber() {
471     shadowOf(subscriptionManager)
472         .setPhoneNumber(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, "123");
473     assertThat(
474             subscriptionManager.getPhoneNumber(
475                 SubscriptionManager.DEFAULT_SUBSCRIPTION_ID,
476                 SubscriptionManager.PHONE_NUMBER_SOURCE_UICC))
477         .isEqualTo("123");
478     assertThat(
479             subscriptionManager.getPhoneNumber(
480                 SubscriptionManager.DEFAULT_SUBSCRIPTION_ID,
481                 SubscriptionManager.PHONE_NUMBER_SOURCE_CARRIER))
482         .isEqualTo("123");
483     assertThat(
484             subscriptionManager.getPhoneNumber(
485                 SubscriptionManager.DEFAULT_SUBSCRIPTION_ID,
486                 SubscriptionManager.PHONE_NUMBER_SOURCE_IMS))
487         .isEqualTo("123");
488   }
489 
490   @Test
491   @Config(minSdk = Q)
setIsOpportunistic_shouldReturnFalse()492   public void setIsOpportunistic_shouldReturnFalse() {
493     assertThat(
494             ShadowSubscriptionManager.SubscriptionInfoBuilder.newBuilder()
495                 .setIsOpportunistic(false)
496                 .buildSubscriptionInfo()
497                 .isOpportunistic())
498         .isFalse();
499   }
500 
501   @Test
502   @Config(minSdk = Q)
setIsOpportunistic_shouldReturnTrue()503   public void setIsOpportunistic_shouldReturnTrue() {
504     assertThat(
505             ShadowSubscriptionManager.SubscriptionInfoBuilder.newBuilder()
506                 .setIsOpportunistic(true)
507                 .buildSubscriptionInfo()
508                 .isOpportunistic())
509         .isTrue();
510   }
511 
512   private static class DummySubscriptionsChangedListener
513       extends SubscriptionManager.OnSubscriptionsChangedListener {
514     private int subscriptionChangedCount;
515 
516     @Override
onSubscriptionsChanged()517     public void onSubscriptionsChanged() {
518       subscriptionChangedCount++;
519     }
520   }
521 }
522