1 /* 2 * Copyright (C) 2022 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.systemui.statusbar.connectivity.ui 18 19 import android.telephony.SubscriptionInfo 20 import androidx.test.filters.SmallTest 21 import com.android.systemui.SysuiTestCase 22 import com.android.systemui.demomode.DemoModeController 23 import com.android.systemui.dump.DumpManager 24 import com.android.systemui.statusbar.connectivity.NetworkController 25 import com.android.systemui.statusbar.connectivity.SignalCallback 26 import com.android.systemui.util.mockito.mock 27 import com.android.systemui.util.mockito.withArgCaptor 28 import com.google.common.truth.Truth.assertThat 29 import org.junit.Before 30 import org.junit.Test 31 import org.mockito.Mock 32 import org.mockito.Mockito.verify 33 import org.mockito.Mockito.`when` as whenever 34 import org.mockito.MockitoAnnotations 35 36 @SmallTest 37 class MobileContextProviderTest : SysuiTestCase() { 38 @Mock private lateinit var networkController: NetworkController 39 @Mock private lateinit var dumpManager: DumpManager 40 @Mock private lateinit var demoModeController: DemoModeController 41 42 private lateinit var provider: MobileContextProvider 43 private lateinit var signalCallback: SignalCallback 44 45 @Before 46 fun setup() { 47 MockitoAnnotations.initMocks(this) 48 provider = 49 MobileContextProvider( 50 networkController, 51 dumpManager, 52 demoModeController, 53 ) 54 55 signalCallback = withArgCaptor { verify(networkController).addCallback(capture()) } 56 } 57 58 @Test 59 fun test_oneSubscription_contextHasMccMnc() { 60 // GIVEN there is one SubscriptionInfo 61 signalCallback.setSubs(listOf(SUB_1)) 62 63 // WHEN we ask for a mobile context 64 val ctx = provider.getMobileContextForSub(SUB_1_ID, context) 65 66 // THEN the configuration of that context reflect this subscription's MCC/MNC override 67 val config = ctx.resources.configuration 68 assertThat(config.mcc).isEqualTo(SUB_1_MCC) 69 assertThat(config.mnc).isEqualTo(SUB_1_MNC) 70 } 71 72 @Test 73 fun test_twoSubscriptions_eachContextReflectsMccMnc() { 74 // GIVEN there are two SubscriptionInfos 75 signalCallback.setSubs(listOf(SUB_1, SUB_2)) 76 77 // WHEN we ask for a mobile context for each sub 78 val ctx1 = provider.getMobileContextForSub(SUB_1_ID, context) 79 val ctx2 = provider.getMobileContextForSub(SUB_2_ID, context) 80 81 // THEN the configuration of each context reflect this subscription's MCC/MNC override 82 val config1 = ctx1.resources.configuration 83 assertThat(config1.mcc).isEqualTo(SUB_1_MCC) 84 assertThat(config1.mnc).isEqualTo(SUB_1_MNC) 85 86 val config2 = ctx2.resources.configuration 87 assertThat(config2.mcc).isEqualTo(SUB_2_MCC) 88 assertThat(config2.mnc).isEqualTo(SUB_2_MNC) 89 } 90 91 @Test 92 fun test_requestingContextForNonexistentSubscription_returnsGivenContext() { 93 // GIVEN no SubscriptionInfos 94 signalCallback.setSubs(listOf()) 95 96 // WHEN we ask for a mobile context for an unknown subscription 97 val ctx = provider.getMobileContextForSub(SUB_1_ID, context) 98 99 // THEN we get the original context back 100 assertThat(ctx).isEqualTo(context) 101 } 102 103 private val SUB_1_ID = 1 104 private val SUB_1_MCC = 123 105 private val SUB_1_MNC = 456 106 private val SUB_1 = 107 mock<SubscriptionInfo>().also { 108 whenever(it.subscriptionId).thenReturn(SUB_1_ID) 109 whenever(it.mcc).thenReturn(SUB_1_MCC) 110 whenever(it.mnc).thenReturn(SUB_1_MNC) 111 } 112 113 private val SUB_2_ID = 2 114 private val SUB_2_MCC = 666 115 private val SUB_2_MNC = 777 116 private val SUB_2 = 117 mock<SubscriptionInfo>().also { 118 whenever(it.subscriptionId).thenReturn(SUB_2_ID) 119 whenever(it.mcc).thenReturn(SUB_2_MCC) 120 whenever(it.mnc).thenReturn(SUB_2_MNC) 121 } 122 } 123