1 package com.android.systemui.qs
2 
3 import android.testing.AndroidTestingRunner
4 import android.testing.TestableLooper
5 import android.view.ViewGroup
6 import android.view.accessibility.AccessibilityNodeInfo
7 import android.widget.FrameLayout
8 import androidx.test.filters.SmallTest
9 import com.android.systemui.SysuiTestCase
10 import com.android.systemui.qs.logging.QSLogger
11 import com.google.common.truth.Truth
12 import org.junit.Before
13 import org.junit.Test
14 import org.junit.runner.RunWith
15 import org.mockito.Mock
16 import org.mockito.Mockito
17 import org.mockito.MockitoAnnotations
18 
19 @RunWith(AndroidTestingRunner::class)
20 @TestableLooper.RunWithLooper
21 @SmallTest
22 class QuickQSPanelTest : SysuiTestCase() {
23 
24     @Mock private lateinit var qsLogger: QSLogger
25 
26     private lateinit var testableLooper: TestableLooper
27     private lateinit var quickQSPanel: QuickQSPanel
28 
29     private lateinit var parentView: ViewGroup
30 
31     @Before
32     @Throws(Exception::class)
33     fun setup() {
34         MockitoAnnotations.initMocks(this)
35         testableLooper = TestableLooper.get(this)
36 
37         testableLooper.runWithLooper {
38             quickQSPanel = QuickQSPanel(mContext, null)
39             quickQSPanel.initialize(qsLogger)
40 
41             quickQSPanel.onFinishInflate()
42             // Provides a parent with non-zero size for QSPanel
43             parentView = FrameLayout(mContext).apply {
44                 addView(quickQSPanel)
45             }
46         }
47     }
48 
49     @Test
50     fun testHasExpandAccessibilityAction() {
51         val info = AccessibilityNodeInfo(quickQSPanel)
52         quickQSPanel.onInitializeAccessibilityNodeInfo(info)
53 
54         Truth.assertThat(info.actions and AccessibilityNodeInfo.ACTION_EXPAND).isNotEqualTo(0)
55         Truth.assertThat(info.actions and AccessibilityNodeInfo.ACTION_COLLAPSE).isEqualTo(0)
56     }
57 
58     @Test
59     fun testExpandActionCallsRunnable() {
60         val mockRunnable = Mockito.mock(Runnable::class.java)
61         quickQSPanel.setCollapseExpandAction(mockRunnable)
62 
63         quickQSPanel.performAccessibilityAction(AccessibilityNodeInfo.ACTION_EXPAND, null)
64         Mockito.verify(mockRunnable).run()
65     }
66 }