in gradle-dsl/testSrc/com/android/tools/idea/gradle/dsl/model/android/BuildTypeModelTest.java [726:907]
public void testRemoveAndApplyElements() throws Exception {
writeToBuildFile(TestFile.REMOVE_AND_APPLY_ELEMENTS);
GradleBuildModel buildModel = getGradleBuildModel();
AndroidModel android = buildModel.android();
assertNotNull(android);
assertThat(android, instanceOf(AndroidModelImpl.class));
assertTrue(((AndroidModelImpl)android).hasValidPsiElement());
BuildTypeModel buildType = getXyzBuildType(buildModel);
assertThat(buildType, instanceOf(BuildTypeModelImpl.class));
assertTrue(((BuildTypeModelImpl)buildType).hasValidPsiElement());
assertEquals("applicationIdSuffix", "mySuffix", buildType.applicationIdSuffix());
verifyFlavorType("buildConfigFields", ImmutableList.of(Lists.newArrayList("abcd", "efgh", "ijkl")), buildType.buildConfigFields());
assertEquals("consumerProguardFiles", ImmutableList.of("proguard-android.txt", "proguard-rules.pro"),
buildType.consumerProguardFiles());
assertEquals("crunchPngs", Boolean.TRUE, buildType.crunchPngs());
assertEquals(isGroovy()?"debuggable":"isDebuggable", Boolean.TRUE, buildType.debuggable());
assertEquals("default", Boolean.TRUE, buildType.isDefault());
assertEquals(isGroovy()?"embedMicroApp":"isEmbedMicroApp", Boolean.TRUE, buildType.embedMicroApp());
assertEquals(isGroovy()?"jniDebuggable":"isJniDebuggable", Boolean.TRUE, buildType.jniDebuggable());
assertEquals("manifestPlaceholders", ImmutableMap.of("activityLabel1", "defaultName1", "activityLabel2", "defaultName2"),
buildType.manifestPlaceholders());
assertEquals(isGroovy()?"minifyEnabled":"isMinifyEnabled", Boolean.TRUE, buildType.minifyEnabled());
assertEquals("multiDexEnabled", Boolean.TRUE, buildType.multiDexEnabled());
assertEquals("proguardFiles", ImmutableList.of("proguard-android.txt", "proguard-rules.pro"), buildType.proguardFiles());
assertEquals(isGroovy()?"pseudoLocalesEnabled":"isPseudoLocalesEnabled", Boolean.TRUE, buildType.pseudoLocalesEnabled());
assertEquals(isGroovy()?"renderscriptDebuggable":"isRenderscriptDebuggable", Boolean.TRUE, buildType.renderscriptDebuggable());
assertEquals("renderscriptOptimLevel", Integer.valueOf(1), buildType.renderscriptOptimLevel());
verifyFlavorType("resValues", ImmutableList.of(Lists.newArrayList("mnop", "qrst", "uvwx")), buildType.resValues());
assertEquals(isGroovy()?"shrinkResources":"isShrinkResources", Boolean.TRUE, buildType.shrinkResources());
assertEquals(isGroovy()?"testCoverageEnabled":"isTestCoverageEnabled", Boolean.TRUE, buildType.testCoverageEnabled());
assertEquals("useJack", Boolean.TRUE, buildType.useJack());
assertEquals("useProguard", Boolean.TRUE, buildType.useProguard());
assertEquals("versionNameSuffix", "abc", buildType.versionNameSuffix());
assertEquals(isGroovy()?"zipAlignEnabled":"isZipAlignEnabled", Boolean.TRUE, buildType.zipAlignEnabled());
assertEquals(isGroovy()?"enableUnitTestCoverage":"isUnitTestCoverageEnabled", Boolean.TRUE, buildType.enableUnitTestCoverage());
assertEquals(isGroovy()?"enableAndroidTestCoverage":"isAndroidTestCoverageEnabled", Boolean.TRUE, buildType.enableAndroidTestCoverage());
// Remove all the properties except the applicationIdSuffix.
buildType.removeAllBuildConfigFields();
buildType.consumerProguardFiles().delete();
buildType.crunchPngs().delete();
buildType.debuggable().delete();
buildType.isDefault().delete();
buildType.embedMicroApp().delete();
buildType.jniDebuggable().delete();
buildType.manifestPlaceholders().delete();
buildType.minifyEnabled().delete();
buildType.multiDexEnabled().delete();
buildType.proguardFiles().delete();
buildType.pseudoLocalesEnabled().delete();
buildType.renderscriptDebuggable().delete();
buildType.renderscriptOptimLevel().delete();
buildType.removeAllResValues();
buildType.shrinkResources().delete();
buildType.testCoverageEnabled().delete();
buildType.useJack().delete();
buildType.useProguard().delete();
buildType.versionNameSuffix().delete();
buildType.zipAlignEnabled().delete();
buildType.enableUnitTestCoverage().delete();
buildType.enableAndroidTestCoverage().delete();
assertThat(android, instanceOf(AndroidModelImpl.class));
assertTrue(((AndroidModelImpl)android).hasValidPsiElement());
assertThat(buildType, instanceOf(BuildTypeModelImpl.class));
assertTrue(((BuildTypeModelImpl)buildType).hasValidPsiElement());
assertEquals("applicationIdSuffix", "mySuffix", buildType.applicationIdSuffix());
assertEmpty("buildConfigFields", buildType.buildConfigFields());
assertMissingProperty("consumerProguardFiles", buildType.consumerProguardFiles());
assertMissingProperty("crunchPngs", buildType.crunchPngs());
assertMissingProperty("debuggable", buildType.debuggable());
assertMissingProperty("default", buildType.isDefault());
assertMissingProperty("embedMicroApp", buildType.embedMicroApp());
assertMissingProperty("jniDebuggable", buildType.jniDebuggable());
verifyEmptyMapProperty("manifestPlaceholders", buildType.manifestPlaceholders());
assertMissingProperty("minifyEnabled", buildType.minifyEnabled());
assertMissingProperty("multiDexEnabled", buildType.multiDexEnabled());
assertMissingProperty("proguardFiles", buildType.proguardFiles());
assertMissingProperty("pseudoLocalesEnabled", buildType.pseudoLocalesEnabled());
assertMissingProperty("renderscriptDebuggable", buildType.renderscriptDebuggable());
assertMissingProperty("renderscriptOptimLevel", buildType.renderscriptOptimLevel());
assertEmpty("resValues", buildType.resValues());
assertMissingProperty("shrinkResources", buildType.shrinkResources());
assertMissingProperty("testCoverageEnabled", buildType.testCoverageEnabled());
assertMissingProperty("useJack", buildType.useJack());
assertMissingProperty("useProguard", buildType.useProguard());
assertMissingProperty("versionNameSuffix", buildType.versionNameSuffix());
assertMissingProperty("zipAlignEnabled", buildType.zipAlignEnabled());
assertMissingProperty("enableUnitTestCoverage", buildType.enableUnitTestCoverage());
assertMissingProperty("enableAndroidTestCoverage", buildType.enableAndroidTestCoverage());
applyChanges(buildModel);
verifyFileContents(myBuildFile, TestFile.REMOVE_AND_APPLY_ELEMENTS_EXPECTED);
assertThat(android, instanceOf(AndroidModelImpl.class));
assertTrue(((AndroidModelImpl)android).hasValidPsiElement());
assertThat(buildType, instanceOf(BuildTypeModelImpl.class));
assertTrue(((BuildTypeModelImpl)buildType).hasValidPsiElement());
assertEquals("applicationIdSuffix", "mySuffix", buildType.applicationIdSuffix());
assertEmpty("buildConfigFields", buildType.buildConfigFields());
assertMissingProperty("consumerProguardFiles", buildType.consumerProguardFiles());
assertMissingProperty("crunchPngs", buildType.crunchPngs());
assertMissingProperty("debuggable", buildType.debuggable());
assertMissingProperty("default", buildType.isDefault());
assertMissingProperty("embedMicroApp", buildType.embedMicroApp());
assertMissingProperty("jniDebuggable", buildType.jniDebuggable());
verifyEmptyMapProperty("manifestPlaceholders", buildType.manifestPlaceholders());
assertMissingProperty("minifyEnabled", buildType.minifyEnabled());
assertMissingProperty("multiDexEnabled", buildType.multiDexEnabled());
assertMissingProperty("proguardFiles", buildType.proguardFiles());
assertMissingProperty("pseudoLocalesEnabled", buildType.pseudoLocalesEnabled());
assertMissingProperty("renderscriptDebuggable", buildType.renderscriptDebuggable());
assertMissingProperty("renderscriptOptimLevel", buildType.renderscriptOptimLevel());
assertEmpty("resValues", buildType.resValues());
assertMissingProperty("shrinkResources", buildType.shrinkResources());
assertMissingProperty("testCoverageEnabled", buildType.testCoverageEnabled());
assertMissingProperty("useJack", buildType.useJack());
assertMissingProperty("useProguard", buildType.useProguard());
assertMissingProperty("versionNameSuffix", buildType.versionNameSuffix());
assertMissingProperty("zipAlignEnabled", buildType.zipAlignEnabled());
assertMissingProperty("enableUnitTestCoverage", buildType.enableUnitTestCoverage());
assertMissingProperty("enableAndroidTestCoverage", buildType.enableAndroidTestCoverage());
buildModel.reparse();
android = buildModel.android();
assertNotNull(android);
assertThat(android, instanceOf(AndroidModelImpl.class));
assertTrue(((AndroidModelImpl)android).hasValidPsiElement());
buildType = getXyzBuildType(buildModel);
assertThat(buildType, instanceOf(BuildTypeModelImpl.class));
assertTrue(((BuildTypeModelImpl)buildType).hasValidPsiElement());
assertEquals("applicationIdSuffix", "mySuffix", buildType.applicationIdSuffix());
assertEmpty("buildConfigFields", buildType.buildConfigFields());
assertMissingProperty("consumerProguardFiles", buildType.consumerProguardFiles());
assertMissingProperty("crunchPngs", buildType.crunchPngs());
assertMissingProperty("debuggable", buildType.debuggable());
assertMissingProperty("default", buildType.isDefault());
assertMissingProperty("embedMicroApp", buildType.embedMicroApp());
assertMissingProperty("jniDebuggable", buildType.jniDebuggable());
verifyEmptyMapProperty("manifestPlaceholders", buildType.manifestPlaceholders());
assertMissingProperty("minifyEnabled", buildType.minifyEnabled());
assertMissingProperty("multiDexEnabled", buildType.multiDexEnabled());
assertMissingProperty("proguardFiles", buildType.proguardFiles());
assertMissingProperty("pseudoLocalesEnabled", buildType.pseudoLocalesEnabled());
assertMissingProperty("renderscriptDebuggable", buildType.renderscriptDebuggable());
assertMissingProperty("renderscriptOptimLevel", buildType.renderscriptOptimLevel());
assertEmpty("resValues", buildType.resValues());
assertMissingProperty("shrinkResources", buildType.shrinkResources());
assertMissingProperty("testCoverageEnabled", buildType.testCoverageEnabled());
assertMissingProperty("useJack", buildType.useJack());
assertMissingProperty("useProguard", buildType.useProguard());
assertMissingProperty("versionNameSuffix", buildType.versionNameSuffix());
assertMissingProperty("zipAlignEnabled", buildType.zipAlignEnabled());
assertMissingProperty("enableUnitTestCoverage", buildType.enableUnitTestCoverage());
assertMissingProperty("enableAndroidTestCoverage", buildType.enableAndroidTestCoverage());
// Now remove the applicationIdSuffix and build type and see that the whole android block is removed as it would be an empty block.
buildType.applicationIdSuffix().delete();
buildModel.android().removeBuildType("xyz");
assertThat(android, instanceOf(AndroidModelImpl.class));
assertTrue(((AndroidModelImpl)android).hasValidPsiElement());
assertThat(buildType, instanceOf(BuildTypeModelImpl.class));
assertTrue(((BuildTypeModelImpl)buildType).hasValidPsiElement());
assertMissingProperty("applicationIdSuffix", buildType.applicationIdSuffix());
applyChanges(buildModel);
verifyFileContents(myBuildFile, "");
assertThat(android, instanceOf(AndroidModelImpl.class));
assertFalse(((AndroidModelImpl)android).hasValidPsiElement());
assertThat(buildType, instanceOf(BuildTypeModelImpl.class));
assertFalse(((BuildTypeModelImpl)buildType).hasValidPsiElement());
buildModel.reparse();
android = buildModel.android();
assertNotNull(android);
assertThat(android, instanceOf(AndroidModelImpl.class));
assertFalse(((AndroidModelImpl)android).hasValidPsiElement());
assertSize(2, android.buildTypes());
}