package com.android.build.gradle; import com.android.annotations.NonNull; import com.android.build.gradle.api.TestVariant; import com.android.build.gradle.api.UnitTestVariant; import com.android.build.gradle.internal.ExtraModelInfo; import com.android.build.gradle.internal.SdkHandler; import com.android.build.gradle.internal.dsl.BuildType; import com.android.build.gradle.internal.dsl.ProductFlavor; import com.android.build.gradle.internal.dsl.SigningConfig; import com.android.builder.core.AndroidBuilder; import org.gradle.api.DomainObjectSet; import org.gradle.api.NamedDomainObjectContainer; import org.gradle.api.internal.DefaultDomainObjectSet; import org.gradle.api.internal.project.ProjectInternal; import org.gradle.internal.reflect.Instantiator; import static com.android.builder.core.VariantType.ANDROID_TEST; import static com.android.builder.core.VariantType.UNIT_TEST; /** * base 'android' extension for plugins that have a test component. */ public abstract class TestedExtension extends BaseExtension implements TestedAndroidConfig { private final DomainObjectSet<TestVariant> testVariantList = new DefaultDomainObjectSet<TestVariant>(TestVariant.class); private final DomainObjectSet<UnitTestVariant> unitTestVariantList = new DefaultDomainObjectSet<UnitTestVariant>(UnitTestVariant.class); private String testBuildType = "debug"; public TestedExtension(@NonNull ProjectInternal project, @NonNull Instantiator instantiator, @NonNull AndroidBuilder androidBuilder, @NonNull SdkHandler sdkHandler, @NonNull NamedDomainObjectContainer<BuildType> buildTypes, @NonNull NamedDomainObjectContainer<ProductFlavor> productFlavors, @NonNull NamedDomainObjectContainer<SigningConfig> signingConfigs, @NonNull ExtraModelInfo extraModelInfo, boolean isLibrary) { super(project, instantiator, androidBuilder, sdkHandler, buildTypes, productFlavors, signingConfigs, extraModelInfo, isLibrary); getSourceSets().create(ANDROID_TEST.getPrefix()); getSourceSets().create(UNIT_TEST.getPrefix()); } /** * Returns the list of (Android) test variants. Since the collections is built after evaluation, * it should be used with Gradle's <code>all</code> iterator to process future items. */ @Override @NonNull public DomainObjectSet<TestVariant> getTestVariants() { return testVariantList; } public void addTestVariant(TestVariant testVariant) { testVariantList.add(testVariant); } /** * Returns the list of (Android) test variants. Since the collections is built after evaluation, * it should be used with Gradle's <code>all</code> iterator to process future items. */ @Override @NonNull public DomainObjectSet<UnitTestVariant> getUnitTestVariants() { return unitTestVariantList; } public void addUnitTestVariant(UnitTestVariant testVariant) { unitTestVariantList.add(testVariant); } /** * Name of the build type that will be used when running Android (on-device) tests. * * <p>Defaults to "debug". */ @Override @NonNull public String getTestBuildType() { return testBuildType; } public void setTestBuildType(String testBuildType) { this.testBuildType = testBuildType; } }