Skip to content

Commit fe085b5

Browse files
authored
Improve kotest robolectric config injection (#22)
1 parent 9f1c337 commit fe085b5

File tree

2 files changed

+9
-17
lines changed

2 files changed

+9
-17
lines changed

kotest-extensions-android/src/main/kotlin/br/com/colman/kotest/android/extensions/robolectric/ContainedRobolectricRunner.kt

+8-17
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,15 @@ import org.junit.runners.model.FrameworkMethod
66
import org.robolectric.RobolectricTestRunner
77
import org.robolectric.annotation.Config
88
import org.robolectric.internal.bytecode.InstrumentationConfiguration
9-
import org.robolectric.pluginapi.config.ConfigurationStrategy
109
import org.robolectric.pluginapi.config.Configurer
1110
import org.robolectric.plugins.HierarchicalConfigurationStrategy
11+
import org.robolectric.util.inject.Injector
1212
import java.lang.reflect.Method
1313

1414
@RunWith(Enclosed::class)
1515
internal class ContainedRobolectricRunner(
16-
private val config: Config
17-
) : RobolectricTestRunner(PlaceholderTest::class.java, injector) {
18-
init {
19-
injectKotestConfig()
20-
}
16+
config: Config
17+
) : RobolectricTestRunner(PlaceholderTest::class.java, kotestInjector(config)) {
2118

2219
private val placeHolderMethod: FrameworkMethod = children[0]
2320
val sdkEnvironment = getSandbox(placeHolderMethod).also {
@@ -43,16 +40,6 @@ internal class ContainedRobolectricRunner(
4340
.build()
4441
}
4542

46-
private fun injectKotestConfig() {
47-
val configurationStrategyField =
48-
RobolectricTestRunner::class.java
49-
.getField(ConfigurationStrategy::class.java)
50-
.apply { isAccessible = true }
51-
val configurers = injector.getInstance(arrayOf<Configurer<*>>()::class.java)
52-
val newConfigurationStrategy = KotestHierarchicalConfigurationStrategy(config, configurers)
53-
configurationStrategyField.set(this, newConfigurationStrategy)
54-
}
55-
5643
class PlaceholderTest {
5744
@org.junit.Test
5845
fun testPlaceholder() {
@@ -76,6 +63,10 @@ internal class ContainedRobolectricRunner(
7663
}
7764

7865
companion object {
79-
private val injector = defaultInjector().build()
66+
private fun kotestInjector(config: Config): Injector {
67+
val defaultInjector = defaultInjector().bind(Config::class.java, config).build()
68+
return Injector.Builder(defaultInjector, ContainedRobolectricRunner::class.java.classLoader)
69+
.build()
70+
}
8071
}
8172
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
br.com.colman.kotest.android.extensions.robolectric.ContainedRobolectricRunner$KotestHierarchicalConfigurationStrategy

0 commit comments

Comments
 (0)