All Downloads are FREE. Search and download functionalities are using the official Maven repository.

main.tech.apter.junit.jupiter.robolectric.internal.plugins.JUnit5ConfigConfigurer.kt Maven / Gradle / Ivy

Go to download

This repository aims to bridge the gap between JUnit 5 and Robolectric, enabling developers to leverage the benefits of both frameworks for unit testing Android applications. While Robolectric currently lacks a dedicated JUnit 5 extension, this project proposes a community-driven solution to achieve seamless integration.

The newest version!
package tech.apter.junit.jupiter.robolectric.internal.plugins

import org.robolectric.annotation.Config
import org.robolectric.pluginapi.config.GlobalConfigProvider
import org.robolectric.plugins.ConfigConfigurer
import org.robolectric.plugins.PackagePropertiesLoader
import tech.apter.junit.jupiter.robolectric.internal.extensions.isNonStaticInnerClass

internal class JUnit5ConfigConfigurer(
    packagePropertiesLoader: PackagePropertiesLoader,
    defaultConfigProvider: GlobalConfigProvider,
) : ConfigConfigurer(packagePropertiesLoader, defaultConfigProvider) {
    override fun getConfigFor(testClass: Class<*>): Config? {
        return if (testClass.isNonStaticInnerClass) {
            getConfigMergedWithDeclaringClassConfig(testClass)
        } else {
            super.getConfigFor(testClass)
        }
    }

    private fun getConfigMergedWithDeclaringClassConfig(testClass: Class<*>): Config? {
        val config = super.getConfigFor(testClass)
        return if (testClass.isNonStaticInnerClass) {
            val parentConfig = getConfigMergedWithDeclaringClassConfig(testClass.declaringClass)
            config?.let { c -> return parentConfig?.let { p -> merge(p, c) } ?: c } ?: parentConfig
        } else {
            config
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy