public void testRemoveAndApplyElements()

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());
  }