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