From 1eb3d2ec1d63f7dea570c0223c5172bf0fcbc962 Mon Sep 17 00:00:00 2001 From: Michael Bogdanov Date: Sun, 24 Apr 2016 17:33:32 +0300 Subject: [PATCH] Added gradle android test project --- .../android-module/android-module.iml | 43 +----------- .../android-tests/android-module/build.gradle | 60 +++++++++++++++++ .../android/tests/download/SDKDownloader.java | 7 +- .../android/tests/gradle/GradleRunner.java | 66 +++++++++++++++++++ .../android/tests/run/PermissionManager.java | 1 + 5 files changed, 135 insertions(+), 42 deletions(-) create mode 100644 compiler/android-tests/android-module/build.gradle create mode 100644 compiler/android-tests/src/org/jetbrains/kotlin/android/tests/gradle/GradleRunner.java diff --git a/compiler/android-tests/android-module/android-module.iml b/compiler/android-tests/android-module/android-module.iml index 29057e99fbf..19dbd15d44e 100644 --- a/compiler/android-tests/android-module/android-module.iml +++ b/compiler/android-tests/android-module/android-module.iml @@ -1,43 +1,6 @@ - - - - - - - - - - - - - - + + - - + \ No newline at end of file diff --git a/compiler/android-tests/android-module/build.gradle b/compiler/android-tests/android-module/build.gradle new file mode 100644 index 00000000000..816573e9694 --- /dev/null +++ b/compiler/android-tests/android-module/build.gradle @@ -0,0 +1,60 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + repositories { + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:2.0.0' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} +apply plugin: 'com.android.application' + +repositories { + jcenter() +} + +android { + compileSdkVersion 16 + buildToolsVersion "23.0.3" + + defaultConfig { + applicationId "org.jetbrains.kotlin.android.tests" + minSdkVersion 16 + targetSdkVersion 16 + versionCode 1 + versionName "1.0" + testApplicationId "org.jetbrains.kotlin.android.tests.gradle" + testInstrumentationRunner "android.test.InstrumentationTestRunner" + } + buildTypes { + debug { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + + sourceSets { + main { + manifest.srcFile 'AndroidManifest.xml' + java { + srcDirs = ['src'] + } + res.srcDirs = ['res'] + } + androidTest { + java { + srcDirs = ['src'] + } + } + } + packagingOptions { exclude 'META-INF/build.txt' } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + androidTestCompile 'junit:junit:4.12' +} 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 5d6572c4b82..a93c4c22b2f 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 @@ -103,8 +103,11 @@ public class SDKDownloader { public void unzipAll() { String androidSdkRoot = pathManager.getAndroidSdkRoot(); unzip(platformZipPath, pathManager.getPlatformFolderInAndroidSdk()); - unzip(armImage, androidSdkRoot + "/system-images/android-" + ANDROID_VERSION + "/"); - unzip(x86Image, androidSdkRoot + "/system-images/android-" + ANDROID_VERSION + "/"); + new File(pathManager.getPlatformFolderInAndroidSdk() + "/android-4.1.2").renameTo(new File(pathManager.getPlatformFolderInAndroidSdk() + "/android-16")); + + unzip(armImage, androidSdkRoot + "/system-images/android-" + ANDROID_VERSION + "/default/"); + unzip(x86Image, androidSdkRoot + "/system-images/android-" + ANDROID_VERSION + "/default/"); + unzip(platformToolsZipPath, androidSdkRoot); unzip(skdToolsZipPath, androidSdkRoot); 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 new file mode 100644 index 00000000000..68e24def104 --- /dev/null +++ b/compiler/android-tests/src/org/jetbrains/kotlin/android/tests/gradle/GradleRunner.java @@ -0,0 +1,66 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.android.tests.gradle; + +import com.intellij.execution.configurations.GeneralCommandLine; +import com.intellij.openapi.util.SystemInfo; +import org.jetbrains.kotlin.android.tests.OutputUtils; +import org.jetbrains.kotlin.android.tests.PathManager; +import org.jetbrains.kotlin.android.tests.run.RunResult; +import org.jetbrains.kotlin.android.tests.run.RunUtils; +import org.jetbrains.kotlin.utils.ExceptionUtilsKt; + +import java.util.ArrayList; +import java.util.List; + +public class GradleRunner { + private final List listOfCommands; + + public GradleRunner(PathManager pathManager) { + listOfCommands = new ArrayList(); + String cmdName = SystemInfo.isWindows ? "gradlew.bat" : "gradlew"; + listOfCommands.add(pathManager.getTmpFolder() + "/" + cmdName); + listOfCommands.add("--build-file"); + listOfCommands.add(pathManager.getTmpFolder() + "/build.gradle"); + } + + + public void clean() { + System.out.println("Building gradle project..."); + RunResult result = RunUtils.execute(generateCommandLine("clean")); + OutputUtils.checkResult(result); + } + + public void build() { + System.out.println("Building gradle project..."); + RunResult result = RunUtils.execute(generateCommandLine("build")); + OutputUtils.checkResult(result); + } + + + public String connectedDebugAndroidTest() { + System.out.println("Starting tests..."); + RunResult result = RunUtils.execute(generateCommandLine("connectedAndroidTest")); + return result.getOutput(); + } + + private GeneralCommandLine generateCommandLine(String taskName) { + GeneralCommandLine commandLine = new GeneralCommandLine(listOfCommands); + commandLine.addParameter(taskName); + return commandLine; + } +} diff --git a/compiler/android-tests/src/org/jetbrains/kotlin/android/tests/run/PermissionManager.java b/compiler/android-tests/src/org/jetbrains/kotlin/android/tests/run/PermissionManager.java index e3e09db0447..48b1fe20477 100644 --- a/compiler/android-tests/src/org/jetbrains/kotlin/android/tests/run/PermissionManager.java +++ b/compiler/android-tests/src/org/jetbrains/kotlin/android/tests/run/PermissionManager.java @@ -33,6 +33,7 @@ public class PermissionManager { setExecPermissionForSimpleNamedFiles(new File(pathManager.getToolsFolderInAndroidSdk())); setExecPermissionForSimpleNamedFiles(new File(pathManager.getBuildToolsFolderInAndroidSdk() + "/" + SDKDownloader.BUILD_TOOLS)); setExecPermissionForSimpleNamedFiles(new File(pathManager.getPlatformToolsFolderInAndroidSdk())); + RunUtils.execute(generateChmodCmd(pathManager.getTmpFolder() + "/gradlew")); } }