/*
* 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.dsl;
import com.android.annotations.NonNull;
import com.android.annotations.Nullable;
import org.gradle.api.Action;
import org.gradle.api.DomainObjectSet;
import org.gradle.api.internal.DefaultDomainObjectSet;
import org.gradle.api.tasks.testing.Test;
import org.gradle.util.ConfigureUtil;
import groovy.lang.Closure;
/**
* Options for running tests.
*/
public class TestOptions {
@Nullable
private String resultsDir;
@Nullable
private String reportDir;
/**
* Options for controlling unit tests execution.
*
* @since 1.1
*/
@NonNull
private final UnitTestOptions unitTests = new UnitTestOptions();
/**
* Configures unit test options.
*
* @since 1.2
*/
public void unitTests(Closure closure) {
ConfigureUtil.configure(closure, unitTests);
}
/**
* Configures unit test options.
*
* @since 1.2
*/
@NonNull
public UnitTestOptions getUnitTests() {
return unitTests;
}
/** Name of the results directory. */
@Nullable
public String getResultsDir() {
return resultsDir;
}
public void setResultsDir(@Nullable String resultsDir) {
this.resultsDir = resultsDir;
}
/** Name of the reports directory. */
@Nullable
public String getReportDir() {
return reportDir;
}
public void setReportDir(@Nullable String reportDir) {
this.reportDir = reportDir;
}
/**
* Options for controlling unit tests execution.
*/
public static class UnitTestOptions {
private DomainObjectSet<Test> testTasks = new DefaultDomainObjectSet<Test>(Test.class);
private boolean returnDefaultValues;
/**
* Whether unmocked methods from android.jar should throw exceptions or return default
* values (i.e. zero or null).
*
* <p>See <a href="http://tools.android.com/tech-docs/unit-testing-support">Unit testing support</a> for details.
*
* @since 1.1
*/
public boolean isReturnDefaultValues() {
return returnDefaultValues;
}
public void setReturnDefaultValues(boolean returnDefaultValues) {
this.returnDefaultValues = returnDefaultValues;
}
/**
* Configures all unit testing tasks.
*
* <p>See {@link Test} for available options.
*
* <p>Inside the closure you can check the name of the task to configure only some test
* tasks, e.g.
*
* <pre>
* android {
* testOptions {
* unitTests.all {
* if (it.name == 'testDebug') {
* systemProperty 'debug', 'true'
* }
* }
* }
* }
* </pre>
*
* @since 1.2
*/
public void all(final Closure<Test> configClosure) {
testTasks.all(new Action<Test>() {
@Override
public void execute(Test testTask) {
ConfigureUtil.configure(configClosure, testTask);
}
});
}
/**
* Configures a given test task. The configuration closures that were passed to
* {@link #all(Closure)} will be applied to it.
*
* <p>Not meant to be called from build scripts. The reason it exists is that tasks
* are created after the build scripts are evaluated, so users have to "register" their
* configuration closures first and we can only apply them later.
*
* @since 1.2
*/
public void applyConfiguration(@NonNull Test task) {
this.testTasks.add(task);
}
}
}