aboutsummaryrefslogtreecommitdiff
path: root/gradle/src
diff options
context:
space:
mode:
authorXavier Ducrohet <xav@android.com>2013-01-04 11:44:01 -0800
committerXavier Ducrohet <xav@android.com>2013-01-04 13:47:05 -0800
commit699b11b8fe52f3dd7b6f3350f7f3228aa306a213 (patch)
tree5aee5827ac624df3a3746f83a084824e4b96d564 /gradle/src
parentaed769eef90077a9447cf31b40a38c9790bbebc3 (diff)
downloadbuild-699b11b8fe52f3dd7b6f3350f7f3228aa306a213.tar.gz
Add options to the test reporting.
Support for customized results and report location. Queries the IDevice to construct a name. Copied the flavorlib samples to flavorlibWithFailedTests and removed the failing tests from flavorlib as it's still useful to have as a project with no failing test. Change-Id: Iea3f2ab0828ab93c2ace3ed41b4a5dda7554bbe3
Diffstat (limited to 'gradle/src')
-rw-r--r--gradle/src/build-test/groovy/com/android/build/gradle/BuildTest.groovy5
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/BaseExtension.groovy9
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy12
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/tasks/RunTestsTask.groovy40
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/internal/test/TestOptions.groovy26
5 files changed, 78 insertions, 14 deletions
diff --git a/gradle/src/build-test/groovy/com/android/build/gradle/BuildTest.groovy b/gradle/src/build-test/groovy/com/android/build/gradle/BuildTest.groovy
index 62f1ba0..1935fdb 100644
--- a/gradle/src/build-test/groovy/com/android/build/gradle/BuildTest.groovy
+++ b/gradle/src/build-test/groovy/com/android/build/gradle/BuildTest.groovy
@@ -132,10 +132,15 @@ class BuildTest extends BaseTest {
void testOtherProjects() {
File[] projects = testDir.listFiles()
for (File project : projects) {
+ if (!project.isDirectory()) {
+ continue
+ }
+
String name = project.name
if (name.startsWith(".")) {
continue
}
+
if (!builtProjects.contains(name)) {
buildProject(name)
}
diff --git a/gradle/src/main/groovy/com/android/build/gradle/BaseExtension.groovy b/gradle/src/main/groovy/com/android/build/gradle/BaseExtension.groovy
index 349c69c..3b1e85a 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/BaseExtension.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/BaseExtension.groovy
@@ -14,12 +14,12 @@
* limitations under the License.
*/
package com.android.build.gradle
-
import com.android.build.gradle.internal.dsl.AaptOptionsImpl
import com.android.build.gradle.internal.dsl.AndroidSourceSetFactory
import com.android.build.gradle.internal.dsl.DexOptionsImpl
import com.android.build.gradle.internal.dsl.GroupableProductFlavor
import com.android.build.gradle.internal.dsl.ProductFlavorDsl
+import com.android.build.gradle.internal.test.TestOptions
import com.android.builder.ProductFlavor
import org.gradle.api.Action
import org.gradle.api.NamedDomainObjectContainer
@@ -28,7 +28,6 @@ import org.gradle.api.artifacts.ConfigurationContainer
import org.gradle.api.internal.DefaultDomainObjectSet
import org.gradle.api.internal.project.ProjectInternal
import org.gradle.internal.reflect.Instantiator
-
/**
* Base android extension for all android plugins.
*/
@@ -39,6 +38,7 @@ public abstract class BaseExtension {
final ProductFlavor defaultConfig
final AaptOptionsImpl aaptOptions
final DexOptionsImpl dexOptions
+ final TestOptions testOptions
private final BasePlugin plugin
private final DefaultDomainObjectSet<BuildVariant> buildVariants =
@@ -58,6 +58,7 @@ public abstract class BaseExtension {
aaptOptions = instantiator.newInstance(AaptOptionsImpl.class)
dexOptions = instantiator.newInstance(DexOptionsImpl.class)
+ testOptions = instantiator.newInstance(TestOptions.class)
sourceSetsContainer = project.container(AndroidSourceSet,
new AndroidSourceSetFactory(instantiator, project.fileResolver))
@@ -113,6 +114,10 @@ public abstract class BaseExtension {
action.execute(dexOptions)
}
+ void test(Action<TestOptions> action) {
+ action.execute(testOptions)
+ }
+
public DefaultDomainObjectSet<BuildVariant> getBuildVariants() {
plugin.createAndroidTasks()
return buildVariants
diff --git a/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy b/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy
index 3531aff..3e331a1 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/BasePlugin.groovy
@@ -587,10 +587,18 @@ public abstract class BasePlugin {
}
runTestsTask.conventionMapping.resultsDir = {
- project.file("$project.buildDir/test-results/$variant.flavorDirName")
+ String location = extension.testOptions.resultsDir != null ?
+ extension.testOptions.resultsDir :
+ "$project.buildDir/test-results/$variant.flavorDirName"
+
+ project.file(location)
}
runTestsTask.conventionMapping.reportsDir = {
- project.file("$project.buildDir/reports/tests/$variant.flavorDirName")
+ String location = extension.testOptions.reportDir != null ?
+ extension.testOptions.reportDir :
+ "$project.buildDir/reports/tests/$variant.flavorDirName"
+
+ project.file(location)
}
variant.runTestsTask = runTestsTask
}
diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/RunTestsTask.groovy b/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/RunTestsTask.groovy
index 1d00484..6a36248 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/RunTestsTask.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/internal/tasks/RunTestsTask.groovy
@@ -14,7 +14,10 @@
* limitations under the License.
*/
package com.android.build.gradle.internal.tasks
+
import com.android.SdkConstants
+import com.android.annotations.NonNull
+import com.android.annotations.Nullable
import com.android.build.gradle.internal.ApplicationVariant
import com.android.builder.internal.util.concurrent.WaitableExecutor
import com.android.builder.testing.CustomTestRunListener
@@ -59,6 +62,7 @@ public class RunTestsTask extends BaseTask {
private static class DeviceTestRunner implements Callable<Boolean> {
private final IDevice mDevice
+ private final String mDeviceName
private final File mResultsDir
private final File mTestApk
private final ApplicationVariant mVariant
@@ -66,9 +70,12 @@ public class RunTestsTask extends BaseTask {
private final ApplicationVariant mTestedVariant
private final ILogger mLogger
- DeviceTestRunner(IDevice device, File testApk, ApplicationVariant variant, File testedApk,
- ApplicationVariant testedVariant, File resultsDir, ILogger logger) {
+ DeviceTestRunner(@NonNull IDevice device,
+ @NonNull File testApk, @NonNull ApplicationVariant variant,
+ @Nullable File testedApk, @NonNull ApplicationVariant testedVariant,
+ @NonNull File resultsDir, @NonNull ILogger logger) {
mDevice = device
+ mDeviceName = computeDeviceName(device)
mResultsDir = resultsDir
mTestApk = testApk
mVariant = variant
@@ -81,13 +88,11 @@ public class RunTestsTask extends BaseTask {
Boolean call() throws Exception {
try {
if (mTestedApk != null) {
- mLogger.info("Device '%s': installing %s", mDevice.serialNumber,
- mTestedApk.absolutePath)
+ mLogger.info("Device '%s': installing %s", mDeviceName, mTestedApk.absolutePath)
mDevice.installPackage(mTestedApk.absolutePath, true /*reinstall*/)
}
- mLogger.info("Device '%s': installing %s", mDevice.serialNumber,
- mTestApk.absolutePath)
+ mLogger.info("Device '%s': installing %s", mDeviceName, mTestApk.absolutePath)
mDevice.installPackage(mTestApk.absolutePath, true /*reinstall*/)
@@ -97,7 +102,7 @@ public class RunTestsTask extends BaseTask {
runner.setRunName(mDevice.serialNumber)
CustomTestRunListener runListener = new CustomTestRunListener(
- mDevice.serialNumber, mLogger)
+ mDeviceName, mLogger)
runListener.setReportDir(mResultsDir)
runner.run(runListener)
@@ -106,16 +111,31 @@ public class RunTestsTask extends BaseTask {
} finally {
// uninstall the apps
String packageName = mVariant.packageName
- mLogger.info("Device '%s': uninstalling %s", mDevice.serialNumber, packageName)
+ mLogger.info("Device '%s': uninstalling %s", mDeviceName, packageName)
mDevice.uninstallPackage(packageName)
if (mTestedApk != null) {
packageName = mTestedVariant.packageName
- mLogger.info("Device '%s': uninstalling %s", mDevice.serialNumber, packageName)
+ mLogger.info("Device '%s': uninstalling %s", mDeviceName, packageName)
mDevice.uninstallPackage(packageName)
}
}
}
+
+ private String computeDeviceName(@NonNull IDevice device) {
+ String version = device.getProperty(IDevice.PROP_BUILD_VERSION);
+ boolean emulator = device.isEmulator()
+
+ String name;
+ if (emulator) {
+ name = mDevice.avdName != null ? mDevice.avdName + "(AVD)" : mDevice.serialNumber
+ } else {
+ String model = device.getProperty(IDevice.DEVICE_MODEL_PROPERTY)
+ name = model != null ? model : mDevice.serialNumber
+ }
+
+ return version != null ? name + " - " + version : name
+ }
}
@TaskAction
@@ -134,7 +154,7 @@ public class RunTestsTask extends BaseTask {
timeOut -= sleepTime
}
- if (timeOut == 0) {
+ if (timeOut <= 0 && !bridge.hasInitialDeviceList()) {
throw new BuildException("Timeout getting device list.", null)
}
diff --git a/gradle/src/main/groovy/com/android/build/gradle/internal/test/TestOptions.groovy b/gradle/src/main/groovy/com/android/build/gradle/internal/test/TestOptions.groovy
new file mode 100644
index 0000000..bc16f61
--- /dev/null
+++ b/gradle/src/main/groovy/com/android/build/gradle/internal/test/TestOptions.groovy
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * 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 com.android.build.gradle.internal.test
+
+/**
+ * Options for the tests.
+ */
+class TestOptions {
+
+ String resultsDir
+ String reportDir
+}