File tree 4 files changed +84
-3
lines changed
main/java/com/badoo/mvicore/android
test/java/com/badoo/mvicore/android/lifecycle
4 files changed +84
-3
lines changed Original file line number Diff line number Diff line change @@ -30,6 +30,7 @@ android {
30
30
}
31
31
32
32
testOptions {
33
+ unitTests.isReturnDefaultValues = true
33
34
unitTests.all {
34
35
it.useJUnitPlatform()
35
36
}
Original file line number Diff line number Diff line change @@ -11,11 +11,29 @@ import io.reactivex.android.schedulers.AndroidSchedulers
11
11
*
12
12
* It also uses the 'isOnFeatureThread' field to avoid observing on the main thread if it is already
13
13
* the current thread.
14
+ *
15
+ * To help facilitate testing, you can override the scheduler using
16
+ * [MviCoreAndroidPlugins.setMainThreadFeatureScheduler]
14
17
*/
15
- object AndroidMainThreadFeatureScheduler: FeatureScheduler {
18
+ object AndroidMainThreadFeatureScheduler : FeatureScheduler {
19
+ private val featureSchedulerDelegate: FeatureScheduler
20
+ get() = MviCoreAndroidPlugins .mainThreadFeatureScheduler
21
+
16
22
override val scheduler: Scheduler
17
- get() = AndroidSchedulers .mainThread()
23
+ get() = featureSchedulerDelegate.scheduler
18
24
19
25
override val isOnFeatureThread: Boolean
20
- get() = Looper .myLooper() == Looper .getMainLooper()
26
+ get() = featureSchedulerDelegate.isOnFeatureThread
27
+
28
+ /* *
29
+ * The default implementation of the [AndroidMainThreadFeatureScheduler] which delegates to the
30
+ * RxAndroid main thread scheduler
31
+ */
32
+ object Default : FeatureScheduler {
33
+ override val scheduler: Scheduler
34
+ get() = AndroidSchedulers .mainThread()
35
+
36
+ override val isOnFeatureThread: Boolean
37
+ get() = Looper .myLooper() == Looper .getMainLooper()
38
+ }
21
39
}
Original file line number Diff line number Diff line change
1
+ package com.badoo.mvicore.android
2
+
3
+ import com.badoo.mvicore.feature.FeatureScheduler
4
+
5
+ /* *
6
+ * Allows customisation of the MVICore Android integration.
7
+ */
8
+ object MviCoreAndroidPlugins {
9
+ @Volatile
10
+ var mainThreadFeatureScheduler: FeatureScheduler = AndroidMainThreadFeatureScheduler .Default
11
+
12
+ /* *
13
+ * Overrides the [AndroidMainThreadFeatureScheduler].
14
+ */
15
+ fun setMainThreadFeatureScheduler (schedulerProvider : () -> FeatureScheduler ) {
16
+ mainThreadFeatureScheduler = schedulerProvider()
17
+ }
18
+
19
+ /* *
20
+ * Resets the plugins back to the original state.
21
+ */
22
+ fun reset () {
23
+ mainThreadFeatureScheduler = AndroidMainThreadFeatureScheduler .Default
24
+ }
25
+ }
Original file line number Diff line number Diff line change
1
+ package com.badoo.mvicore.android.lifecycle
2
+
3
+ import com.badoo.mvicore.android.AndroidMainThreadFeatureScheduler
4
+ import com.badoo.mvicore.android.MviCoreAndroidPlugins
5
+ import com.badoo.mvicore.feature.FeatureSchedulers
6
+ import io.reactivex.android.schedulers.AndroidSchedulers
7
+ import io.reactivex.schedulers.Schedulers
8
+ import org.junit.jupiter.api.AfterEach
9
+ import org.junit.jupiter.api.Assertions.assertSame
10
+ import org.junit.jupiter.api.Test
11
+
12
+ class AndroidMainThreadFeatureSchedulerTest {
13
+ @AfterEach
14
+ fun after () {
15
+ MviCoreAndroidPlugins .reset()
16
+ }
17
+
18
+ @Test
19
+ fun `GIVEN android main scheduler not overridden WHEN scheduler accessed THEN scheduler is android main thread scheduler` () {
20
+ assertSame(AndroidSchedulers .mainThread(), AndroidMainThreadFeatureScheduler .scheduler)
21
+ }
22
+
23
+ @Test
24
+ fun `GIVEN android main scheduler overridden with trampoline feature scheduler WHEN scheduler accessed THEN scheduler is trampoline scheduler` () {
25
+ MviCoreAndroidPlugins .setMainThreadFeatureScheduler { FeatureSchedulers .TrampolineFeatureScheduler }
26
+
27
+ assertSame(Schedulers .trampoline(), AndroidMainThreadFeatureScheduler .scheduler)
28
+ }
29
+
30
+ @Test
31
+ fun `GIVEN android main scheduler overridden with trampoline feature scheduler AND reset WHEN scheduler accessed THEN scheduler is android main thread scheduler` () {
32
+ MviCoreAndroidPlugins .setMainThreadFeatureScheduler { FeatureSchedulers .TrampolineFeatureScheduler }
33
+ MviCoreAndroidPlugins .reset()
34
+
35
+ assertSame(AndroidSchedulers .mainThread(), AndroidMainThreadFeatureScheduler .scheduler)
36
+ }
37
+ }
You can’t perform that action at this time.
0 commit comments