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