From 358e8e001966a7eee1f4c0e2ae73b0b52b93f505 Mon Sep 17 00:00:00 2001 From: Xavier Ducrohet Date: Thu, 7 Feb 2013 14:00:13 -0800 Subject: Automate testing build output on devices. This is to test the plugin itself, not a feature of the plugin. 'gradlew deviceTest' is similar to 'gradlew buildTest' in that it requires an SDK through ANDROID_HOME, and then builds a set of projects. It differs in that it then pushed the project (and its test project) to a connected device and runs the test there. Note: This is even longer running that buildTest, and since it requires a device, it is not a dependence on check. This must be run separately. Change-Id: I9d211ef22a680a4fba62314e943de3fdd54e4eee --- .../com/android/build/gradle/DeviceTest.groovy | 92 ---------------------- .../com/android/build/gradle/DeviceTest.java | 79 +++++++++++++++++++ 2 files changed, 79 insertions(+), 92 deletions(-) delete mode 100644 gradle/src/device-test/groovy/com/android/build/gradle/DeviceTest.groovy create mode 100644 gradle/src/device-test/groovy/com/android/build/gradle/DeviceTest.java (limited to 'gradle/src/device-test') diff --git a/gradle/src/device-test/groovy/com/android/build/gradle/DeviceTest.groovy b/gradle/src/device-test/groovy/com/android/build/gradle/DeviceTest.groovy deleted file mode 100644 index 73a592a..0000000 --- a/gradle/src/device-test/groovy/com/android/build/gradle/DeviceTest.groovy +++ /dev/null @@ -1,92 +0,0 @@ -/* - * 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 com.android.build.gradle.internal.test.BaseTest - -/** - * 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. - * - * This does not test every projects under tests, instead it's a selection that actually has - * tests. - * - */ -public class DeviceTest extends BaseTest { - - private File testDir - private File sdkDir - - @Override - protected void setUp() throws Exception { - testDir = getTestDir() - sdkDir = getSdkDir() - } - - void testApi() { - runTestsOn("api") - } - - void testAppLibTest() { - runTestsOn("applibtest") - } - - void testBasic() { - runTestsOn("basic") - } - - void testFlavored() { - runTestsOn("flavored") - } - - void testFlavorLib() { - runTestsOn("flavorlib") - } - - void testFlavors() { - runTestsOn("flavors") - } - - void testLibsTest() { - runTestsOn("libsTest") - } - - void testMigrated() { - runTestsOn("migrated") - } - - void testMultiRes() { - runTestsOn("multires") - } - - void testOverlay1() { - runTestsOn("overlay1") - } - - void testOverlay2() { - runTestsOn("overlay2") - } - - private File runTestsOn(String name) { - return runGradleTasks(name, "check") - } -} \ No newline at end of file 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 index 0000000..778327f --- /dev/null +++ b/gradle/src/device-test/groovy/com/android/build/gradle/DeviceTest.java @@ -0,0 +1,79 @@ +/* + * 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.Test; +import junit.framework.TestSuite; + +/** + * 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. + * + * This does not test every projects under tests, instead it's a selection that actually has + * tests. + * + */ +public class DeviceTest extends BuildTest { + + private String projectName; + private String gradleVersion; + + private static final String[] sBuiltProjects = new String[] { + "api", "applibtest", "basic", "flavored", "flavorlib", + "flavors", "libsTest", "migrated", "multires", "overlay1", "overlay2", + }; + + public static Test suite() { + TestSuite suite = new TestSuite(); + suite.setName("DeviceTest"); + + for (String gradleVersion : BasePlugin.GRADLE_SUPPORTED_VERSIONS) { + // first the project we build on all available versions of Gradle + for (String projectName : sBuiltProjects) { + String testName = "check_" + projectName + "_" + gradleVersion; + + DeviceTest test = (DeviceTest) TestSuite.createTest(DeviceTest.class, testName); + test.setProjectInfo(projectName, gradleVersion); + suite.addTest(test); + } + } + + return suite; + } + + private void setProjectInfo(String projectName, String gradleVersion) { + this.projectName = projectName; + this.gradleVersion = gradleVersion; + } + + @Override + protected void runTest() throws Throwable { + try { + runTasksOnProject(projectName, gradleVersion, "check"); + } finally { + // because runTasksOnProject will throw an exception if the gradle side fails, do this + // in the finally block. + + // TODO: Get the test output and copy it in here. + } + } +} \ No newline at end of file -- cgit v1.2.3