| package com.android.build.gradle.integration.application |
| |
| import com.android.build.gradle.integration.common.fixture.BaseGradleExecutor |
| import com.android.build.gradle.integration.common.fixture.GradleTestProject |
| import com.android.build.gradle.integration.common.fixture.app.HelloWorldLibraryApp |
| import com.android.build.gradle.internal.scope.InternalArtifactType |
| import com.android.build.gradle.options.BooleanOption |
| import com.android.utils.FileUtils |
| import com.google.common.truth.Truth.assertThat |
| import org.junit.Rule |
| import org.junit.Test |
| import org.junit.rules.TemporaryFolder |
| import java.io.File |
| import java.nio.charset.Charset |
| |
| /** |
| * Tests to verify that library partial-r files are updated appropriately. |
| */ |
| class ParseLibraryResourcesPartialRTest { |
| |
| @get:Rule |
| val project = GradleTestProject.builder() |
| .fromTestApp(HelloWorldLibraryApp.create()) |
| // http://b/149978740 |
| .withConfigurationCaching(BaseGradleExecutor.ConfigurationCaching.OFF) |
| .addGradleProperties( |
| "${BooleanOption.ENABLE_PARTIAL_R_INCREMENTAL_BUILDS.propertyName}=true") |
| .create() |
| |
| @get:Rule |
| val temporaryFolder = TemporaryFolder() |
| |
| @Test |
| fun `test incremental builds do not modify unnecessary partial r files`() { |
| val executor = project.executor() |
| executor.run("assembleDebug") |
| val partialRIntermediateDir = FileUtils.join(project.projectDir, |
| "lib", "build", "intermediates", InternalArtifactType |
| .LOCAL_ONLY_PARTIAL_SYMBOL_DIRECTORY.getFolderName(), "debug", "partial-r") |
| val partialRFiles = partialRIntermediateDir.listFiles() |
| ?: error("No partial-r files generated.") |
| checkLibPartialRFiles(partialRFiles.toList()) |
| val originalTimeStamps = partialRFiles.map(File::lastModified) |
| |
| //Incremental build with no changes. |
| val incrementalBuildResult = executor.run("assembleDebug") |
| assertThat(incrementalBuildResult.upToDateTasks).contains(":lib:parseDebugLocalResources") |
| assertThat(partialRFiles[0].lastModified()).isEqualTo(originalTimeStamps[0]) |
| assertThat(partialRFiles[1].lastModified()).isEqualTo(originalTimeStamps[1]) |
| } |
| |
| @Test |
| fun `test incremental builds modify partial r files when resource is modified`() { |
| project.execute("assembleDebug") |
| val partialRIntermediateDir = FileUtils.join(project.projectDir, |
| "lib", "build", "intermediates", InternalArtifactType. |
| LOCAL_ONLY_PARTIAL_SYMBOL_DIRECTORY.getFolderName(), "debug", "partial-r") |
| val partialRFiles = |
| partialRIntermediateDir.listFiles() ?: error("No partial-r files generated.") |
| checkLibPartialRFiles(partialRFiles.toList()) |
| |
| // Layout (modified resource) |
| val libLayoutPartialR = |
| FileUtils.join(partialRIntermediateDir, "layout_main.xml.flat-R.txt") |
| val libLayoutFile = FileUtils.join(project.projectDir, |
| "lib", "src", "main", "res", "layout", "main.xml") |
| val libLayoutPartialROriginalTimestamp = libLayoutPartialR.lastModified() |
| val modifiedLibLayout = libLayoutFile.readText(Charset.defaultCharset()) |
| .replace("@+id/text", "@+id/changed_text") |
| FileUtils.writeToFile(libLayoutFile, modifiedLibLayout) |
| |
| // Values (non-modified resource) |
| val libValuesPartialR = |
| FileUtils.join(partialRIntermediateDir, "values_values.arsc.flat-R.txt") |
| val libValuesPartialROriginalTimestamp = libValuesPartialR.lastModified() |
| |
| // Incremental build with layout/main.xml changed resource name. |
| val result = project.executor().run("assembleDebug") |
| assertThat(result.upToDateTasks).doesNotContain(":lib:parseDebugLocalResources") |
| assertThat(libLayoutPartialR.lastModified()) |
| .isGreaterThan(libLayoutPartialROriginalTimestamp) |
| assertThat(libLayoutPartialR.readText(Charset.defaultCharset())).contains("changed_text") |
| assertThat(libValuesPartialR.lastModified()).isEqualTo(libValuesPartialROriginalTimestamp) |
| } |
| |
| private fun checkLibPartialRFiles(files : List<File>) = |
| assertThat(files.map { it.name }).containsExactly( |
| "layout_main.xml.flat-R.txt", |
| "values_values.arsc.flat-R.txt" |
| ) |
| |
| } |