Skip to content

Commit

Permalink
Testing: Use ExternalResource instead of TestRule (#186)
Browse files Browse the repository at this point in the history
ExternalResource already does 100% what this TestRule was doing.
The API is much cleaner and easier to read.

Plus, using ExternalResource would make it JUnit5 compatible.
More info here: https://junit.org/junit5/docs/current/user-guide/#migrating-from-junit4-rule-support
  • Loading branch information
tasomaniac authored and gpeal committed Jan 21, 2019
1 parent ea8c0fc commit 853e7d1
Showing 1 changed file with 15 additions and 28 deletions.
43 changes: 15 additions & 28 deletions testing/src/main/kotlin/com/airbnb/mvrx/test/MvRxTestRule.kt
@@ -1,19 +1,11 @@
package com.airbnb.mvrx.test

import android.support.annotation.NonNull
import com.airbnb.mvrx.MvRxTestOverridesProxy
import io.reactivex.Scheduler
import io.reactivex.android.plugins.RxAndroidPlugins
import io.reactivex.disposables.Disposable
import io.reactivex.exceptions.CompositeException
import io.reactivex.internal.schedulers.ExecutorScheduler
import io.reactivex.plugins.RxJavaPlugins
import io.reactivex.schedulers.Schedulers
import org.junit.rules.TestRule
import org.junit.runner.Description
import org.junit.runners.model.Statement
import java.util.concurrent.Executor
import java.util.concurrent.TimeUnit
import org.junit.rules.ExternalResource

enum class DebugMode(internal val value: Boolean?) {
Debug(true),
Expand All @@ -31,26 +23,21 @@ class MvRxTestRule(
* operations including setState reducers to run synchronously so you can test them.
*/
private val setRxImmediateSchedulers: Boolean = true
) : TestRule {
) : ExternalResource() {
private var defaultExceptionHandler: Thread.UncaughtExceptionHandler? = null

override fun apply(base: Statement, description: Description): Statement {
return object : Statement() {
override fun evaluate() {
RxAndroidPlugins.reset()
RxAndroidPlugins.setInitMainThreadSchedulerHandler { Schedulers.trampoline() }
RxAndroidPlugins.setMainThreadSchedulerHandler { Schedulers.trampoline() }
if (setRxImmediateSchedulers) setRxImmediateSchedulers()
MvRxTestOverridesProxy.forceMvRxDebug(debugMode.value)
try {
base.evaluate()
} finally {
RxAndroidPlugins.reset()
MvRxTestOverridesProxy.forceMvRxDebug(DebugMode.Unset.value)
if (setRxImmediateSchedulers) clearRxImmediateScheduleres()
}
}
}
override fun before() {
RxAndroidPlugins.reset()
RxAndroidPlugins.setInitMainThreadSchedulerHandler { Schedulers.trampoline() }
RxAndroidPlugins.setMainThreadSchedulerHandler { Schedulers.trampoline() }
if (setRxImmediateSchedulers) setRxImmediateSchedulers()
MvRxTestOverridesProxy.forceMvRxDebug(debugMode.value)
}

override fun after() {
RxAndroidPlugins.reset()
MvRxTestOverridesProxy.forceMvRxDebug(DebugMode.Unset.value)
if (setRxImmediateSchedulers) clearRxImmediateScheduleres()
}

private fun setRxImmediateSchedulers() {
Expand All @@ -73,4 +60,4 @@ class MvRxTestRule(
defaultExceptionHandler = null
RxJavaPlugins.reset()
}
}
}

0 comments on commit 853e7d1

Please sign in to comment.