blob: 75018df023cc14f991b95c5cf455ad3f5da5ea33 [file] [log] [blame]
Robert Snoeberger7dffd372020-04-01 17:32:44 -04001/*
2 * Copyright (C) 2020 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
17package com.android.systemui.media
18
Robert Snoeberger7dffd372020-04-01 17:32:44 -040019import android.testing.AndroidTestingRunner
20import android.testing.TestableLooper
21import android.view.View
22import android.widget.SeekBar
23import android.widget.TextView
24import androidx.test.filters.SmallTest
Robert Snoeberger7dffd372020-04-01 17:32:44 -040025import com.android.systemui.SysuiTestCase
26import com.google.common.truth.Truth.assertThat
Robert Snoeberger7dffd372020-04-01 17:32:44 -040027import org.junit.Before
28import org.junit.Test
29import org.junit.runner.RunWith
30import org.mockito.Mock
31import org.mockito.Mockito.mock
32import org.mockito.Mockito.`when` as whenever
33
34@SmallTest
35@RunWith(AndroidTestingRunner::class)
36@TestableLooper.RunWithLooper
37public class SeekBarObserverTest : SysuiTestCase() {
38
39 private lateinit var observer: SeekBarObserver
Robert Snoeberger45be3fb2020-05-19 02:00:43 -040040 @Mock private lateinit var mockHolder: PlayerViewHolder
Robert Snoeberger7dffd372020-04-01 17:32:44 -040041 private lateinit var seekBarView: SeekBar
42 private lateinit var elapsedTimeView: TextView
43 private lateinit var totalTimeView: TextView
44
45 @Before
46 fun setUp() {
Robert Snoeberger45be3fb2020-05-19 02:00:43 -040047 mockHolder = mock(PlayerViewHolder::class.java)
Robert Snoeberger7dffd372020-04-01 17:32:44 -040048 seekBarView = SeekBar(context)
49 elapsedTimeView = TextView(context)
50 totalTimeView = TextView(context)
Robert Snoeberger45be3fb2020-05-19 02:00:43 -040051 whenever(mockHolder.seekBar).thenReturn(seekBarView)
52 whenever(mockHolder.elapsedTimeView).thenReturn(elapsedTimeView)
53 whenever(mockHolder.totalTimeView).thenReturn(totalTimeView)
54 observer = SeekBarObserver(mockHolder)
Robert Snoeberger7dffd372020-04-01 17:32:44 -040055 }
56
57 @Test
58 fun seekBarGone() {
59 // WHEN seek bar is disabled
60 val isEnabled = false
Lucas Dupin81e9beb2020-05-14 19:28:36 -070061 val data = SeekBarViewModel.Progress(isEnabled, false, null, null)
Robert Snoeberger7dffd372020-04-01 17:32:44 -040062 observer.onChanged(data)
Robert Snoebergera9b8d7f2020-04-07 17:44:51 -040063 // THEN seek bar shows just a line with no text
64 assertThat(seekBarView.isEnabled()).isFalse()
65 assertThat(seekBarView.getThumb().getAlpha()).isEqualTo(0)
66 assertThat(elapsedTimeView.getText()).isEqualTo("")
67 assertThat(totalTimeView.getText()).isEqualTo("")
Robert Snoeberger7dffd372020-04-01 17:32:44 -040068 }
69
70 @Test
71 fun seekBarVisible() {
72 // WHEN seek bar is enabled
73 val isEnabled = true
Lucas Dupin81e9beb2020-05-14 19:28:36 -070074 val data = SeekBarViewModel.Progress(isEnabled, true, 3000, 12000)
Robert Snoeberger7dffd372020-04-01 17:32:44 -040075 observer.onChanged(data)
76 // THEN seek bar is visible
77 assertThat(seekBarView.getVisibility()).isEqualTo(View.VISIBLE)
78 assertThat(elapsedTimeView.getVisibility()).isEqualTo(View.VISIBLE)
79 assertThat(totalTimeView.getVisibility()).isEqualTo(View.VISIBLE)
80 }
81
82 @Test
83 fun seekBarProgress() {
84 // WHEN seek bar progress is about half
Lucas Dupin81e9beb2020-05-14 19:28:36 -070085 val data = SeekBarViewModel.Progress(true, true, 3000, 120000)
Robert Snoeberger7dffd372020-04-01 17:32:44 -040086 observer.onChanged(data)
87 // THEN seek bar is visible
88 assertThat(seekBarView.progress).isEqualTo(100)
89 assertThat(seekBarView.max).isEqualTo(120000)
90 assertThat(elapsedTimeView.getText()).isEqualTo("00:03")
91 assertThat(totalTimeView.getText()).isEqualTo("02:00")
92 }
93
94 @Test
95 fun seekBarDisabledWhenSeekNotAvailable() {
96 // WHEN seek is not available
97 val isSeekAvailable = false
Lucas Dupin81e9beb2020-05-14 19:28:36 -070098 val data = SeekBarViewModel.Progress(true, isSeekAvailable, 3000, 120000)
Robert Snoeberger7dffd372020-04-01 17:32:44 -040099 observer.onChanged(data)
100 // THEN seek bar is not enabled
101 assertThat(seekBarView.isEnabled()).isFalse()
102 }
103
104 @Test
105 fun seekBarEnabledWhenSeekNotAvailable() {
106 // WHEN seek is available
107 val isSeekAvailable = true
Lucas Dupin81e9beb2020-05-14 19:28:36 -0700108 val data = SeekBarViewModel.Progress(true, isSeekAvailable, 3000, 120000)
Robert Snoeberger7dffd372020-04-01 17:32:44 -0400109 observer.onChanged(data)
110 // THEN seek bar is not enabled
111 assertThat(seekBarView.isEnabled()).isTrue()
112 }
Robert Snoeberger7dffd372020-04-01 17:32:44 -0400113}