diff --git a/kotlin/tests/pom.xml b/kotlin/tests/pom.xml index eb2d813..5e1c1df 100644 --- a/kotlin/tests/pom.xml +++ b/kotlin/tests/pom.xml @@ -117,6 +117,7 @@ -Werror -Xuse-experimental=kotlin.ExperimentalStdlibApi + -XXLanguage:+InlineClasses diff --git a/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/DualKotlinTest.kt b/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/DualKotlinTest.kt index 82488d6..6a1d769 100644 --- a/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/DualKotlinTest.kt +++ b/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/DualKotlinTest.kt @@ -252,4 +252,36 @@ class DualKotlinTest(useReflection: Boolean) { assertThat(decoded.a).isEqualTo(null) } + @Test fun inlineClass() { + val adapter = moshi.adapter() + + val inline = InlineClass(5) + + val expectedJson = """{"i":5}""" + assertThat(adapter.toJson(inline)).isEqualTo(expectedJson) + + val testJson = """{"i":6}""" + val result = adapter.fromJson(testJson)!! + assertThat(result.i).isEqualTo(6) + } + + @JsonClass(generateAdapter = true) + data class InlineConsumer(val inline: InlineClass) + + @Test fun inlineClassConsumer() { + val adapter = moshi.adapter() + + val consumer = InlineConsumer(InlineClass(23)) + + val expectedJson= """{"inline":{"i":23}}""" + assertThat(adapter.toJson(consumer)).isEqualTo(expectedJson) + + val testJson = """{"inline":{"i":42}}""" + val result = adapter.fromJson(testJson)!! + assertThat(result.inline.i).isEqualTo(42) + } } + +// Has to be outside since inline classes are only allowed on top level +@JsonClass(generateAdapter = true) +inline class InlineClass(val i: Int)