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.media.controls.ui.drawable
18 
19 import android.graphics.Canvas
20 import android.graphics.Color
21 import android.graphics.LightingColorFilter
22 import android.graphics.Paint
23 import android.graphics.Rect
24 import android.testing.TestableLooper
25 import androidx.test.ext.junit.runners.AndroidJUnit4
26 import androidx.test.filters.SmallTest
27 import com.android.internal.graphics.ColorUtils
28 import com.android.systemui.SysuiTestCase
29 import com.android.systemui.util.mockito.any
30 import com.google.common.truth.Truth.assertThat
31 import org.junit.Before
32 import org.junit.Rule
33 import org.junit.Test
34 import org.junit.runner.RunWith
35 import org.mockito.ArgumentCaptor
36 import org.mockito.Captor
37 import org.mockito.Mock
38 import org.mockito.Mockito.times
39 import org.mockito.Mockito.verify
40 import org.mockito.junit.MockitoJUnit
41 
42 @SmallTest
43 @RunWith(AndroidJUnit4::class)
44 @TestableLooper.RunWithLooper
45 class SquigglyProgressTest : SysuiTestCase() {
46 
47     private val colorFilter = LightingColorFilter(Color.RED, Color.BLUE)
48     private val strokeWidth = 5f
49     private val alpha = 128
50     private val tint = Color.GREEN
51 
52     lateinit var squigglyProgress: SquigglyProgress
53     @Mock lateinit var canvas: Canvas
54     @Captor lateinit var paintCaptor: ArgumentCaptor<Paint>
55     @JvmField @Rule val mockitoRule = MockitoJUnit.rule()
56 
57     @Before
setupnull58     fun setup() {
59         squigglyProgress = SquigglyProgress()
60         squigglyProgress.waveLength = 30f
61         squigglyProgress.lineAmplitude = 10f
62         squigglyProgress.phaseSpeed = 8f
63         squigglyProgress.strokeWidth = strokeWidth
64         squigglyProgress.bounds = Rect(0, 0, 300, 30)
65     }
66 
67     @Test
testDrawPathAndLinenull68     fun testDrawPathAndLine() {
69         squigglyProgress.draw(canvas)
70 
71         verify(canvas, times(2)).drawPath(any(), paintCaptor.capture())
72     }
73 
74     @Test
testOnLevelChangednull75     fun testOnLevelChanged() {
76         assertThat(squigglyProgress.setLevel(5)).isFalse()
77         squigglyProgress.animate = true
78         assertThat(squigglyProgress.setLevel(4)).isTrue()
79     }
80 
81     @Test
testStrokeWidthnull82     fun testStrokeWidth() {
83         squigglyProgress.draw(canvas)
84 
85         verify(canvas, times(2)).drawPath(any(), paintCaptor.capture())
86         val (wavePaint, linePaint) = paintCaptor.getAllValues()
87 
88         assertThat(wavePaint.strokeWidth).isEqualTo(strokeWidth)
89         assertThat(linePaint.strokeWidth).isEqualTo(strokeWidth)
90     }
91 
92     @Test
testAlphanull93     fun testAlpha() {
94         squigglyProgress.alpha = alpha
95         squigglyProgress.draw(canvas)
96 
97         verify(canvas, times(2)).drawPath(any(), paintCaptor.capture())
98         val (wavePaint, linePaint) = paintCaptor.getAllValues()
99 
100         assertThat(squigglyProgress.alpha).isEqualTo(alpha)
101         assertThat(wavePaint.alpha).isEqualTo(alpha)
102         assertThat(linePaint.alpha).isEqualTo((alpha / 255f * DISABLED_ALPHA).toInt())
103     }
104 
105     @Test
testColorFilternull106     fun testColorFilter() {
107         squigglyProgress.colorFilter = colorFilter
108         squigglyProgress.draw(canvas)
109 
110         verify(canvas, times(2)).drawPath(any(), paintCaptor.capture())
111         val (wavePaint, linePaint) = paintCaptor.getAllValues()
112 
113         assertThat(wavePaint.colorFilter).isEqualTo(colorFilter)
114         assertThat(linePaint.colorFilter).isEqualTo(colorFilter)
115     }
116 
117     @Test
testTintnull118     fun testTint() {
119         squigglyProgress.setTint(tint)
120         squigglyProgress.draw(canvas)
121 
122         verify(canvas, times(2)).drawPath(any(), paintCaptor.capture())
123         val (wavePaint, linePaint) = paintCaptor.getAllValues()
124 
125         assertThat(wavePaint.color).isEqualTo(tint)
126         assertThat(linePaint.color).isEqualTo(ColorUtils.setAlphaComponent(tint, DISABLED_ALPHA))
127     }
128 }
129