diff options
author | eunwoo-park <eeunwoop@gmail.com> | 2023-07-13 00:12:23 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-12 17:12:23 +0200 |
commit | 20e06e878ebbe09865ff36d64ff113fd4cff8905 (patch) | |
tree | bf43970f6bf53508af5bac36500c97f92bdbefa1 | |
parent | 54decbe937ddcb0e3a8922babdc5f1d805fd42c0 (diff) | |
download | dokka-20e06e878ebbe09865ff36d64ff113fd4cff8905.tar.gz dokka-20e06e878ebbe09865ff36d64ff113fd4cff8905.tar.bz2 dokka-20e06e878ebbe09865ff36d64ff113fd4cff8905.zip |
Deserialize DokkaConfiguration's Set as LinkedHashSet (#3006)
Fixes #2999
Helps preserve order of Set elements.
Co-authored-by: 박은우/게임플랫폼클라팀/NE <eunwoo.park@nhn.com>
-rw-r--r-- | core/src/main/kotlin/utilities/json.kt | 1 | ||||
-rw-r--r-- | core/src/test/kotlin/utilities/JsonKtTest.kt | 19 |
2 files changed, 20 insertions, 0 deletions
diff --git a/core/src/main/kotlin/utilities/json.kt b/core/src/main/kotlin/utilities/json.kt index eb666d31..c082de2c 100644 --- a/core/src/main/kotlin/utilities/json.kt +++ b/core/src/main/kotlin/utilities/json.kt @@ -13,6 +13,7 @@ import com.fasterxml.jackson.core.type.TypeReference as JacksonTypeReference private val objectMapper = run { val module = SimpleModule().apply { addSerializer(FileSerializer) + addAbstractTypeMapping(Set::class.java, LinkedHashSet::class.java) } jacksonObjectMapper() .registerModule(module) diff --git a/core/src/test/kotlin/utilities/JsonKtTest.kt b/core/src/test/kotlin/utilities/JsonKtTest.kt index 301f4f5d..a1d432d9 100644 --- a/core/src/test/kotlin/utilities/JsonKtTest.kt +++ b/core/src/test/kotlin/utilities/JsonKtTest.kt @@ -1,5 +1,6 @@ package utilities +import org.jetbrains.dokka.utilities.parseJson import org.jetbrains.dokka.utilities.serializeAsCompactJson import org.jetbrains.dokka.utilities.serializeAsPrettyJson import kotlin.test.Test @@ -42,6 +43,20 @@ class JsonTest { assertEquals(expected, actual) } + @Test + fun `should keep order of Set after serialize and deserialize`() { + val testObject = SimpleTestSetDataClass( + someStringSet = setOf("Foo", "Bar", "ABC") + ) + val expected = testObject.someStringSet.toList() // ["Foo", "Bar", "ABC"] + + val jsonString = serializeAsCompactJson(testObject) + val parsedClass: SimpleTestSetDataClass = parseJson(jsonString) + val actual = parsedClass.someStringSet.toList() + + assertEquals(expected, actual) + } + /** * If the expected output was generated on Linux, but the tests are run under Windows, * the test might fail when comparing the strings due to different separators. @@ -55,3 +70,7 @@ data class SimpleTestDataClass( val someIntWithDefaultValue: Int = 42, val someDouble: Double ) + +data class SimpleTestSetDataClass( + val someStringSet: Set<String> +) |