From 04b600d0d8a5406e122110ec99ef33e4bd245940 Mon Sep 17 00:00:00 2001 From: Milton Wu Date: Tue, 25 Jul 2023 19:57:38 +0800 Subject: [PATCH] [BiometricsV2] Refine ErrorDialogViewModelTest Some FingerprintEnrollErrorDialogViewModel APIs related coroutine don't be well test in FingerprintEnrollErrorDialogViewModelTest Bug: 293044262 Test: atest -m FingerprintEnrollErrorDialogViewModelTest Change-Id: Iab3897d37c904184c1f58ab617e74cd563b3aa43 --- ...ngerprintEnrollErrorDialogViewModelTest.kt | 103 ++++++++---------- 1 file changed, 48 insertions(+), 55 deletions(-) diff --git a/tests/unit/src/com/android/settings/biometrics2/ui/viewmodel/FingerprintEnrollErrorDialogViewModelTest.kt b/tests/unit/src/com/android/settings/biometrics2/ui/viewmodel/FingerprintEnrollErrorDialogViewModelTest.kt index ae829b9dbed..3679dd291c9 100644 --- a/tests/unit/src/com/android/settings/biometrics2/ui/viewmodel/FingerprintEnrollErrorDialogViewModelTest.kt +++ b/tests/unit/src/com/android/settings/biometrics2/ui/viewmodel/FingerprintEnrollErrorDialogViewModelTest.kt @@ -24,6 +24,9 @@ import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.toList import kotlinx.coroutines.launch +import kotlinx.coroutines.test.TestScope +import kotlinx.coroutines.test.UnconfinedTestDispatcher +import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Test @@ -56,79 +59,69 @@ class FingerprintEnrollErrorDialogViewModelTest { @OptIn(ExperimentalCoroutinesApi::class) @Test fun testNewDialog() = runTest { - backgroundScope.launch { - mutableListOf().let { list -> - viewModel.newDialogFlow.toList(list) - assertThat(list.size).isEqualTo(0) - } - - mutableListOf().let { list -> - val testErrorMsgId = 3456 - viewModel.newDialog(testErrorMsgId) - - assertThat(viewModel.isDialogShown).isTrue() - viewModel.setResultFlow.toList(list) - assertThat(list.size).isEqualTo(1) - assertThat(list[0]).isEqualTo(testErrorMsgId) + val newDialogs: List = mutableListOf().also { + backgroundScope.launch(UnconfinedTestDispatcher(testScheduler)) { + viewModel.newDialogFlow.toList(it) } } + + runCurrent() + + // Default values + assertThat(viewModel.isDialogShown).isFalse() + assertThat(newDialogs.size).isEqualTo(0) + + val testErrorMsgId = 3456 + viewModel.newDialog(testErrorMsgId) + runCurrent() + + // verify after emit + assertThat(viewModel.isDialogShown).isTrue() + assertThat(newDialogs.size).isEqualTo(1) + assertThat(newDialogs[0]).isEqualTo(testErrorMsgId) } @OptIn(ExperimentalCoroutinesApi::class) @Test fun testTriggerRetry() = runTest { - backgroundScope.launch { - // triggerRetryFlow shall be empty on begin - mutableListOf().let { list -> - viewModel.triggerRetryFlow.toList(list) - assertThat(list.size).isEqualTo(0) - } - - // emit newDialog - mutableListOf().let { list -> - viewModel.newDialog(0) - viewModel.triggerRetry() - - assertThat(viewModel.isDialogShown).isFalse() - viewModel.setResultFlow.toList(list) - assertThat(list.size).isEqualTo(1) + val triggerRetries: List = mutableListOf().also { + backgroundScope.launch(UnconfinedTestDispatcher(testScheduler)) { + viewModel.triggerRetryFlow.toList(it) } } + + runCurrent() + + // Default values + assertThat(triggerRetries.size).isEqualTo(0) + + viewModel.triggerRetry() + runCurrent() + + // verify after emit + assertThat(triggerRetries.size).isEqualTo(1) } @OptIn(ExperimentalCoroutinesApi::class) @Test fun testSetResultFinish() = runTest { - backgroundScope.launch { - // setResultFlow shall be empty on begin - mutableListOf().let { list -> - viewModel.setResultFlow.toList(list) - assertThat(list.size).isEqualTo(0) + val setResults: List = + mutableListOf().also { + backgroundScope.launch(UnconfinedTestDispatcher(testScheduler)) { + viewModel.setResultFlow.toList(it) + } } - // emit FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_FINISH - viewModel = FingerprintEnrollErrorDialogViewModel(application, false) - mutableListOf().let { list -> - viewModel.newDialog(0) - viewModel.setResultAndFinish(FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_FINISH) + runCurrent() - assertThat(viewModel.isDialogShown).isFalse() - viewModel.setResultFlow.toList(list) - assertThat(list.size).isEqualTo(1) - assertThat(list[0]).isEqualTo(FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_FINISH) - } + // Default values + assertThat(setResults.size).isEqualTo(0) - // emit FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_TIMEOUT - viewModel = FingerprintEnrollErrorDialogViewModel(application, false) - mutableListOf().let { list -> - viewModel.newDialog(0) - viewModel.setResultAndFinish(FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_TIMEOUT) + viewModel.setResultAndFinish(FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_FINISH) + runCurrent() - assertThat(viewModel.isDialogShown).isFalse() - viewModel.setResultFlow.toList(list) - assertThat(list.size).isEqualTo(1) - assertThat(list[0]).isEqualTo(FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_FINISH) - } - } + // verify after emit + assertThat(setResults.size).isEqualTo(1) + assertThat(setResults[0]).isEqualTo(FINGERPRINT_ERROR_DIALOG_ACTION_SET_RESULT_FINISH) } }