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

name.remal.gradle_plugins.testing.dsl.BaseProjectTest.kt Maven / Gradle / Ivy

package name.remal.gradle_plugins.testing.dsl

import com.google.common.annotations.VisibleForTesting
import name.remal.copyOnWriteListOf
import name.remal.default
import name.remal.newTempDir
import org.gradle.api.Project
import org.gradle.testfixtures.ProjectBuilder
import org.gradle.wrapper.GradleUserHomeLookup.gradleUserHome
import org.junit.After

@VisibleForTesting
abstract class BaseProjectTest {

    protected val project: Project by lazy { newTempProject() }

    private val createdProjects = copyOnWriteListOf()

    fun newTempProject(name: String): Project {
        val prefix = "gradle-test-project-"
        val projectDir = newTempDir("$prefix$name-")
        return ProjectBuilder.builder()
            .withGradleUserHomeDir(gradleUserHome())
            .withProjectDir(projectDir)
            .withName(projectDir.name)
            .build()
            .also { createdProjects.add(it) }
    }

    fun newTempProject(): Project {
        val stackTraceElement = Throwable().stackTrace.firstOrNull {
            BaseProjectTest::class.java.name != it.className
                && !it.className.startsWith(BaseProjectTest::class.java.name + "$")
                && !it.className.startsWith("java.")
                && !it.className.startsWith("javax.")
                && !it.className.startsWith("kotlin.")
                && !it.className.startsWith("groovy.")
                && !it.className.startsWith("scala.")
        }
        val name = stackTraceElement?.run { "${className.substringAfterLast('.')}.$methodName" }?.replace(Regex("\\W"), "-").default()
        return newTempProject(name)
    }

    @After
    fun deleteProjectDirs() {
        createdProjects.forEach {
            it.rootDir.deleteRecursively()
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy