Build: Make robolectric tests run offline without downloading artifacts
#KTI-1367
This commit is contained in:
committed by
Space Team
parent
bb8d3a0f80
commit
009cda0c60
@@ -4775,16 +4775,10 @@
|
||||
<sha256 value="938a2d08fe54050d7610b944d8ddc3a09355710d9e6be0aac838dbc04e9a2825" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="org.robolectric" name="android-all" version="4.4_r1-robolectric-1">
|
||||
<artifact name="android-all-4.4_r1-robolectric-1.jar">
|
||||
<md5 value="1e478f10e107d1dddad09d32508f2ec9" origin="Generated by Gradle"/>
|
||||
<sha256 value="d41d3ffa6c89398c9e8c3c3659de405994151c040b4a898fc4c885c226732e28" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="org.robolectric" name="android-all" version="4.4_r1-robolectric-r2">
|
||||
<artifact name="android-all-4.4_r1-robolectric-r2.jar">
|
||||
<md5 value="3098240c179f04b929699e8f2d4b11cf" origin="Generated by Gradle"/>
|
||||
<sha256 value="5c68ab0a11d6f46e303505e75da62215f45b6a46ff7877441a31d527899359f9" origin="Generated by Gradle"/>
|
||||
<component group="org.robolectric" name="android-all" version="5.0.2_r3-robolectric-r0">
|
||||
<artifact name="android-all-5.0.2_r3-robolectric-r0.jar">
|
||||
<md5 value="6b57219b0d85fe3131f9628c454ca616" origin="Generated by Gradle"/>
|
||||
<sha256 value="5e63d4c7f2c691afed648bf0675e0b0a76d19f0e23d93705f4faf9ed3b2734de" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="org.robolectric" name="annotations" version="4.0">
|
||||
|
||||
@@ -7,6 +7,8 @@ plugins {
|
||||
}
|
||||
|
||||
val robolectricClasspath by configurations.creating
|
||||
val robolectricDependency by configurations.creating
|
||||
|
||||
val androidExtensionsRuntimeForTests by configurations.creating
|
||||
val layoutLib by configurations.creating
|
||||
val layoutLibApi by configurations.creating
|
||||
@@ -37,8 +39,9 @@ dependencies {
|
||||
testApi(project(":kotlin-test:kotlin-test-jvm"))
|
||||
testApi(commonDependency("junit:junit"))
|
||||
|
||||
robolectricDependency("org.robolectric:android-all:5.0.2_r3-robolectric-r0")
|
||||
|
||||
robolectricClasspath(commonDependency("org.robolectric", "robolectric"))
|
||||
robolectricClasspath("org.robolectric:android-all:4.4_r1-robolectric-1")
|
||||
robolectricClasspath(project(":kotlin-android-extensions-runtime")) { isTransitive = false }
|
||||
|
||||
embedded(project(":kotlin-android-extensions-runtime")) { isTransitive = false }
|
||||
@@ -65,10 +68,19 @@ javadocJar()
|
||||
|
||||
testsJar()
|
||||
|
||||
val robolectricDependencyDir = "$buildDir/robolectricDependencies"
|
||||
val prepareRobolectricDependencies by tasks.registering(Copy::class) {
|
||||
from(robolectricDependency)
|
||||
into(robolectricDependencyDir)
|
||||
}
|
||||
|
||||
projectTest {
|
||||
dependsOn(androidExtensionsRuntimeForTests)
|
||||
dependsOn(robolectricClasspath)
|
||||
|
||||
dependsOn(prepareRobolectricDependencies)
|
||||
dependsOn(":dist")
|
||||
|
||||
workingDir = rootDir
|
||||
useAndroidJar()
|
||||
|
||||
@@ -86,6 +98,10 @@ projectTest {
|
||||
doFirst {
|
||||
systemProperty("androidExtensionsRuntime.classpath", androidExtensionsRuntimeProvider.get())
|
||||
systemProperty("robolectric.classpath", robolectricClasspathProvider.get())
|
||||
|
||||
systemProperty("robolectric.offline", "true")
|
||||
systemProperty("robolectric.dependency.dir", robolectricDependencyDir)
|
||||
|
||||
systemProperty("layoutLib.path", layoutLibConf.singleFile.canonicalPath)
|
||||
systemProperty("layoutLibApi.path", layoutLibApiConf.singleFile.canonicalPath)
|
||||
}
|
||||
|
||||
+8
-1
@@ -144,13 +144,20 @@ abstract class AbstractParcelBoxTest : CodegenTestCase() {
|
||||
classFileFactory.getClassFiles().forEach { writeClass(it.relativePath, it.asByteArray()) }
|
||||
javaClassesOutputDirectory?.listFiles()?.forEach { writeClass(it.name, it.readBytes()) }
|
||||
|
||||
val robolectricProperties = System.getProperties().propertyNames().asSequence()
|
||||
.map { it.toString() }.filter { it.startsWith("robolectric") }
|
||||
.map { "-D$it=${System.getProperty(it)}" }
|
||||
.toList()
|
||||
.toTypedArray()
|
||||
|
||||
val process = ProcessBuilder(
|
||||
javaExe.absolutePath,
|
||||
"-ea",
|
||||
"-classpath",
|
||||
(libraryClasspath + dirForTestClasses).joinToString(File.pathSeparator),
|
||||
*robolectricProperties,
|
||||
JUnitCore::class.java.name,
|
||||
JUNIT_GENERATED_TEST_CLASS_FQNAME
|
||||
JUNIT_GENERATED_TEST_CLASS_FQNAME,
|
||||
).start()
|
||||
|
||||
val out = process.inputStream.bufferedReader().lineSequence().joinToString("\n")
|
||||
|
||||
@@ -6,6 +6,8 @@ plugins {
|
||||
}
|
||||
|
||||
val robolectricClasspath by configurations.creating
|
||||
val robolectricDependency by configurations.creating
|
||||
|
||||
val parcelizeRuntimeForTests by configurations.creating
|
||||
val layoutLib by configurations.creating
|
||||
val layoutLibApi by configurations.creating
|
||||
@@ -53,8 +55,9 @@ dependencies {
|
||||
|
||||
testApi(commonDependency("junit:junit"))
|
||||
|
||||
robolectricDependency("org.robolectric:android-all:5.0.2_r3-robolectric-r0")
|
||||
|
||||
robolectricClasspath(commonDependency("org.robolectric", "robolectric"))
|
||||
robolectricClasspath("org.robolectric:android-all:4.4_r1-robolectric-r2")
|
||||
robolectricClasspath(project(":plugins:parcelize:parcelize-runtime")) { isTransitive = false }
|
||||
robolectricClasspath(project(":kotlin-android-extensions-runtime")) { isTransitive = false }
|
||||
|
||||
@@ -81,10 +84,19 @@ sourcesJar()
|
||||
javadocJar()
|
||||
testsJar()
|
||||
|
||||
val robolectricDependencyDir = "$buildDir/robolectricDependencies"
|
||||
val prepareRobolectricDependencies by tasks.registering(Copy::class) {
|
||||
from(robolectricDependency)
|
||||
into(robolectricDependencyDir)
|
||||
}
|
||||
|
||||
projectTest(jUnitMode = JUnitMode.JUnit5) {
|
||||
useJUnitPlatform()
|
||||
dependsOn(parcelizeRuntimeForTests)
|
||||
dependsOn(robolectricClasspath)
|
||||
dependsOn(robolectricDependency)
|
||||
|
||||
dependsOn(prepareRobolectricDependencies)
|
||||
dependsOn(":dist")
|
||||
workingDir = rootDir
|
||||
useAndroidJar()
|
||||
@@ -96,6 +108,10 @@ projectTest(jUnitMode = JUnitMode.JUnit5) {
|
||||
doFirst {
|
||||
systemProperty("parcelizeRuntime.classpath", parcelizeRuntimeForTestsConf.asPath)
|
||||
systemProperty("robolectric.classpath", robolectricClasspathConf.asPath)
|
||||
|
||||
systemProperty("robolectric.offline", "true")
|
||||
systemProperty("robolectric.dependency.dir", robolectricDependencyDir)
|
||||
|
||||
systemProperty("layoutLib.path", layoutLibConf.singleFile.canonicalPath)
|
||||
systemProperty("layoutLibApi.path", layoutLibApiConf.singleFile.canonicalPath)
|
||||
}
|
||||
|
||||
+8
-2
@@ -8,13 +8,19 @@ package org.jetbrains.kotlin.parcelize.test.services
|
||||
import org.jetbrains.kotlin.parcelize.test.services.ParcelizeRuntimeClasspathProvider.Companion.JUNIT_GENERATED_TEST_CLASS_FQNAME
|
||||
import org.jetbrains.kotlin.test.services.TestServices
|
||||
import org.jetbrains.kotlin.test.services.jvm.JvmBoxMainClassProvider
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.cast
|
||||
import org.junit.runner.JUnitCore
|
||||
|
||||
class ParcelizeMainClassProvider(testServices: TestServices) : JvmBoxMainClassProvider(testServices) {
|
||||
override fun getMainClassNameAndAdditionalArguments(): List<String> {
|
||||
val robolectricProperties = System.getProperties().propertyNames().asSequence()
|
||||
.map { it.toString() }.filter { it.startsWith("robolectric") }
|
||||
.map { "-D$it=${System.getProperty(it)}" }
|
||||
.toList()
|
||||
.toTypedArray()
|
||||
|
||||
return listOfNotNull(
|
||||
"-Drobolectric.dependency.repo.url=https://cache-redirector.jetbrains.com/maven-central"
|
||||
.takeIf { "true" == System.getProperty("cacheRedirectorEnabled") },
|
||||
*robolectricProperties,
|
||||
JUnitCore::class.java.name,
|
||||
JUNIT_GENERATED_TEST_CLASS_FQNAME
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user