Skip to content
This repository was archived by the owner on Dec 30, 2020. It is now read-only.

Commit 5bdbd94

Browse files
author
Mikolaj Leszczynski
authored
Merge pull request #85 from babylonhealth/transform-fix
Moved basic `transform` to the background
2 parents eafcddc + 7dab622 commit 5bdbd94

File tree

4 files changed

+39
-24
lines changed

4 files changed

+39
-24
lines changed

orbit-2-core/src/main/java/com/babylon/orbit2/OrbitBasePlugin.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package com.babylon.orbit2
1919
import kotlinx.coroutines.flow.Flow
2020
import kotlinx.coroutines.flow.map
2121
import kotlinx.coroutines.flow.onEach
22+
import kotlinx.coroutines.withContext
2223

2324
internal class Transform<S : Any, E : Any, E2 : Any>(val block: Context<S, E>.() -> E2) :
2425
Operator<S, E2>
@@ -78,7 +79,9 @@ object OrbitBasePlugin : OrbitPlugin {
7879
return when (operator) {
7980
is Transform<*, *, *> -> flow.map {
8081
with(operator as Transform<S, E, Any>) {
81-
createContext(it).block()
82+
withContext(containerContext.backgroundDispatcher) {
83+
createContext(it).block()
84+
}
8285
}
8386
}
8487
is SideEffect<*, *, *> -> flow.onEach {

orbit-2-core/src/test/java/com/babylon/orbit2/BaseDslThreadingTest.kt

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,16 @@
1717
package com.babylon.orbit2
1818

1919
import com.appmattus.kotlinfixture.kotlinFixture
20+
import kotlinx.coroutines.newSingleThreadContext
2021
import org.assertj.core.api.Assertions.assertThat
2122
import org.junit.jupiter.api.Test
2223
import java.util.concurrent.CountDownLatch
2324

2425
internal class BaseDslThreadingTest {
2526

2627
companion object {
27-
const val EXPECTED_THREAD_PREFIX = "orbit"
28+
const val ORBIT_THREAD_PREFIX = "orbit"
29+
const val BACKGROUND_THREAD_PREFIX = "IO"
2830
}
2931

3032
private val fixture = kotlinFixture()
@@ -38,19 +40,19 @@ internal class BaseDslThreadingTest {
3840
middleware.reducer(action)
3941

4042
testStreamObserver.awaitCount(2)
41-
assertThat(middleware.threadName).startsWith(EXPECTED_THREAD_PREFIX)
43+
assertThat(middleware.threadName).startsWith(ORBIT_THREAD_PREFIX)
4244
}
4345

4446
@Test
45-
fun `transformer executes on orbit dispatcher`() {
47+
fun `transformer executes on background dispatcher`() {
4648
val action = fixture<Int>()
4749
val middleware = BaseDslMiddleware()
4850
val testStreamObserver = middleware.container.stateStream.test()
4951

5052
middleware.transformer(action)
5153

5254
testStreamObserver.awaitCount(2)
53-
assertThat(middleware.threadName).startsWith(EXPECTED_THREAD_PREFIX)
55+
assertThat(middleware.threadName).startsWith(BACKGROUND_THREAD_PREFIX)
5456
}
5557

5658
@Test
@@ -62,7 +64,7 @@ internal class BaseDslThreadingTest {
6264
middleware.postingSideEffect(action)
6365

6466
testStreamObserver.awaitCount(1)
65-
assertThat(middleware.threadName).startsWith(EXPECTED_THREAD_PREFIX)
67+
assertThat(middleware.threadName).startsWith(ORBIT_THREAD_PREFIX)
6668
}
6769

6870
@Test
@@ -74,14 +76,18 @@ internal class BaseDslThreadingTest {
7476

7577
middleware.latch.await()
7678

77-
assertThat(middleware.threadName).startsWith(EXPECTED_THREAD_PREFIX)
79+
assertThat(middleware.threadName).startsWith(ORBIT_THREAD_PREFIX)
7880
}
7981

8082
private data class TestState(val id: Int)
8183

8284
private class BaseDslMiddleware : Host<TestState, String> {
83-
override val container = Container.create<TestState, String>(
84-
TestState(42)
85+
86+
@Suppress("EXPERIMENTAL_API_USAGE")
87+
override val container = RealContainer<TestState, String>(
88+
initialState = TestState(42),
89+
settings = Container.Settings(),
90+
backgroundDispatcher = newSingleThreadContext(BACKGROUND_THREAD_PREFIX)
8591
)
8692
lateinit var threadName: String
8793
val latch = CountDownLatch(1)

orbit-2-coroutines/src/test/java/com/babylon/orbit2/OrbitCoroutinePluginDslThreadingTest.kt

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,21 @@
1717
package com.babylon.orbit2
1818

1919
import com.appmattus.kotlinfixture.kotlinFixture
20-
import kotlinx.coroutines.asCoroutineDispatcher
2120
import kotlinx.coroutines.delay
2221
import kotlinx.coroutines.flow.flowOf
2322
import kotlinx.coroutines.flow.onEach
23+
import kotlinx.coroutines.newSingleThreadContext
2424
import org.assertj.core.api.Assertions.assertThat
2525
import org.junit.jupiter.api.AfterEach
2626
import org.junit.jupiter.api.BeforeEach
2727
import org.junit.jupiter.api.Test
28-
import java.util.concurrent.Executors
2928

3029
internal class OrbitCoroutinePluginDslThreadingTest {
30+
31+
companion object {
32+
const val BACKGROUND_THREAD_PREFIX = "IO"
33+
}
34+
3135
private val fixture = kotlinFixture()
3236

3337
@BeforeEach
@@ -50,7 +54,7 @@ internal class OrbitCoroutinePluginDslThreadingTest {
5054
middleware.suspend(action)
5155

5256
testStreamObserver.awaitCount(2)
53-
assertThat(middleware.threadName).startsWith("IO")
57+
assertThat(middleware.threadName).startsWith(BACKGROUND_THREAD_PREFIX)
5458
}
5559

5660
@Test
@@ -63,7 +67,7 @@ internal class OrbitCoroutinePluginDslThreadingTest {
6367
middleware.flow(action)
6468

6569
testStreamObserver.awaitCount(5)
66-
assertThat(middleware.threadName).startsWith("IO")
70+
assertThat(middleware.threadName).startsWith(BACKGROUND_THREAD_PREFIX)
6771
}
6872

6973
private data class TestState(val id: Int)
@@ -73,8 +77,7 @@ internal class OrbitCoroutinePluginDslThreadingTest {
7377
override val container: Container<TestState, String> = RealContainer(
7478
initialState = TestState(42),
7579
settings = Container.Settings(),
76-
backgroundDispatcher = Executors.newSingleThreadExecutor { Thread(it, "IO") }
77-
.asCoroutineDispatcher()
80+
backgroundDispatcher = newSingleThreadContext(BACKGROUND_THREAD_PREFIX)
7881
)
7982
lateinit var threadName: String
8083

orbit-2-rxjava2/src/test/java/com/babylon/orbit2/OrbitRxJava2PluginDslThreadingTest.kt

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,19 @@ import io.reactivex.Completable
2121
import io.reactivex.Maybe
2222
import io.reactivex.Observable
2323
import io.reactivex.Single
24-
import kotlinx.coroutines.asCoroutineDispatcher
24+
import kotlinx.coroutines.newSingleThreadContext
2525
import org.assertj.core.api.Assertions.assertThat
2626
import org.junit.jupiter.api.AfterEach
2727
import org.junit.jupiter.api.BeforeEach
2828
import org.junit.jupiter.api.Test
2929
import java.util.concurrent.CountDownLatch
30-
import java.util.concurrent.Executors
3130

3231
internal class OrbitRxJava2PluginDslThreadingTest {
32+
33+
companion object {
34+
const val BACKGROUND_THREAD_PREFIX = "IO"
35+
}
36+
3337
private val fixture = kotlinFixture()
3438

3539
@BeforeEach
@@ -52,7 +56,7 @@ internal class OrbitRxJava2PluginDslThreadingTest {
5256
middleware.single(action)
5357

5458
testStreamObserver.awaitCount(2)
55-
assertThat(middleware.threadName).startsWith("IO")
59+
assertThat(middleware.threadName).startsWith(BACKGROUND_THREAD_PREFIX)
5660
}
5761

5862
@Test
@@ -65,7 +69,7 @@ internal class OrbitRxJava2PluginDslThreadingTest {
6569
middleware.maybe(action)
6670

6771
testStreamObserver.awaitCount(2)
68-
assertThat(middleware.threadName).startsWith("IO")
72+
assertThat(middleware.threadName).startsWith(BACKGROUND_THREAD_PREFIX)
6973
}
7074

7175
@Test
@@ -77,7 +81,7 @@ internal class OrbitRxJava2PluginDslThreadingTest {
7781
middleware.maybeNot(action)
7882

7983
middleware.latch.await()
80-
assertThat(middleware.threadName).startsWith("IO")
84+
assertThat(middleware.threadName).startsWith(BACKGROUND_THREAD_PREFIX)
8185
}
8286

8387
@Test
@@ -90,7 +94,7 @@ internal class OrbitRxJava2PluginDslThreadingTest {
9094
middleware.completable(action)
9195

9296
testStreamObserver.awaitCount(2)
93-
assertThat(middleware.threadName).startsWith("IO")
97+
assertThat(middleware.threadName).startsWith(BACKGROUND_THREAD_PREFIX)
9498
}
9599

96100
@Test
@@ -103,7 +107,7 @@ internal class OrbitRxJava2PluginDslThreadingTest {
103107
middleware.observable(action)
104108

105109
testStreamObserver.awaitCount(5)
106-
assertThat(middleware.threadName).startsWith("IO")
110+
assertThat(middleware.threadName).startsWith(BACKGROUND_THREAD_PREFIX)
107111
}
108112

109113
private data class TestState(val id: Int)
@@ -113,8 +117,7 @@ internal class OrbitRxJava2PluginDslThreadingTest {
113117
override val container: Container<TestState, String> = RealContainer(
114118
initialState = TestState(42),
115119
settings = Container.Settings(),
116-
backgroundDispatcher = Executors.newSingleThreadExecutor { Thread(it, "IO") }
117-
.asCoroutineDispatcher()
120+
backgroundDispatcher = newSingleThreadContext(BACKGROUND_THREAD_PREFIX)
118121
)
119122
lateinit var threadName: String
120123
val latch = CountDownLatch(1)

0 commit comments

Comments
 (0)