From 157c5009f03a67d31c17b1e3966f66efd00977d7 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Thu, 24 Mar 2016 15:57:45 +0300 Subject: [PATCH] Test: download android sdk using sdk-manager-plugin --- .../jetbrains/kotlin/gradle/BaseGradleIT.kt | 22 +++++++++++-------- ...dleIT.kt => KotlinAndroidGradleCLIOnly.kt} | 15 ++++++++----- .../kotlin/gradle/util/gradleRunningUtils.kt | 3 ++- .../AndroidProject/Android/build.gradle | 13 +---------- .../AndroidProject/Lib/build.gradle | 15 ++----------- .../testProject/AndroidProject/build.gradle | 14 +++++++++++- .../AndroidProject/local.properties | 10 --------- 7 files changed, 40 insertions(+), 52 deletions(-) rename libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/{KotlinAndroidGradleIT.kt => KotlinAndroidGradleCLIOnly.kt} (85%) delete mode 100644 libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/AndroidProject/local.properties diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt index 575554998e2..b2cc1a07b4b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt @@ -74,8 +74,8 @@ abstract class BaseGradleIT { /** * @see [ThreadTracker] */ - val assertThreadLeaks: Boolean = true - ) + val assertThreadLeaks: Boolean = true, + val androidHome: File? = null) open inner class Project(val projectName: String, val wrapperVersion: String = "1.4", val minLogLevel: LogLevel = LogLevel.DEBUG) { open val resourcesRoot = File(resourcesRootFile, "testProject/$projectName") @@ -97,8 +97,9 @@ abstract class BaseGradleIT { val compiledJavaSources: Iterable by lazy { javaSourcesListRegex.findAll(output).asIterable().flatMap { it.groups[1]!!.value.split(" ").filter { it.endsWith(".java", ignoreCase = true) }.map { File(it).canonicalFile } } } } - fun Project.build(vararg tasks: String, options: BuildOptions = defaultBuildOptions(), check: CompiledProject.() -> Unit) { - val cmd = createBuildCommand(tasks, options) + fun Project.build(vararg params: String, options: BuildOptions = defaultBuildOptions(), check: CompiledProject.() -> Unit) { + val cmd = createBuildCommand(params, options) + val env = createEnvironmentVariablesMap(options) if (options.withDaemon) { prepareDaemon(wrapperVersion) @@ -106,16 +107,12 @@ abstract class BaseGradleIT { println("<=== Test build: ${this.projectName} $cmd ===>") - runAndCheck(cmd, check) - } - - private fun Project.runAndCheck(cmd: List, check: CompiledProject.() -> Unit) { val projectDir = File(workingDir, projectName) if (!projectDir.exists()) { setupWorkingDir() } - val result = runProcess(cmd, projectDir) + val result = runProcess(cmd, projectDir, env) CompiledProject(this, result.output, result.exitCode).check() } @@ -217,6 +214,13 @@ abstract class BaseGradleIT { options.incremental?.let { add("-Pkotlin.incremental=$it") } } + private fun Project.createEnvironmentVariablesMap(options: BuildOptions): Map = + hashMapOf().apply { + val sdkDir = options.androidHome + if (sdkDir != null) { + sdkDir.parentFile.mkdirs() + put("ANDROID_HOME", sdkDir.canonicalPath) + } } private fun String.normalize() = this.lineSequence().joinToString(SYSTEM_LINE_SEPARATOR) diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinAndroidGradleIT.kt b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinAndroidGradleCLIOnly.kt similarity index 85% rename from libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinAndroidGradleIT.kt rename to libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinAndroidGradleCLIOnly.kt index 69f8e6432ad..60c640927f5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinAndroidGradleIT.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinAndroidGradleCLIOnly.kt @@ -1,17 +1,20 @@ package org.jetbrains.kotlin.gradle -import org.junit.Ignore import org.junit.Test +import java.io.File -@Ignore("Requires Android SDK") -class KotlinAndroidGradleIT : BaseGradleIT() { +private const val DEFAULT_GRADLE_VERSION = "2.3" + +class KotlinAndroidGradleCLIOnly : BaseGradleIT() { override fun defaultBuildOptions() = - BuildOptions(withDaemon = true, assertThreadLeaks = false) + BuildOptions(withDaemon = true, + assertThreadLeaks = false, + androidHome = File("../../../dependencies/android-sdk-for-tests")) @Test fun testSimpleCompile() { - val project = Project("AndroidProject", "2.3") + val project = Project("AndroidProject", DEFAULT_GRADLE_VERSION) project.build("build") { assertSuccessful() @@ -58,7 +61,7 @@ class KotlinAndroidGradleIT : BaseGradleIT() { @Test fun testModuleNameAndroid() { - val project = Project("AndroidProject", "2.3") + val project = Project("AndroidProject", DEFAULT_GRADLE_VERSION) project.build("build") { assertContains( diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/util/gradleRunningUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/util/gradleRunningUtils.kt index d78fa01cdbe..d78ba4ee559 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/util/gradleRunningUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/util/gradleRunningUtils.kt @@ -20,8 +20,9 @@ Executing process was ${if (isSuccessful) "successful" else "unsuccessful"} """ } -fun runProcess(cmd: List, workingDir: File): ProcessRunResult { +fun runProcess(cmd: List, workingDir: File, environmentVariables: Map = mapOf()): ProcessRunResult { val builder = ProcessBuilder(cmd) + builder.environment().putAll(environmentVariables) builder.directory(workingDir) // redirectErrorStream merges stdout and stderr, so it can be get from process.inputStream builder.redirectErrorStream(true) diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/AndroidProject/Android/build.gradle b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/AndroidProject/Android/build.gradle index ce300388df2..dbded171820 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/AndroidProject/Android/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/AndroidProject/Android/build.gradle @@ -1,15 +1,4 @@ -buildscript { - repositories { - mavenCentral() - maven { - url 'file://' + pathToKotlinPlugin - } - } - dependencies { - classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:0.1-SNAPSHOT' - classpath 'com.android.tools.build:gradle:1.1.0' - } -} +apply plugin: 'android-sdk-manager' apply plugin: 'com.android.application' apply plugin: 'kotlin-android' diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/AndroidProject/Lib/build.gradle b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/AndroidProject/Lib/build.gradle index 47346df7988..c6d5793631e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/AndroidProject/Lib/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/AndroidProject/Lib/build.gradle @@ -1,16 +1,5 @@ -buildscript { - repositories { - mavenCentral() - maven { - url 'file://' + pathToKotlinPlugin - } - } - dependencies { - classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:0.1-SNAPSHOT' - classpath 'com.android.tools.build:gradle:1.1.0' - } -} -apply plugin: 'com.android.library' +apply plugin: 'android-sdk-manager' +apply plugin: 'com.android.application' apply plugin: 'kotlin-android' repositories { diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/AndroidProject/build.gradle b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/AndroidProject/build.gradle index 495c5038ea6..2715bc845c5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/AndroidProject/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/AndroidProject/build.gradle @@ -1 +1,13 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. +buildscript { + repositories { + mavenCentral() + maven { + url 'file://' + pathToKotlinPlugin + } + } + dependencies { + classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:0.1-SNAPSHOT' + classpath 'com.android.tools.build:gradle:1.1.0' + classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.12.+' + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/AndroidProject/local.properties b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/AndroidProject/local.properties deleted file mode 100644 index 45051c5187b..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/AndroidProject/local.properties +++ /dev/null @@ -1,10 +0,0 @@ -# This file is automatically generated by Android Studio. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must *NOT* be checked into Version Control Systems, -# as it contains information specific to your local configuration. - -# Location of the SDK. This is only used by Gradle. -# For customization when using a Version Control System, please read the -# header note. -sdk.dir=C:/Program Files (x86)/Android/android-studio-0.5.1/sdk \ No newline at end of file