1 /*
2  * Copyright (C) 2023 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.pipeline.mobile.ui.model
18 
19 import androidx.test.filters.SmallTest
20 import com.android.settingslib.graph.SignalDrawable
21 import com.android.systemui.SysuiTestCase
22 import com.android.systemui.statusbar.pipeline.mobile.domain.model.SignalIconModel
23 import com.google.common.truth.Truth.assertThat
24 import platform.test.runner.parameterized.ParameterizedAndroidJunit4
25 import platform.test.runner.parameterized.Parameters
26 import org.junit.Test
27 import org.junit.runner.RunWith
28 
29 @SmallTest
30 @RunWith(ParameterizedAndroidJunit4::class)
31 internal class SignalIconModelParameterizedTest(private val testCase: TestCase) : SysuiTestCase() {
32     @Test
drawableFromModel_level0_numLevels4_noExclamation_notCarrierNetworkChangenull33     fun drawableFromModel_level0_numLevels4_noExclamation_notCarrierNetworkChange() {
34         val model =
35             SignalIconModel.Cellular(
36                 level = 0,
37                 numberOfLevels = 4,
38                 showExclamationMark = false,
39                 carrierNetworkChange = false
40             )
41 
42         val expected =
43             SignalDrawable.getState(/* level = */ 0, /* numLevels = */ 4, /* cutOut = */ false)
44 
45         assertThat(model.toSignalDrawableState()).isEqualTo(expected)
46     }
47 
48     @Test
runTestnull49     fun runTest() {
50         val model = testCase.toSignalIconModel()
51         assertThat(model.toSignalDrawableState()).isEqualTo(testCase.expected)
52     }
53 
54     internal data class TestCase(
55         val level: Int,
56         val numberOfLevels: Int,
57         val showExclamation: Boolean,
58         val carrierNetworkChange: Boolean,
59         val expected: Int,
60     ) {
toSignalIconModelnull61         fun toSignalIconModel() =
62             SignalIconModel.Cellular(
63                 level = level,
64                 numberOfLevels = numberOfLevels,
65                 showExclamationMark = showExclamation,
66                 carrierNetworkChange = carrierNetworkChange,
67             )
68 
69         override fun toString(): String =
70             "INPUT(level=$level," +
71                 "numberOfLevels=$numberOfLevels," +
72                 "showExclamation=$showExclamation," +
73                 "carrierNetworkChange=$carrierNetworkChange)"
74     }
75 
76     companion object {
77         @Parameters(name = "{0}") @JvmStatic fun data() = testData()
78 
79         private fun testData(): Collection<TestCase> =
80             listOf(
81                 TestCase(
82                     level = 0,
83                     numberOfLevels = 4,
84                     showExclamation = false,
85                     carrierNetworkChange = false,
86                     expected = SignalDrawable.getState(0, 4, false)
87                 ),
88                 TestCase(
89                     level = 0,
90                     numberOfLevels = 4,
91                     showExclamation = false,
92                     carrierNetworkChange = true,
93                     expected = SignalDrawable.getCarrierChangeState(4)
94                 ),
95                 TestCase(
96                     level = 2,
97                     numberOfLevels = 5,
98                     showExclamation = false,
99                     carrierNetworkChange = false,
100                     expected = SignalDrawable.getState(2, 5, false)
101                 ),
102                 TestCase(
103                     level = 2,
104                     numberOfLevels = 5,
105                     showExclamation = true,
106                     carrierNetworkChange = false,
107                     expected = SignalDrawable.getState(2, 5, true)
108                 ),
109                 TestCase(
110                     level = 2,
111                     numberOfLevels = 5,
112                     showExclamation = true,
113                     carrierNetworkChange = true,
114                     expected = SignalDrawable.getCarrierChangeState(5)
115                 ),
116             )
117     }
118 }
119