blob: 222861181a4e39234f0fc2b5036074d0ce97fc24 [file] [log] [blame]
package com.android.build.gradle.integration.application;
import static com.android.build.gradle.integration.common.truth.TruthHelper.assertThat;
import static com.android.builder.model.AndroidProject.ARTIFACT_ANDROID_TEST;
import com.android.build.gradle.integration.common.fixture.GradleTestProject;
import com.android.build.gradle.integration.common.fixture.ModelContainer;
import com.android.build.gradle.integration.common.fixture.SourceSetContainerUtils;
import com.android.build.gradle.integration.common.utils.AndroidProjectUtils;
import com.android.build.gradle.integration.common.utils.SourceProviderHelper;
import com.android.build.gradle.integration.common.utils.TestFileUtils;
import com.android.builder.core.VariantType;
import com.android.builder.model.AndroidArtifact;
import com.android.builder.model.AndroidProject;
import com.android.builder.model.ProductFlavorContainer;
import com.android.builder.model.SourceProviderContainer;
import com.android.builder.model.Variant;
import com.android.ide.common.process.ProcessException;
import com.android.utils.StringHelper;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import org.junit.Rule;
import org.junit.Test;
/** Assemble tests for basicMultiFlavors */
public class BasicMultiFlavorTest {
@Rule
public GradleTestProject project =
GradleTestProject.builder().fromTestProject("basicMultiFlavors").create();
@Test
public void checkSourceProviders() throws IOException {
ModelContainer<AndroidProject> modelContainer = project.model().fetchAndroidProjects();
AndroidProject model = modelContainer.getOnlyModel();
File projectDir = project.getProjectDir();
AndroidProjectUtils.testDefaultSourceSets(model, projectDir);
// test the source provider for the flavor
Collection<ProductFlavorContainer> productFlavors = model.getProductFlavors();
assertThat(productFlavors).hasSize(4);
for (ProductFlavorContainer pfContainer : productFlavors) {
String name = pfContainer.getProductFlavor().getName();
new SourceProviderHelper(
model.getName(), projectDir, name, pfContainer.getSourceProvider())
.test();
// Unit tests and android tests.
assertThat(pfContainer.getExtraSourceProviders()).hasSize(2);
SourceProviderContainer container =
SourceSetContainerUtils.getExtraSourceProviderContainer(
pfContainer, ARTIFACT_ANDROID_TEST);
new SourceProviderHelper(
model.getName(),
projectDir,
StringHelper.appendCapitalized(VariantType.ANDROID_TEST_PREFIX, name),
container.getSourceProvider())
.test();
}
// test the source provider for the artifacts
for (Variant variant : model.getVariants()) {
AndroidArtifact artifact = variant.getMainArtifact();
assertThat(artifact.getVariantSourceProvider()).isNotNull();
assertThat(artifact.getMultiFlavorSourceProvider()).isNotNull();
}
}
@Test
public void checkResValueAndManifestPlaceholders() throws IOException, InterruptedException {
addResValuesAndPlaceholders();
ModelContainer<AndroidProject> model =
project.executeAndReturnModel("assembleFreeBetaDebug");
Variant variant =
AndroidProjectUtils.findVariantByName(model.getOnlyModel(), "freeBetaDebug");
assertThat(variant.getMergedFlavor().getResValues().get("VALUE_DEBUG").getValue())
.isEqualTo("10"); // Value from "beta".
assertThat(variant.getMergedFlavor().getManifestPlaceholders().get("holder"))
.isEqualTo("free");
}
@Test
public void checkResourcesResolution()
throws IOException, InterruptedException, ProcessException {
project.execute("assembleFreeBetaDebug");
assertThat(project.getApk(GradleTestProject.ApkType.DEBUG, "free", "beta"))
.containsResource("drawable/free.png");
}
private void addResValuesAndPlaceholders() throws IOException {
TestFileUtils.appendToFile(
project.getBuildFile(),
"\n"
+ "android {\n"
+ " productFlavors {\n"
+ " free {\n"
+ " resValue \"string\", \"VALUE_DEBUG\", \"10\"\n"
+ " manifestPlaceholders = [\"holder\":\"free\"]\n"
+ " }\n"
+ " beta {\n"
+ " resValue \"string\", \"VALUE_DEBUG\", \"13\"\n"
+ " manifestPlaceholders = [\"holder\":\"beta\"]\n"
+ " }\n"
+ " }\n"
+ "}\n");
}
}