Skip to content

Live Data Extension to test the live data

Devrath edited this page Jul 11, 2021 · 1 revision

Live Data Extension to test the live data

LiveData.kt

/**  * Gets the value of a [LiveData] or waits for it to have one, with a timeout.  *  * Use this extension from host-side (JVM) tests. It's recommended to use it alongside  * `InstantTaskExecutorRule` or a similar mechanism to execute tasks synchronously.  */ @VisibleForTesting(otherwise = VisibleForTesting.NONE) fun <T> LiveData<T>.getOrAwaitValueTest( time: Long = 2, timeUnit: TimeUnit = TimeUnit.SECONDS, afterObserve: () -> Unit = {} ): T { var data: T? = null val latch = CountDownLatch(1) val observer = object : Observer<T> { override fun onChanged(o: T?) { data = o latch.countDown() this@getOrAwaitValueTest.removeObserver(this) } } this.observeForever(observer) try { afterObserve.invoke() // Don't wait indefinitely if the LiveData is not set. if (!latch.await(time, timeUnit)) { throw TimeoutException("LiveData value was never set.") } } finally { this.removeObserver(observer) } @Suppress("UNCHECKED_CAST") return data as T }
Clone this wiki locally