From 0288a1bd2d49ca6f445b56bd241612271533ccb2 Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Mon, 22 Oct 2018 09:38:19 +0200 Subject: [PATCH] Restructure android test module, update dependencies --- .../android-module/AndroidManifest.xml | 17 ---------- .../android-tests/android-module/build.gradle | 32 +++++++------------ .../android-module/gradle.properties | 1 - .../src/main/AndroidManifest.xml | 9 ++++++ .../AbstractCodegenTestCaseOnAndroid.java | 0 .../kotlin/android/tests/MyActivity.java | 0 .../{ => src/main}/res/values/strings.xml | 0 .../tested-module/AndroidManifest.xml | 6 ---- .../tests/CodegenTestsOnAndroidRunner.kt | 16 +++++++--- .../android/tests/download/SDKDownloader.java | 10 +++--- .../android/tests/gradle/GradleRunner.java | 8 +++-- .../tests/CodegenTestsOnAndroidGenerator.kt | 4 +-- 12 files changed, 45 insertions(+), 58 deletions(-) delete mode 100644 compiler/android-tests/android-module/AndroidManifest.xml create mode 100644 compiler/android-tests/android-module/src/main/AndroidManifest.xml rename compiler/android-tests/android-module/src/{ => main/java}/org/jetbrains/kotlin/android/tests/AbstractCodegenTestCaseOnAndroid.java (100%) rename compiler/android-tests/android-module/src/{ => main/java}/org/jetbrains/kotlin/android/tests/MyActivity.java (100%) rename compiler/android-tests/android-module/{ => src/main}/res/values/strings.xml (100%) delete mode 100644 compiler/android-tests/android-module/tested-module/AndroidManifest.xml diff --git a/compiler/android-tests/android-module/AndroidManifest.xml b/compiler/android-tests/android-module/AndroidManifest.xml deleted file mode 100644 index de6be785e87..00000000000 --- a/compiler/android-tests/android-module/AndroidManifest.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - diff --git a/compiler/android-tests/android-module/build.gradle b/compiler/android-tests/android-module/build.gradle index f1702c3a2c8..04c9148d3e0 100644 --- a/compiler/android-tests/android-module/build.gradle +++ b/compiler/android-tests/android-module/build.gradle @@ -7,7 +7,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.android.tools.build:gradle:3.2.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -22,7 +22,7 @@ repositories { android { compileSdkVersion 19 - buildToolsVersion "27.0.3" + buildToolsVersion "28.0.3" defaultConfig { applicationId "org.jetbrains.kotlin.android.tests" @@ -31,7 +31,7 @@ android { versionCode 1 versionName "1.0" testApplicationId "org.jetbrains.kotlin.android.tests.gradle" - testInstrumentationRunner "android.test.InstrumentationTestRunner" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" multiDexEnabled true } buildTypes { @@ -41,20 +41,6 @@ android { } } - sourceSets { - main { - manifest.srcFile 'AndroidManifest.xml' - java { - srcDirs = ['src'] - } - res.srcDirs = ['res'] - } - androidTest { - java { - srcDirs = ['src'] - } - } - } packagingOptions { exclude 'META-INF/build.txt' } //TODO run under java 6, cause there is error on implicit 'stream' import in 'asWithMutable' test @@ -72,6 +58,11 @@ android { maxProcessCount 4 additionalParameters "--debug" } + + testOptions { + resultsDir = "build/test/results" + } + } task jarTestFolders() { @@ -89,7 +80,8 @@ tasks.withType(JavaCompile) { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - androidTestCompile 'junit:junit:4.12' - compile 'com.android.support:multidex:1.0.1' + implementation fileTree(dir: 'libs', include: ['*.jar']) + androidTestImplementation 'junit:junit:4.12' + implementation 'com.android.support:multidex:1.0.3' + androidTestImplementation 'com.android.support.test:runner:1.0.2' } diff --git a/compiler/android-tests/android-module/gradle.properties b/compiler/android-tests/android-module/gradle.properties index 75e39fe7d17..56e25b9919c 100644 --- a/compiler/android-tests/android-module/gradle.properties +++ b/compiler/android-tests/android-module/gradle.properties @@ -1,4 +1,3 @@ #don't try to download android specific tools within gradle: licence acceptance will be required android.builder.sdkDownload=false -android.enableAapt2=false android.enableD8=false \ No newline at end of file diff --git a/compiler/android-tests/android-module/src/main/AndroidManifest.xml b/compiler/android-tests/android-module/src/main/AndroidManifest.xml new file mode 100644 index 00000000000..8b7f6ac94b8 --- /dev/null +++ b/compiler/android-tests/android-module/src/main/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/compiler/android-tests/android-module/src/org/jetbrains/kotlin/android/tests/AbstractCodegenTestCaseOnAndroid.java b/compiler/android-tests/android-module/src/main/java/org/jetbrains/kotlin/android/tests/AbstractCodegenTestCaseOnAndroid.java similarity index 100% rename from compiler/android-tests/android-module/src/org/jetbrains/kotlin/android/tests/AbstractCodegenTestCaseOnAndroid.java rename to compiler/android-tests/android-module/src/main/java/org/jetbrains/kotlin/android/tests/AbstractCodegenTestCaseOnAndroid.java diff --git a/compiler/android-tests/android-module/src/org/jetbrains/kotlin/android/tests/MyActivity.java b/compiler/android-tests/android-module/src/main/java/org/jetbrains/kotlin/android/tests/MyActivity.java similarity index 100% rename from compiler/android-tests/android-module/src/org/jetbrains/kotlin/android/tests/MyActivity.java rename to compiler/android-tests/android-module/src/main/java/org/jetbrains/kotlin/android/tests/MyActivity.java diff --git a/compiler/android-tests/android-module/res/values/strings.xml b/compiler/android-tests/android-module/src/main/res/values/strings.xml similarity index 100% rename from compiler/android-tests/android-module/res/values/strings.xml rename to compiler/android-tests/android-module/src/main/res/values/strings.xml diff --git a/compiler/android-tests/android-module/tested-module/AndroidManifest.xml b/compiler/android-tests/android-module/tested-module/AndroidManifest.xml deleted file mode 100644 index 62a659797e9..00000000000 --- a/compiler/android-tests/android-module/tested-module/AndroidManifest.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - diff --git a/compiler/android-tests/src/org/jetbrains/kotlin/android/tests/CodegenTestsOnAndroidRunner.kt b/compiler/android-tests/src/org/jetbrains/kotlin/android/tests/CodegenTestsOnAndroidRunner.kt index b26199a1a02..74927c98736 100644 --- a/compiler/android-tests/src/org/jetbrains/kotlin/android/tests/CodegenTestsOnAndroidRunner.kt +++ b/compiler/android-tests/src/org/jetbrains/kotlin/android/tests/CodegenTestsOnAndroidRunner.kt @@ -54,6 +54,7 @@ class CodegenTestsOnAndroidRunner private constructor(private val pathManager: P rootSuite.addTest(this) } + renameReport() enableD8(true) runTestsOnEmulator(gradleRunner, TestSuite("D8")).apply { (0 until this.countTestCases()).forEach { @@ -94,18 +95,23 @@ class CodegenTestsOnAndroidRunner private constructor(private val pathManager: P } private fun processReport(suite: TestSuite, resultOutput: String) { - val reportFolder = pathManager.tmpFolder + "/build/outputs/androidTest-results/connected" + val reportFolder = reportFolder() try { val testCases = parseSingleReportInFolder(reportFolder) testCases.forEach { aCase -> suite.addTest(aCase) } Assert.assertNotEquals("There is no test results in report", 0, testCases.size.toLong()) + } catch (e: Exception) { + throw RuntimeException("Can't parse test results in $reportFolder\n$resultOutput", e) } - catch (e: Exception) { - throw RuntimeException("Can't parse test results in " + reportFolder + "\n" + resultOutput) - } - } + private fun renameReport() { + val reportFolder = File(reportFolder()) + reportFolder.renameTo(File(reportFolder.parentFile, reportFolder.name + "_dex")) + } + + private fun reportFolder() = pathManager.tmpFolder + "/build/test/results/connected/" + private fun runTestsOnEmulator(gradleRunner: GradleRunner, suite: TestSuite): TestSuite { val platformPrefixProperty = System.setProperty(PlatformUtils.PLATFORM_PREFIX_KEY, "Idea") try { diff --git a/compiler/android-tests/src/org/jetbrains/kotlin/android/tests/download/SDKDownloader.java b/compiler/android-tests/src/org/jetbrains/kotlin/android/tests/download/SDKDownloader.java index 6e8d6480f98..4a6d5ebc1f4 100644 --- a/compiler/android-tests/src/org/jetbrains/kotlin/android/tests/download/SDKDownloader.java +++ b/compiler/android-tests/src/org/jetbrains/kotlin/android/tests/download/SDKDownloader.java @@ -38,11 +38,11 @@ public class SDKDownloader { private final PathManager pathManager; - private static final String PLATFORM_TOOLS = "27.0.1"; - private static final String SDK_TOOLS = "25.1.6"; - public static final String BUILD_TOOLS = "27.0.3"; + private static final String PLATFORM_TOOLS = "28.0.1"; + private static final String SDK_TOOLS = "25.2.5"; + public static final String BUILD_TOOLS = "28.0.3"; private static final int ANDROID_VERSION = 19; - public static final String GRADLE_VERSION = "4.5.1"; + public static final String GRADLE_VERSION = "4.6"; public SDKDownloader(PathManager pathManager) { @@ -126,7 +126,7 @@ public class SDKDownloader { String buildToolsFolder = buildTools + BUILD_TOOLS + "/"; new File(buildToolsFolder).delete(); unzip(buildToolsZipPath, buildTools); - new File(buildTools + "/android-8.1.0").renameTo(new File(buildToolsFolder)); + new File(buildTools + "/android-9").renameTo(new File(buildToolsFolder)); } public void deleteAll() { diff --git a/compiler/android-tests/src/org/jetbrains/kotlin/android/tests/gradle/GradleRunner.java b/compiler/android-tests/src/org/jetbrains/kotlin/android/tests/gradle/GradleRunner.java index d8c100636f4..0f3b7d9d680 100644 --- a/compiler/android-tests/src/org/jetbrains/kotlin/android/tests/gradle/GradleRunner.java +++ b/compiler/android-tests/src/org/jetbrains/kotlin/android/tests/gradle/GradleRunner.java @@ -49,6 +49,7 @@ public class GradleRunner { System.out.println("Building gradle project..."); GeneralCommandLine build = generateCommandLine("build"); build.addParameter("--stacktrace"); + build.addParameter("--warn"); RunResult result = RunUtils.execute(build); OutputUtils.checkResult(result); } @@ -67,8 +68,11 @@ public class GradleRunner { public String connectedDebugAndroidTest() { System.out.println("Starting tests..."); - RunResult result = RunUtils.execute(generateCommandLine("connectedAndroidTest")); - return result.getOutput(); + GeneralCommandLine test = generateCommandLine("connectedAndroidTest"); + test.addParameters("--stacktrace"); + //To avoid problem with discovering tests on Android in multidex build + test.addParameters("-Pandroid.testInstrumentationRunnerArguments.class=org.jetbrains.kotlin.android.tests.CodegenTestCaseOnAndroid"); + return RunUtils.execute(test).getOutput(); } private GeneralCommandLine generateCommandLine(String taskName) { diff --git a/compiler/android-tests/tests/org/jetbrains/kotlin/android/tests/CodegenTestsOnAndroidGenerator.kt b/compiler/android-tests/tests/org/jetbrains/kotlin/android/tests/CodegenTestsOnAndroidGenerator.kt index ea0e3dfafb9..8d0547f4cdb 100644 --- a/compiler/android-tests/tests/org/jetbrains/kotlin/android/tests/CodegenTestsOnAndroidGenerator.kt +++ b/compiler/android-tests/tests/org/jetbrains/kotlin/android/tests/CodegenTestsOnAndroidGenerator.kt @@ -76,9 +76,9 @@ class CodegenTestsOnAndroidGenerator private constructor(private val pathManager private fun generateAndSave() { println("Generating test files...") val testSourceFilePath = - pathManager.srcFolderInAndroidTmpFolder + "/" + testClassPackage.replace(".", "/") + "/" + testClassName + ".java" + pathManager.srcFolderInAndroidTmpFolder + "/androidTest/java/" + testClassPackage.replace(".", "/") + "/" + testClassName + ".java" - FileWriter(File(testSourceFilePath)).use { + FileWriter(File(testSourceFilePath).also { it.parentFile.mkdirs() }).use { val p = Printer(it) p.print(FileUtil.loadFile(File("license/LICENSE.txt"))) p.println(