From 1fd58f2fd82885451fd96a17fca865d5c69fdd9d Mon Sep 17 00:00:00 2001 From: Jose Rubio Date: Wed, 4 Sep 2024 14:26:47 +0200 Subject: [PATCH] ANDROID-15083 add variant ordering (#9) * ANDROID-15083 add variant ordering * ANDROID-15083 update plugin version --- README.md | 4 +- manifestcheck/build.gradle.kts | 2 +- ...tiVariantPermissionCheckIntegrationTest.kt | 4 +- ...leVariantPermissionCheckIntegrationTest.kt | 8 +- .../permissioncheck/PermissionCheckTask.kt | 2 +- .../config/TaskConfigurator.kt | 2 +- .../internal/BaselineHandler.kt | 8 +- .../internal/BaselineHandlerTest.kt | 85 ++++++++++++++++++- 8 files changed, 96 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 4e985c5..c19b366 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ To add the PermissionCheck plugin to your project, you have to add this block of ```groovy plugins { - id "com.telefonica.manifestcheck" version "1.0.1" + id "com.telefonica.manifestcheck" version "1.0.2" } ``` @@ -57,7 +57,7 @@ buildscript { } } dependencies { - classpath "com.telefonica:manifestcheck:1.0.1" + classpath "com.telefonica:manifestcheck:1.0.2" } } ``` diff --git a/manifestcheck/build.gradle.kts b/manifestcheck/build.gradle.kts index 1603268..60a32fc 100644 --- a/manifestcheck/build.gradle.kts +++ b/manifestcheck/build.gradle.kts @@ -6,7 +6,7 @@ plugins { } group = "com.telefonica" -version = "1.0.1" // Also update the version in the README +version = "1.0.2" // Also update the version in the README val uber: Configuration by configurations.creating diff --git a/manifestcheck/src/test/kotlin/io/github/simonschiller/permissioncheck/MultiVariantPermissionCheckIntegrationTest.kt b/manifestcheck/src/test/kotlin/io/github/simonschiller/permissioncheck/MultiVariantPermissionCheckIntegrationTest.kt index dc383de..f8fa0b5 100644 --- a/manifestcheck/src/test/kotlin/io/github/simonschiller/permissioncheck/MultiVariantPermissionCheckIntegrationTest.kt +++ b/manifestcheck/src/test/kotlin/io/github/simonschiller/permissioncheck/MultiVariantPermissionCheckIntegrationTest.kt @@ -77,14 +77,14 @@ class MultiVariantPermissionCheckIntegrationTest { val baseline = """ - + - + diff --git a/manifestcheck/src/test/kotlin/io/github/simonschiller/permissioncheck/SingleVariantPermissionCheckIntegrationTest.kt b/manifestcheck/src/test/kotlin/io/github/simonschiller/permissioncheck/SingleVariantPermissionCheckIntegrationTest.kt index 3cd3071..02a80c5 100644 --- a/manifestcheck/src/test/kotlin/io/github/simonschiller/permissioncheck/SingleVariantPermissionCheckIntegrationTest.kt +++ b/manifestcheck/src/test/kotlin/io/github/simonschiller/permissioncheck/SingleVariantPermissionCheckIntegrationTest.kt @@ -70,17 +70,17 @@ class SingleVariantPermissionCheckIntegrationTest { val baseline = """ - + + + - + - - diff --git a/plugin-core/src/main/kotlin/io/github/simonschiller/permissioncheck/PermissionCheckTask.kt b/plugin-core/src/main/kotlin/io/github/simonschiller/permissioncheck/PermissionCheckTask.kt index 6c89afa..8fb01d8 100644 --- a/plugin-core/src/main/kotlin/io/github/simonschiller/permissioncheck/PermissionCheckTask.kt +++ b/plugin-core/src/main/kotlin/io/github/simonschiller/permissioncheck/PermissionCheckTask.kt @@ -70,7 +70,7 @@ open class PermissionCheckTask : DefaultTask() { // Create (or recreate) the baseline if needed if (recreate.get() || !baselineFile.exists()) { - baselineHandler.serialize(permissions) + baselineHandler.serialize(permissions, recreate.get()) project.logger.lifecycle("Created baseline at $baselineFile") if (!recreate.get()) { // New baseline created without explicit flag -> fail the build abortBuild() diff --git a/plugin-core/src/main/kotlin/io/github/simonschiller/permissioncheck/config/TaskConfigurator.kt b/plugin-core/src/main/kotlin/io/github/simonschiller/permissioncheck/config/TaskConfigurator.kt index f7e999a..eec6898 100644 --- a/plugin-core/src/main/kotlin/io/github/simonschiller/permissioncheck/config/TaskConfigurator.kt +++ b/plugin-core/src/main/kotlin/io/github/simonschiller/permissioncheck/config/TaskConfigurator.kt @@ -43,7 +43,7 @@ abstract class TaskConfigurator { extension: PermissionCheckExtension, variantName: String ): TaskProvider { - val taskName = "check${variantName.capitalize(Locale.ROOT)}Permissions" + val taskName = "check${variantName.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.ROOT) else it.toString() }}Permissions" return project.tasks.register(taskName, PermissionCheckTask::class.java) { task -> task.group = LifecycleBasePlugin.VERIFICATION_GROUP diff --git a/plugin-core/src/main/kotlin/io/github/simonschiller/permissioncheck/internal/BaselineHandler.kt b/plugin-core/src/main/kotlin/io/github/simonschiller/permissioncheck/internal/BaselineHandler.kt index 3e9fa74..e7f171d 100644 --- a/plugin-core/src/main/kotlin/io/github/simonschiller/permissioncheck/internal/BaselineHandler.kt +++ b/plugin-core/src/main/kotlin/io/github/simonschiller/permissioncheck/internal/BaselineHandler.kt @@ -19,16 +19,16 @@ internal class BaselineHandler(private val baselineFile: File) { } } - fun serialize(permissions: Map>) { - val baseline = deserialize().toMutableMap() // Parse existing baseline and add new or updated permissions - permissions.forEach { (variantName, variantPermissions) -> + fun serialize(permissions: Map>, recreate: Boolean = false) { + val baseline = if (!recreate) deserialize().toMutableMap() else mutableMapOf() // Parse existing baseline and add new or updated permissions + permissions.toSortedMap().forEach { (variantName, variantPermissions) -> baseline[variantName] = variantPermissions } // Package changes into a XML document val document = createDocumentBuilder().newDocument() document.appendElement("baseline") { - baseline.forEach { (variantName, variantPermissions) -> + baseline.toSortedMap().forEach { (variantName, variantPermissions) -> // Create permission entries for a single variant appendElement("variant") { diff --git a/plugin-core/src/test/kotlin/io/github/simonschiller/permissioncheck/internal/BaselineHandlerTest.kt b/plugin-core/src/test/kotlin/io/github/simonschiller/permissioncheck/internal/BaselineHandlerTest.kt index 9ed2714..10b8cf7 100644 --- a/plugin-core/src/test/kotlin/io/github/simonschiller/permissioncheck/internal/BaselineHandlerTest.kt +++ b/plugin-core/src/test/kotlin/io/github/simonschiller/permissioncheck/internal/BaselineHandlerTest.kt @@ -69,14 +69,14 @@ class BaselineHandlerTest { val expectedBaselineContent = """ - - - - + + + + """.trimIndent() @@ -230,4 +230,81 @@ class BaselineHandlerTest { val baselineFile = tempDir.resolve("permission-baseline.json") assertThrows { BaselineHandler(baselineFile) } } + + @Test + fun `Baseline is reordering new added variants`() { + val baselineFile = tempDir.resolve("permission-baseline.xml") + baselineFile.writeText(""" + + + + + + + + + """.trimIndent()) + + val debugPermissions = setOf( + Permission("android.permission.ACCESS_COARSE_LOCATION"), + Sdk23Permission("android.permission.INTERNET") + ) + + val baselineHandler = BaselineHandler(baselineFile) + baselineHandler.serialize(mapOf("debug" to debugPermissions)) + + val expectedBaselineContent = """ + + + + + + + + + + + + + """.trimIndent() + assertEquals(expectedBaselineContent, baselineFile.readText().normaliseLineSeparators()) + } + + @Test + fun `Baseline is reordering existing variants`() { + val baselineFile = tempDir.resolve("permission-baseline.xml") + baselineFile.writeText(""" + + + + + + + + + + + + + """.trimIndent()) + + val baselineHandler = BaselineHandler(baselineFile) + baselineHandler.serialize(emptyMap()) + + val expectedBaselineContent = """ + + + + + + + + + + + + + """.trimIndent() + assertEquals(expectedBaselineContent, baselineFile.readText().normaliseLineSeparators()) + } }