Prepare support for device tests.
Xavier Ducrohet [Fri, 21 Dec 2012 00:34:59 +0000 (16:34 -0800)]
This refactors the name and location of the build test,
and creates a new tasks to run tests that require devices.

Change-Id: Iddcfaae9c3d7a29bbb686adfe41201f3cecee78b

build.gradle
gradle/build.gradle
gradle/src/build-test/groovy/com/android/build/gradle/BuildTest.groovy [moved from gradle/src/integration-test/groovy/com/android/build/gradle/ProjectTest.groovy with 96% similarity]
gradle/src/device-test/groovy/com/android/build/gradle/DeviceTest.java [new file with mode: 0644]

index 5a6b743..1c5c1bc 100644 (file)
@@ -32,3 +32,7 @@ task check {
     //nothing
 }
 check.dependsOn makeAggregateReport
+
+task clean(type: Delete) {
+   delete 'build'
+}
\ No newline at end of file
index ff5abd3..f5d48c1 100644 (file)
@@ -9,9 +9,13 @@ configurations {
 }
 
 sourceSets {
-    integrationTest {
-        groovy.srcDir file('src/integration-test/groovy')
-        resources.srcDir file('src/integration-test/resources')
+    buildTest {
+        groovy.srcDir file('src/build-test/groovy')
+        resources.srcDir file('src/build-test/resources')
+    }
+    deviceTest {
+        groovy.srcDir file('src/device-test/groovy')
+        resources.srcDir file('src/device-test/resources')
     }
 }
 
@@ -22,15 +26,20 @@ dependencies {
 
     testCompile 'junit:junit:3.8.1'
 
-    integrationTestCompile sourceSets.main.output
-    integrationTestCompile configurations.testCompile
-    integrationTestCompile sourceSets.test.output
-    integrationTestRuntime configurations.testRuntime
+    buildTestCompile sourceSets.main.output
+    buildTestCompile configurations.testCompile
+    buildTestCompile sourceSets.test.output
+    buildTestCompile configurations.testRuntime
+
+    deviceTestCompile sourceSets.main.output
+    deviceTestCompile configurations.testCompile
+    deviceTestCompile sourceSets.test.output
+    deviceTestCompile configurations.testRuntime
 }
 
 idea {
     module {
-        testSourceDirs += file('src/integration-test/groovy')
+        testSourceDirs += files('src/build-test/groovy', 'src/device-test/groovy')
     }
 }
 
@@ -55,13 +64,24 @@ task publishLocal(type: Upload) {
 }
 publishLocal.dependsOn ':builder:publishLocal'
 
-task integrationTest(type: Test, dependsOn: publishLocal) {
-    testClassesDir = sourceSets.integrationTest.output.classesDir
-    classpath = sourceSets.integrationTest.runtimeClasspath
+task buildTest(type: Test, dependsOn: publishLocal) {
+    testClassesDir = sourceSets.buildTest.output.classesDir
+    classpath = sourceSets.buildTest.runtimeClasspath
+    description = "Runs the project build 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
+}
+
+task deviceTest(type: Test, dependsOn: publishLocal) {
+    testClassesDir = sourceSets.deviceTest.output.classesDir
+    classpath = sourceSets.deviceTest.runtimeClasspath
+    description = "Runs the device tests. This requires a device."
+    group = "verification"
     systemProperties['jar.path'] = jar.archivePath
 }
 
-check.dependsOn integrationTest
+deviceTest.dependsOn buildTest
+check.dependsOn buildTest, deviceTest
 
 
 project.ext.sonatypeUsername = project.hasProperty('sonatypeUsername') ? sonatypeUsername : ""
@@ -27,8 +27,12 @@ import javax.imageio.ImageIO
 import java.awt.image.BufferedImage
 
 /**
+ * Build tests.
+ *
+ * This requires an SDK, found through the ANDROID_HOME environment variable or present in the
+ * Android Source tree under out/host/<platform>/sdk/... (result of 'make sdk')
  */
-class ProjectTest extends BaseTest {
+class BuildTest extends BaseTest {
 
     private File testDir
     private File sdkDir
diff --git a/gradle/src/device-test/groovy/com/android/build/gradle/DeviceTest.java b/gradle/src/device-test/groovy/com/android/build/gradle/DeviceTest.java
new file mode 100644 (file)
index 0000000..3d0da29
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2012 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;
+
+import junit.framework.TestCase;
+
+/**
+ * Device tests.
+ *
+ * This build relies on the {@link BuildTest} to have been run, so that all that there
+ * is left to do is deploy the tested and test apps to the device and run the tests (and gather
+ * the result).
+ *
+ * The dependency on the build tests is ensured by the gradle tasks definition.
+ *
+ */
+public class DeviceTest extends TestCase {
+
+    public void testFoo() throws Exception {
+        assertTrue(true);
+    }
+}