blob: e64d75d08b2be8fa791ac0ad8591a303e20f5a5b [file] [log] [blame]
import com.android.tools.internal.testing.DevicePool;
apply plugin: 'groovy'
apply plugin: 'jacoco-tools-base'
apply plugin: 'com.google.protobuf'
protobuf {
protoc {
artifact = 'com.google.protobuf:protoc:3.0.0'
}
}
repositories {
maven { url = uri(rootProject.cloneArtifacts.repository) }
}
dependencies {
compile gradleApi()
compile localGroovy()
compile project(':analytics-library:protos')
compile project(':base:apkzlib')
compile project(':base:builder')
compile project(':base:builder-model')
compile project(':base:gradle')
compile project(':base:gradle-experimental')
compile project(':base:instant-run:instant-run-client')
compile project(':base:lint')
compile project(':base:sdk-common')
compile project(':base:testing-infrastructure:device-pool:device-provider')
compile project(':base:testutils')
compile libs.junit
compile libs.apache_commons_io
compile libs.apache_commons_lang
compile libs.protobuf
compile libs.protobuf_util
compile libs.truth
compile libs.google_api_client
compile libs.google_storage_client
testCompile libs.mockito_all
// Jacoco version should be the version bundled with Gradle. Not the default version used by
// the plugin.
compile 'org.jacoco:org.jacoco.agent:0.7.5.201505241946'
// Add dependency on plugin code. Exclude transitive dependencies to avoid conflict due to
// Groovy versions.
compile(project(':base:gradle-core')) {
transitive = false
}
testCompile(project(':base:gradle')) {
transitive = false
}
testCompile(project(':base:gradle-experimental')) {
transitive = false
}
}
configurations {
// google-api-client depends on guava-jdk5.
compile.exclude group: 'com.google.guava', module: 'guava-jdk5'
}
File getCheckedInSdk() {
String directoryName;
String os = System.getProperty("os.name")
if (os.startsWith("Mac")) {
directoryName = "darwin"
} else if (os.startsWith("Linux")) {
directoryName = "linux"
} else if (os.startsWith("Windows")) {
directoryName = "windows"
}
return rootProject.file("../prebuilts/studio/sdk/" + directoryName)
}
def testEnvironment = System.getenv().findAll {it.value != null}
testEnvironment << [
GRADLE_USER_HOME : new File(project.buildDir, "GRADLE_USER_HOME"),
PROJECT_BUILD_DIR : project.buildDir,
CUSTOM_REPO : rootProject.file("../out/repo"),
INTEGRATION_TEST : "true",
DATA_BINDING_INTERNAL_REPO : rootProject.file("../tools/data-binding/internal-prebuilts"),
DATA_BINDING_REPO : rootProject.file("../tools/data-binding/maven-repo")
]
def testEnvironmentCheckedInSdk = new HashMap()
testEnvironmentCheckedInSdk << testEnvironment
testEnvironmentCheckedInSdk['ANDROID_HOME'] = getCheckedInSdk()
// These tasks will not depend on publishLocal, so they will run integration
// tests against whatever version of the plugin is in ../../../out/repo. This
// allows us to run integration tests with different versions of Java, without
// rebuilding the plugin.
task testPrebuilts(type: Test)
task connectedIntegrationTestPrebuilts(type: Test)
File tempFile = new File(project.buildDir, 'tmp')
tempFile.mkdirs()
configure([test, testPrebuilts]) {
description =
"Runs the project integration tests. This requires an SDK either from the Android " +
"source tree, under out/..., or an env var ANDROID_HOME."
systemProperties['jar.path'] = jar.archivePath
systemProperties['java.io.tmpdir'] = tempFile.absolutePath
environment = testEnvironmentCheckedInSdk
// Always run the task, when requested.
outputs.upToDateWhen { false }
forkEvery = 1
maxParallelForks = Runtime.runtime.availableProcessors() / 4
useJUnit {
if (System.properties['test.includeCategories'] != null) {
def categories = System.properties['test.includeCategories'].split(',')
String defaultPackage = "com.android.build.gradle.integration.common.category."
categories = categories.collect { it.charAt(0).isUpperCase() ? defaultPackage + it : it }
includeCategories categories as String[]
}
excludeCategories "com.android.build.gradle.integration.common.category.DeviceTests"
excludeCategories "com.android.build.gradle.integration.common.category.OnlineTests"
}
exclude "com/android/build/gradle/integration/performance/**"
exclude "com/android/build/gradle/integration/automatic/**"
}
task automaticTest(type: Test) {
include "com/android/build/gradle/integration/automatic/**"
systemProperties['junit.parallel.threads'] = Runtime.runtime.availableProcessors() / 2
// Always run the task, when requested.
outputs.upToDateWhen { false }
environment = testEnvironmentCheckedInSdk
}
task onlineTest(type: Test) {
// Always run the task, when requested.
outputs.upToDateWhen { false }
environment = testEnvironmentCheckedInSdk
useJUnit {
includeCategories "com.android.build.gradle.integration.common.category.OnlineTests"
}
}
check.dependsOn automaticTest
task connectedIntegrationTest(type: Test)
configure([connectedIntegrationTest, connectedIntegrationTestPrebuilts]) {
testClassesDir = sourceSets.test.output.classesDir
classpath = sourceSets.test.runtimeClasspath
description =
"Runs the project integration tests with device tests. This requires an SDK either " +
"from the Android source tree, under out/..., or an env var ANDROID_HOME " +
"and a device."
group = "verification"
systemProperties['jar.path'] = jar.archivePath
systemProperties['java.io.tmpdir'] = tempFile.absolutePath
environment testEnvironment
// Always run the task, when requested.
outputs.upToDateWhen { false }
forkEvery= 1
def count = Math.ceil(Runtime.runtime.availableProcessors() / 4)
if (count > 8) {
count = 8
}
maxParallelForks = count
useJUnit {
includeCategories "com.android.build.gradle.integration.common.category.DeviceTests"
}
exclude "com/android/build/gradle/integration/performance/**"
exclude "com/android/build/gradle/integration/automatic/**"
}
task performanceTest(type: Test) {
include "com/android/build/gradle/integration/performance/**"
testClassesDir = sourceSets.test.output.classesDir
classpath = sourceSets.test.runtimeClasspath
description =
"Runs the project performance tests. This requires an SDK either " +
"from the Android source tree, under out/..., or an env var ANDROID_HOME."
group = "verification"
systemProperties['jar.path'] = jar.archivePath
environment = testEnvironment
reports {
junitXml.destination "${project.buildDir}/perf-results"
}
outputs.upToDateWhen { false }
}
configure([test, testPrebuilts, onlineTest, connectedIntegrationTest,
connectedIntegrationTestPrebuilts, performanceTest]) {
testLogging {
events = ['FAILED', 'PASSED', 'SKIPPED', 'STANDARD_ERROR', 'STARTED']
displayGranularity = 2 // Show test class and method.
exceptionFormat = 'full'
showCauses = true
}
}
task buildTestDependencies {
dependsOn ':base:instant-run:instant-run-server:jar'
}
DevicePool devicePool = new DevicePool();
task startDevicePool << {
// This port number needs to be kept in sync with DevicePoolClient.
devicePool.start(3431)
}
task stopDevicePool << {
devicePool.stop()
}
startDevicePool.finalizedBy stopDevicePool
stopDevicePool.mustRunAfter connectedIntegrationTestPrebuilts, connectedIntegrationTest
automaticTest.dependsOn ':publishLocal'
onlineTest.dependsOn ':publishLocal'
test.dependsOn buildTestDependencies, ':publishLocal'
testPrebuilts.dependsOn buildTestDependencies
connectedIntegrationTest.dependsOn buildTestDependencies, ':publishLocal', startDevicePool
connectedIntegrationTestPrebuilts.dependsOn buildTestDependencies, startDevicePool
performanceTest.dependsOn ':publishLocal'
if (tasks.findByName("jacocoTestReport") != null) {
jacocoTestReport {
sourceSets project(':base:gradle-experimental').sourceSets.main
sourceSets project(':base:gradle').sourceSets.main
sourceSets project(':base:gradle-core').sourceSets.main
sourceSets project(':base:builder').sourceSets.main
sourceSets project(':base:builder-model').sourceSets.main
sourceSets project(':base:builder-test-api').sourceSets.main
}
// Due to memory constraints, apply jacoco only when jacocoTestReport is invoked. Make sure to
// rerun tests when generating report jacoco.
gradle.taskGraph.whenReady { TaskExecutionGraph taskGraph ->
if (taskGraph.hasTask(jacocoTestReport)) {
test.environment("ATTACH_JACOCO_AGENT", "yes")
}
}
}