/*
* 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;
import com.android.annotations.NonNull;
import com.google.common.collect.Lists;
import junit.framework.Test;
import junit.framework.TestSuite;
/**
* Automated tests building a set of projects using a set of gradle versions.
*
* 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')
*/
public class AutomatedBuildTest extends BuildTest {
private String testFolder;
private String projectName;
private String gradleVersion;
private TestType testType;
private static enum TestType { BUILD, REPORT, JACK }
private static final String[] sBuiltProjects = new String[] {
"aidl",
"api",
"applibtest",
"assets",
"attrOrder",
"basic",
"dependencies",
"dependencyChecker",
"emptySplit",
"filteredOutBuildType",
"filteredOutVariants",
"flavored",
"flavorlib",
"flavoredlib",
"flavors",
"genFolderApi",
"libMinifyJarDep",
"libMinifyLibDep",
"libTestDep",
"libsTest",
"localAarTest",
"localJars",
"migrated",
"multiDex",
"multiDexWithLib",
"multiproject",
"multires",
"ndkJniLib",
"ndkLibPrebuilts",
"ndkPrebuilts",
"ndkSanAngeles",
"noPreDex",
"overlay1",
"overlay2",
"pkgOverride",
"minify",
"minifyLib",
"renderscript",
"renderscriptInLib",
"renderscriptMultiSrc",
"rsSupportMode",
"sameNamedLibs",
"tictactoe"
};
private static final String[] sReportProjects = new String[] {
"basic",
"flavorlib"
};
private static final String[] sJackProjects = new String[] {
"basic",
"minify",
"multiDex",
};
public static Test suite() {
TestSuite suite = new TestSuite();
suite.setName("AutomatedBuildTest");
for (String gradleVersion : BasePlugin.GRADLE_SUPPORTED_VERSIONS) {
if (isIgnoredGradleVersion(gradleVersion)) {
continue;
}
// first the project we build on all available versions of Gradle
for (String projectName : sBuiltProjects) {
String testName = "build_" + projectName + "_" + gradleVersion;
AutomatedBuildTest test = (AutomatedBuildTest) TestSuite.createTest(
AutomatedBuildTest.class, testName);
test.setProjectInfo(FOLDER_TEST_REGULAR, projectName, gradleVersion, TestType.BUILD);
suite.addTest(test);
}
// then the project to run reports on
for (String projectName : sReportProjects) {
String testName = "report_" + projectName + "_" + gradleVersion;
AutomatedBuildTest test = (AutomatedBuildTest) TestSuite.createTest(
AutomatedBuildTest.class, testName);
test.setProjectInfo(FOLDER_TEST_REGULAR, projectName, gradleVersion,
TestType.REPORT);
suite.addTest(test);
}
if (System.getenv("TEST_JACK") != null) {
for (String projectName : sJackProjects) {
String testName = "jack_" + projectName + "_" + gradleVersion;
AutomatedBuildTest test = (AutomatedBuildTest) TestSuite.createTest(
AutomatedBuildTest.class, testName);
test.setProjectInfo(FOLDER_TEST_REGULAR, projectName, gradleVersion, TestType.JACK);
suite.addTest(test);
}
}
}
return suite;
}
private void setProjectInfo(
@NonNull String testFolder,
@NonNull String projectName,
@NonNull String gradleVersion,
@NonNull TestType testType) {
this.testFolder = testFolder;
this.projectName = projectName;
this.gradleVersion = gradleVersion;
this.testType = testType;
}
@Override
protected void runTest() throws Throwable {
switch (testType) {
case BUILD:
buildProject(testFolder, projectName, gradleVersion);
break;
case JACK:
buildProject(testFolder, projectName, gradleVersion, Lists.newArrayList(
"-PCUSTOM_JACK=1",
"-PCUSTOM_BUILDTOOLS=21.1.0"
));
break;
case REPORT:
runTasksOn(testFolder, projectName, gradleVersion,
"androidDependencies", "signingReport");
break;
}
}
}