From cf03863b65dc192856e9c288e56514ab5916ca88 Mon Sep 17 00:00:00 2001 From: "Alexander.Likhachev" Date: Wed, 10 May 2023 19:28:31 +0200 Subject: [PATCH] [Build, IGS] Ignore non-existing keys during setup file parsing #KTI-1223 In Progress --- .../src/main/kotlin/SetupFile.kt | 6 ++++- .../src/test/kotlin/SetupFileParseTest.kt | 26 ++++++++++++++----- .../properties-with-unknown-fields.json | 8 ++++++ 3 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 repo/gradle-settings-conventions/internal-gradle-setup/src/test/resources/properties-with-unknown-fields.json diff --git a/repo/gradle-settings-conventions/internal-gradle-setup/src/main/kotlin/SetupFile.kt b/repo/gradle-settings-conventions/internal-gradle-setup/src/main/kotlin/SetupFile.kt index 61347d410ef..d9587f5384e 100644 --- a/repo/gradle-settings-conventions/internal-gradle-setup/src/main/kotlin/SetupFile.kt +++ b/repo/gradle-settings-conventions/internal-gradle-setup/src/main/kotlin/SetupFile.kt @@ -18,6 +18,10 @@ internal data class SetupFile( val properties: Map, ) +private val json = Json { ignoreUnknownKeys = true } + // can't use decodeFromStream: https://github.com/Kotlin/kotlinx.serialization/issues/2218 internal fun parseSetupFile(inputStream: InputStream): SetupFile = - Json.decodeFromString(BufferedReader(InputStreamReader(inputStream)).lines().asSequence().joinToString("\n")) \ No newline at end of file + json.decodeFromString( + BufferedReader(InputStreamReader(inputStream)).lines().asSequence().joinToString("\n") + ) \ No newline at end of file diff --git a/repo/gradle-settings-conventions/internal-gradle-setup/src/test/kotlin/SetupFileParseTest.kt b/repo/gradle-settings-conventions/internal-gradle-setup/src/test/kotlin/SetupFileParseTest.kt index 261d7e8e945..4c8fb984f0e 100644 --- a/repo/gradle-settings-conventions/internal-gradle-setup/src/test/kotlin/SetupFileParseTest.kt +++ b/repo/gradle-settings-conventions/internal-gradle-setup/src/test/kotlin/SetupFileParseTest.kt @@ -8,15 +8,11 @@ package org.jetbrains.kotlin.build import kotlin.test.* class SetupFileParseTest { - private fun openPropertiesJsonStream() = - SetupFileParseTest::class.java.classLoader.getResourceAsStream("properties.json") + private fun openPropertiesJsonStream(name: String) = + SetupFileParseTest::class.java.classLoader.getResourceAsStream("$name.json") ?: error("No properties.json file found in test resources") - @Test - fun testSimpleParsing() { - val setupFile = openPropertiesJsonStream().use { - parseSetupFile(it) - } + private fun assertSampleSetupFileIsParsedCorrectly(setupFile: SetupFile) { assertEquals( mapOf( "newProperty1" to "someValue", @@ -26,4 +22,20 @@ class SetupFileParseTest { setupFile.properties ) } + + @Test + fun testSimpleParsing() { + val setupFile = openPropertiesJsonStream("properties").use { + parseSetupFile(it) + } + assertSampleSetupFileIsParsedCorrectly(setupFile) + } + + @Test + fun testUnknownFieldsDoNotBreakParsing() { + val setupFile = openPropertiesJsonStream("properties-with-unknown-fields").use { + parseSetupFile(it) + } + assertSampleSetupFileIsParsedCorrectly(setupFile) + } } \ No newline at end of file diff --git a/repo/gradle-settings-conventions/internal-gradle-setup/src/test/resources/properties-with-unknown-fields.json b/repo/gradle-settings-conventions/internal-gradle-setup/src/test/resources/properties-with-unknown-fields.json new file mode 100644 index 00000000000..f24ba159f69 --- /dev/null +++ b/repo/gradle-settings-conventions/internal-gradle-setup/src/test/resources/properties-with-unknown-fields.json @@ -0,0 +1,8 @@ +{ + "properties": { + "newProperty1": "someValue", + "newProperty2": "someOtherValue", + "alreadySetProperty": "newValue" + }, + "unknownField": "someValue" +} \ No newline at end of file