@@ -28,6 +28,7 @@ import kotlinx.serialization.encodeToString
2828import nl.adaptivity.xmlutil.QName
2929import nl.adaptivity.xmlutil.serialization.*
3030import nl.adaptivity.xmlutil.serialization.structure.*
31+ import kotlin.jvm.JvmInline
3132import kotlin.test.Test
3233import kotlin.test.assertEquals
3334import kotlin.test.assertIs
@@ -188,6 +189,54 @@ class CustomMapKey274 {
188189 assertEquals(expected, xml.decodeFromString<MyClass >(data))
189190 }
190191
192+ @Test
193+ fun testStringIntHolderDescriptor () {
194+ val myObjDesc = assertIs<XmlCompositeDescriptor >(xml.xmlDescriptor(StringIntHolderMap .serializer()).getElementDescriptor(0 ))
195+ assertEquals(QName (" StringIntHolderMap" ), myObjDesc.tagName)
196+
197+ assertEquals(1 , myObjDesc.elementsCount)
198+
199+ val mapDesc = assertIs<XmlMapDescriptor >(myObjDesc.getElementDescriptor(0 ))
200+ assertEquals(true , mapDesc.isValueCollapsed)
201+
202+ val keyDesc = assertIs<XmlPrimitiveDescriptor >(mapDesc.getElementDescriptor(0 ))
203+ assertEquals(OutputKind .Attribute , keyDesc.outputKind)
204+
205+ val valueDesc = assertIs<XmlInlineDescriptor >(mapDesc.getElementDescriptor(1 ))
206+ assertEquals(OutputKind .Element , valueDesc.outputKind)
207+
208+ val inlineValueDesc = assertIs<XmlPrimitiveDescriptor >(valueDesc.getElementDescriptor(0 ))
209+ assertEquals(OutputKind .Element , inlineValueDesc.outputKind)
210+ }
211+
212+ @Test
213+ fun testSerializeStringIntHolderMap () {
214+ val data = StringIntHolderMap (mapOf (" abc" to IntHolder (123 ), " def" to IntHolder (456 )))
215+ val expected = " <StringIntHolderMap><value key=\" abc\" >123</value><value key=\" def\" >456</value></StringIntHolderMap>"
216+ assertXmlEquals(expected, xml.encodeToString(data))
217+ }
218+
219+ @Test
220+ fun testDeserializeStringIntHolderMap () {
221+ val expected = StringIntHolderMap (mapOf (" abc" to IntHolder (123 ), " def" to IntHolder (456 )))
222+ val data = " <StringIntHolderMap><value key=\" abc\" >123</value><value key=\" def\" >456</value></StringIntHolderMap>"
223+ assertEquals(expected, xml.decodeFromString(data))
224+ }
225+
226+ @Test
227+ fun testSerializeStringNonValueIntHolderMap () {
228+ val data = StringNonValueIntHolderMap (mapOf (" abc" to NonValueIntHolder (123 ), " def" to NonValueIntHolder (456 )))
229+ val expected = " <StringNonValueIntHolderMap><NonValueIntHolder key=\" abc\" data=\" 123\" /><NonValueIntHolder key=\" def\" data=\" 456\" /></StringNonValueIntHolderMap>"
230+ assertXmlEquals(expected, xml.encodeToString(data))
231+ }
232+
233+ @Test
234+ fun testDeserializeStringNonValueIntHolderMap () {
235+ val expected = StringNonValueIntHolderMap (mapOf (" abc" to NonValueIntHolder (123 ), " def" to NonValueIntHolder (456 )))
236+ val data = " <StringNonValueIntHolderMap><NonValueIntHolder key=\" abc\" data=\" 123\" /><NonValueIntHolder key=\" def\" data=\" 456\" /></StringNonValueIntHolderMap>"
237+ assertEquals(expected, xml.decodeFromString(data))
238+ }
239+
191240 @Serializable
192241 data class MapElement (val value : String )
193242
@@ -209,4 +258,17 @@ class CustomMapKey274 {
209258
210259 @Serializable
211260 data class MyClass (val map : Map <String , String >)
261+
262+ @Serializable
263+ @JvmInline
264+ value class IntHolder (val data : Int )
265+
266+ @Serializable
267+ data class StringIntHolderMap (val map : Map <String , IntHolder >)
268+
269+ @Serializable
270+ data class NonValueIntHolder (val data : Int )
271+
272+ @Serializable
273+ data class StringNonValueIntHolderMap (val map : Map <String , NonValueIntHolder >)
212274}
0 commit comments