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.qs.tiles 18 19 import android.net.ConnectivityManager 20 import android.os.Handler 21 import android.testing.AndroidTestingRunner 22 import android.testing.TestableLooper 23 import androidx.test.filters.SmallTest 24 import com.android.internal.logging.MetricsLogger 25 import com.android.systemui.R 26 import com.android.systemui.SysuiTestCase 27 import com.android.systemui.broadcast.BroadcastDispatcher 28 import com.android.systemui.classifier.FalsingManagerFake 29 import com.android.systemui.plugins.ActivityStarter 30 import com.android.systemui.plugins.qs.QSTile 31 import com.android.systemui.plugins.statusbar.StatusBarStateController 32 import com.android.systemui.qs.QSHost 33 import com.android.systemui.qs.QsEventLogger 34 import com.android.systemui.qs.logging.QSLogger 35 import com.android.systemui.qs.tileimpl.QSTileImpl 36 import com.android.systemui.settings.UserTracker 37 import com.android.systemui.util.settings.GlobalSettings 38 import com.google.common.truth.Truth.assertThat 39 import dagger.Lazy 40 import org.junit.After 41 import org.junit.Before 42 import org.junit.Test 43 import org.junit.runner.RunWith 44 import org.mockito.Mock 45 import org.mockito.Mockito 46 import org.mockito.MockitoAnnotations 47 48 @RunWith(AndroidTestingRunner::class) 49 @TestableLooper.RunWithLooper(setAsMainLooper = true) 50 @SmallTest 51 class AirplaneModeTileTest : SysuiTestCase() { 52 @Mock 53 private lateinit var mHost: QSHost 54 @Mock 55 private lateinit var mMetricsLogger: MetricsLogger 56 @Mock 57 private lateinit var mStatusBarStateController: StatusBarStateController 58 @Mock 59 private lateinit var mActivityStarter: ActivityStarter 60 @Mock 61 private lateinit var mQsLogger: QSLogger 62 @Mock 63 private lateinit var mBroadcastDispatcher: BroadcastDispatcher 64 @Mock 65 private lateinit var mConnectivityManager: Lazy<ConnectivityManager> 66 @Mock 67 private lateinit var mGlobalSettings: GlobalSettings 68 @Mock 69 private lateinit var mUserTracker: UserTracker 70 @Mock 71 private lateinit var mUiEventLogger: QsEventLogger 72 private lateinit var mTestableLooper: TestableLooper 73 private lateinit var mTile: AirplaneModeTile 74 75 @Before 76 fun setUp() { 77 MockitoAnnotations.initMocks(this) 78 mTestableLooper = TestableLooper.get(this) 79 Mockito.`when`(mHost.context).thenReturn(mContext) 80 Mockito.`when`(mHost.userContext).thenReturn(mContext) 81 82 mTile = AirplaneModeTile( 83 mHost, 84 mUiEventLogger, 85 mTestableLooper.looper, 86 Handler(mTestableLooper.looper), 87 FalsingManagerFake(), 88 mMetricsLogger, 89 mStatusBarStateController, 90 mActivityStarter, 91 mQsLogger, 92 mBroadcastDispatcher, 93 mConnectivityManager, 94 mGlobalSettings, 95 mUserTracker) 96 } 97 98 @After 99 fun tearDown() { 100 mTile.destroy() 101 mTestableLooper.processAllMessages() 102 } 103 104 @Test 105 fun testIcon_whenDisabled_showsOffState() { 106 val state = QSTile.BooleanState() 107 108 mTile.handleUpdateState(state, 0) 109 110 assertThat(state.icon) 111 .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_airplane_icon_off)) 112 } 113 114 @Test 115 fun testIcon_whenEnabled_showsOnState() { 116 val state = QSTile.BooleanState() 117 118 mTile.handleUpdateState(state, 1) 119 120 assertThat(state.icon) 121 .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_airplane_icon_on)) 122 } 123 } 124