Additionally run android tests with enabled D8

This commit is contained in:
Mikhael Bogdanov
2017-10-23 16:51:00 +02:00
parent dd24ba6978
commit be6474593d
3 changed files with 28 additions and 5 deletions
@@ -33,7 +33,7 @@ import javax.xml.parsers.ParserConfigurationException
class CodegenTestsOnAndroidRunner private constructor(private val pathManager: PathManager) {
private fun generateTestSuite(): TestSuite {
private fun runTestsInEmulator(): TestSuite {
val rootSuite = TestSuite("Root")
downloadDependencies()
@@ -54,6 +54,14 @@ class CodegenTestsOnAndroidRunner private constructor(private val pathManager: P
rootSuite.addTest(this)
}
enableD8(true)
runTestsOnEmulator(gradleRunner, TestSuite("D8")).apply {
(0 until this.countTestCases()).forEach {
val testCase = testAt(it) as TestCase
testCase.name += "_D8"
}
rootSuite.addTest(this)
}
}
catch (e: RuntimeException) {
e.printStackTrace()
@@ -74,6 +82,17 @@ class CodegenTestsOnAndroidRunner private constructor(private val pathManager: P
return rootSuite
}
private fun enableD8(enable: Boolean) {
val file = File(pathManager.androidTmpFolder, "gradle.properties")
val lines = file.readLines().map {
if (it.startsWith("android.enableD8=")) {
"android.enableD8=$enable"
}
else it
}
file.writeText(lines.joinToString("\n"))
}
private fun processReport(suite: TestSuite, resultOutput: String) {
val reportFolder = pathManager.tmpFolder + "/build/outputs/androidTest-results/connected"
try {
@@ -87,7 +106,7 @@ class CodegenTestsOnAndroidRunner private constructor(private val pathManager: P
}
private fun runTestsOnEmulator(gradleRunner: GradleRunner, suite: TestSuite): TestSuite? {
private fun runTestsOnEmulator(gradleRunner: GradleRunner, suite: TestSuite): TestSuite {
val platformPrefixProperty = System.setProperty(PlatformUtils.PLATFORM_PREFIX_KEY, "Idea")
try {
val resultOutput = gradleRunner.connectedDebugAndroidTest()
@@ -120,8 +139,8 @@ class CodegenTestsOnAndroidRunner private constructor(private val pathManager: P
companion object {
@JvmStatic
fun getTestSuite(pathManager: PathManager): TestSuite {
return CodegenTestsOnAndroidRunner(pathManager).generateTestSuite()
fun runTestsInEmulator(pathManager: PathManager): TestSuite {
return CodegenTestsOnAndroidRunner(pathManager).runTestsInEmulator()
}
private fun cleanAndBuildProject(gradleRunner: GradleRunner) {
@@ -68,6 +68,10 @@ public class PathManager {
return tmpFolder + "/src";
}
public String getAndroidTmpFolder() {
return tmpFolder;
}
public String getAndroidSdkRoot() {
return getDependenciesRoot() + "/android-sdk";
}
@@ -52,7 +52,7 @@ public class AndroidRunner {
CodegenTestsOnAndroidGenerator.generate(pathManager);
System.out.println("Run tests on android...");
TestSuite suite = CodegenTestsOnAndroidRunner.getTestSuite(pathManager);
TestSuite suite = CodegenTestsOnAndroidRunner.runTestsInEmulator(pathManager);
//AndroidJpsBuildTestCase indirectly depends on UsefulTestCase which compiled against java 8
//TODO: Need add separate run configuration for AndroidJpsBuildTestCase
//suite.addTest(new AndroidJpsBuildTestCase());