blob: ad908e7f800033598b13827366ec831e0471db71 [file] [log] [blame]
package com.android.systemui.statusbar
import android.media.AudioAttributes
import android.os.UserHandle
import android.os.VibrationAttributes
import android.os.VibrationEffect
import android.os.Vibrator
import android.testing.AndroidTestingRunner
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.util.mockito.eq
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentCaptor
import org.mockito.Captor
import org.mockito.Mock
import org.mockito.Mockito.`when` as whenever
import org.mockito.Mockito.any
import org.mockito.Mockito.mock
import org.mockito.Mockito.verify
import org.mockito.junit.MockitoJUnit
import java.util.concurrent.Executor
@RunWith(AndroidTestingRunner::class)
@SmallTest
class VibratorHelperTest : SysuiTestCase() {
@JvmField @Rule
var rule = MockitoJUnit.rule()
@Mock lateinit var vibrator: Vibrator
@Mock lateinit var executor: Executor
@Captor lateinit var backgroundTaskCaptor: ArgumentCaptor<Runnable>
lateinit var vibratorHelper: VibratorHelper
@Before
fun setup() {
vibratorHelper = VibratorHelper(vibrator, executor)
whenever(vibrator.hasVibrator()).thenReturn(true)
}
@Test
fun testVibrate() {
vibratorHelper.vibrate(VibrationEffect.EFFECT_CLICK)
verifyAsync().vibrate(any(VibrationEffect::class.java),
any(VibrationAttributes::class.java))
}
@Test
fun testVibrate2() {
vibratorHelper.vibrate(UserHandle.USER_CURRENT, "package",
mock(VibrationEffect::class.java), "reason",
mock(VibrationAttributes::class.java))
verifyAsync().vibrate(eq(UserHandle.USER_CURRENT), eq("package"),
any(VibrationEffect::class.java), eq("reason"),
any(VibrationAttributes::class.java))
}
@Test
fun testVibrate3() {
vibratorHelper.vibrate(mock(VibrationEffect::class.java), mock(AudioAttributes::class.java))
verifyAsync().vibrate(any(VibrationEffect::class.java), any(AudioAttributes::class.java))
}
@Test
fun testVibrate4() {
vibratorHelper.vibrate(mock(VibrationEffect::class.java))
verifyAsync().vibrate(any(VibrationEffect::class.java))
}
@Test
fun testHasVibrator() {
assertThat(vibratorHelper.hasVibrator()).isTrue()
verify(vibrator).hasVibrator()
}
@Test
fun testCancel() {
vibratorHelper.cancel()
verifyAsync().cancel()
}
private fun verifyAsync(): Vibrator {
verify(executor).execute(backgroundTaskCaptor.capture())
verify(vibrator).hasVibrator()
backgroundTaskCaptor.value.run()
return verify(vibrator)
}
}