Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DokkaConfiguration: Use LinkedHashSet instead of Set to preserve order for includes when deserialize (#2999) #3006

Merged
merged 2 commits into from Jul 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions core/src/main/kotlin/utilities/json.kt
Expand Up @@ -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)
Expand Down
19 changes: 19 additions & 0 deletions 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.assertEquals
Expand Down Expand Up @@ -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.
Expand All @@ -55,3 +70,7 @@ data class SimpleTestDataClass(
val someIntWithDefaultValue: Int = 42,
val someDouble: Double
)

data class SimpleTestSetDataClass(
val someStringSet: Set<String>
)