blob: 4e4dd080a286055d6f01ad4907bb03346caa0224 [file]
import java.io.File
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.tasks.SourceSetContainer
import org.gradle.api.tasks.bundling.Jar
import org.gradle.api.tasks.compile.JavaCompile
import org.gradle.api.tasks.testing.Test
import org.gradle.kotlin.dsl.getByType
import org.gradle.kotlin.dsl.named
import org.gradle.kotlin.dsl.project
import org.gradle.kotlin.dsl.register
import org.gradle.kotlin.dsl.withType
public class R8NonJava8TestConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
target.dependencies.apply {
add("implementation", project(":main", "mainClassesOutput"))
add("implementation", project(":main", "mainResources"))
add("implementation", project(":testbase"))
add("implementation", project(":testbase", "depsJar"))
add("runtimeOnlyDataScope", project(":testbase", "runtimeOnlyDataElements"))
}
val sharedDepsScope = target.configurations.dependencyScope("sharedDepsScope")
val sharedDepsConfig =
target.configurations.resolvable("sharedDepsConfig") { extendsFrom(sharedDepsScope.get()) }
target.dependencies.add(
sharedDepsScope.name,
target.dependencies.project(":third_party", "sharedDepsFiles"),
)
target.tasks.withType<JavaCompile>().configureEach { dependsOn(sharedDepsConfig) }
target.tasks.withType<Test>().configureEach {
TestingState.setUpTestingState(this)
systemProperty(
"TEST_DATA_LOCATION",
target.layout.buildDirectory.dir("classes/java/test").get().toString(),
)
systemProperty(
"TESTBASE_DATA_LOCATION",
target
.project(":testbase")
.tasks
.named<JavaCompile>("compileJava")
.get()
.outputs
.files
.asPath
.split(File.pathSeparator)[0],
)
}
val assembleTestJar =
target.tasks.register<Jar>("assembleTestJar") {
val sourceSets = target.extensions.getByType<SourceSetContainer>()
from(sourceSets.getByName("test").output)
// TODO(b/296486206): Seems like IntelliJ has a problem depending on test source sets.
// Renaming
// this from the default name (tests_java_8.jar) will allow IntelliJ to find the resources
// in
// the jar and not show red underlines. However, navigation to base classes will not work.
archiveFileName.set("not_named_tests_java.jar")
}
val testJar = target.configurations.consumable("testJar")
target.artifacts { add(testJar.name, assembleTestJar) }
}
}