diff options
| author | George Zacharia <george.zcharia@gmail.com> | 2023-07-02 14:33:47 +0530 |
|---|---|---|
| committer | George Zacharia <george.zcharia@gmail.com> | 2023-07-02 14:33:47 +0530 |
| commit | 913b11dfd2b52e445c773838c766f0d4f8ba0d05 (patch) | |
| tree | adb07f584833593bad6fca5495927c276ceef531 /tests/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModelTest.kt | |
| parent | b2d9a4961b3804f79c151630421d480846fd0176 (diff) | |
| parent | cc6f666d7c0bc3b6927f6e9e3c7e46123be6263d (diff) | |
Merge tag 'android-13.0.0_r52' of https://android.googlesource.com/platform/packages/apps/ThemePicker into HEADHEADt13.0
Android 13.0.0 Release 52 (TQ3A.230605.012)
Change-Id: I2cea11fa2f1f02fbd3c9d21cfc1697a79d42a5b7
Diffstat (limited to 'tests/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModelTest.kt')
| -rw-r--r-- | tests/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModelTest.kt | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/tests/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModelTest.kt b/tests/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModelTest.kt new file mode 100644 index 00000000..d53288d0 --- /dev/null +++ b/tests/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModelTest.kt @@ -0,0 +1,156 @@ +package com.android.customization.picker.clock.ui.viewmodel + +import android.content.Context +import androidx.test.filters.SmallTest +import androidx.test.platform.app.InstrumentationRegistry +import com.android.customization.picker.clock.data.repository.FakeClockPickerRepository +import com.android.customization.picker.clock.domain.interactor.ClockPickerInteractor +import com.android.customization.picker.clock.shared.ClockSize +import com.android.customization.picker.clock.shared.model.ClockMetadataModel +import com.android.customization.picker.color.data.repository.FakeColorPickerRepository +import com.android.customization.picker.color.domain.interactor.ColorPickerInteractor +import com.android.customization.picker.color.domain.interactor.ColorPickerSnapshotRestorer +import com.android.wallpaper.testing.FakeSnapshotStore +import com.android.wallpaper.testing.collectLastValue +import com.google.common.truth.Truth.assertThat +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.test.StandardTestDispatcher +import kotlinx.coroutines.test.advanceTimeBy +import kotlinx.coroutines.test.resetMain +import kotlinx.coroutines.test.runTest +import kotlinx.coroutines.test.setMain +import org.junit.After +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.JUnit4 + +@OptIn(ExperimentalCoroutinesApi::class) +@SmallTest +@RunWith(JUnit4::class) +class ClockSettingsViewModelTest { + + private lateinit var context: Context + private lateinit var colorPickerInteractor: ColorPickerInteractor + private lateinit var underTest: ClockSettingsViewModel + private lateinit var colorMap: Map<String, ClockColorViewModel> + + @Before + fun setUp() { + val testDispatcher = StandardTestDispatcher() + Dispatchers.setMain(testDispatcher) + context = InstrumentationRegistry.getInstrumentation().targetContext + colorPickerInteractor = + ColorPickerInteractor( + repository = FakeColorPickerRepository(context = context), + snapshotRestorer = { + ColorPickerSnapshotRestorer(interactor = colorPickerInteractor).apply { + runBlocking { setUpSnapshotRestorer(store = FakeSnapshotStore()) } + } + }, + ) + underTest = + ClockSettingsViewModel.Factory( + context = context, + clockPickerInteractor = ClockPickerInteractor(FakeClockPickerRepository()), + colorPickerInteractor = colorPickerInteractor, + ) + .create(ClockSettingsViewModel::class.java) + colorMap = ClockColorViewModel.getPresetColorMap(context.resources) + } + + @After + fun tearDown() { + Dispatchers.resetMain() + } + + @Test + fun clickOnColorSettingsTab() = runTest { + val tabs = collectLastValue(underTest.tabs) + assertThat(tabs()?.get(0)?.name).isEqualTo("Color") + assertThat(tabs()?.get(0)?.isSelected).isTrue() + assertThat(tabs()?.get(1)?.name).isEqualTo("Size") + assertThat(tabs()?.get(1)?.isSelected).isFalse() + + tabs()?.get(1)?.onClicked?.invoke() + assertThat(tabs()?.get(0)?.isSelected).isFalse() + assertThat(tabs()?.get(1)?.isSelected).isTrue() + } + + @Test + fun setSelectedColor() = runTest { + val observedClockColorOptions = collectLastValue(underTest.colorOptions) + val observedSelectedColorOptionPosition = + collectLastValue(underTest.selectedColorOptionPosition) + val observedSliderProgress = collectLastValue(underTest.sliderProgress) + val observedSeedColor = collectLastValue(underTest.seedColor) + // Advance COLOR_OPTIONS_EVENT_UPDATE_DELAY_MILLIS since there is a delay from colorOptions + advanceTimeBy(ClockSettingsViewModel.COLOR_OPTIONS_EVENT_UPDATE_DELAY_MILLIS) + assertThat(observedClockColorOptions()!![0].isSelected).isTrue() + assertThat(observedClockColorOptions()!![0].onClick).isNull() + assertThat(observedSelectedColorOptionPosition()).isEqualTo(0) + + observedClockColorOptions()!![1].onClick?.invoke() + // Advance COLOR_OPTIONS_EVENT_UPDATE_DELAY_MILLIS since there is a delay from colorOptions + advanceTimeBy(ClockSettingsViewModel.COLOR_OPTIONS_EVENT_UPDATE_DELAY_MILLIS) + assertThat(observedClockColorOptions()!![1].isSelected).isTrue() + assertThat(observedClockColorOptions()!![1].onClick).isNull() + assertThat(observedSelectedColorOptionPosition()).isEqualTo(1) + assertThat(observedSliderProgress()) + .isEqualTo(ClockMetadataModel.DEFAULT_COLOR_TONE_PROGRESS) + val expectedSelectedColorModel = colorMap.values.first() // RED + assertThat(observedSeedColor()) + .isEqualTo( + ClockSettingsViewModel.blendColorWithTone( + expectedSelectedColorModel.color, + expectedSelectedColorModel.getColorTone( + ClockMetadataModel.DEFAULT_COLOR_TONE_PROGRESS + ), + ) + ) + } + + @Test + fun setColorTone() = runTest { + val observedClockColorOptions = collectLastValue(underTest.colorOptions) + val observedIsSliderEnabled = collectLastValue(underTest.isSliderEnabled) + val observedSliderProgress = collectLastValue(underTest.sliderProgress) + val observedSeedColor = collectLastValue(underTest.seedColor) + // Advance COLOR_OPTIONS_EVENT_UPDATE_DELAY_MILLIS since there is a delay from colorOptions + advanceTimeBy(ClockSettingsViewModel.COLOR_OPTIONS_EVENT_UPDATE_DELAY_MILLIS) + assertThat(observedClockColorOptions()!![0].isSelected).isTrue() + assertThat(observedIsSliderEnabled()).isFalse() + + observedClockColorOptions()!![1].onClick?.invoke() + + // Advance COLOR_OPTIONS_EVENT_UPDATE_DELAY_MILLIS since there is a delay from colorOptions + advanceTimeBy(ClockSettingsViewModel.COLOR_OPTIONS_EVENT_UPDATE_DELAY_MILLIS) + assertThat(observedIsSliderEnabled()).isTrue() + val targetProgress1 = 99 + underTest.onSliderProgressChanged(targetProgress1) + assertThat(observedSliderProgress()).isEqualTo(targetProgress1) + val targetProgress2 = 55 + underTest.onSliderProgressStop(targetProgress2) + assertThat(observedSliderProgress()).isEqualTo(targetProgress2) + val expectedSelectedColorModel = colorMap.values.first() // RED + assertThat(observedSeedColor()) + .isEqualTo( + ClockSettingsViewModel.blendColorWithTone( + expectedSelectedColorModel.color, + expectedSelectedColorModel.getColorTone(targetProgress2), + ) + ) + } + + @Test + fun setClockSize() = runTest { + val observedClockSize = collectLastValue(underTest.selectedClockSize) + underTest.setClockSize(ClockSize.DYNAMIC) + assertThat(observedClockSize()).isEqualTo(ClockSize.DYNAMIC) + + underTest.setClockSize(ClockSize.SMALL) + assertThat(observedClockSize()).isEqualTo(ClockSize.SMALL) + } +} |
