1 /* 2 * Copyright 2017-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. 3 */ 4 5 package kotlinx.serialization 6 7 import kotlinx.serialization.json.Json 8 import kotlin.test.* 9 10 class ClassWithMultipleMasksTest { 11 12 /* 13 * Plugin generates int mask for each 32 fields. 14 * This test ensures that mask is properly generated when fields count is greater than 32. 15 */ 16 @Serializable 17 data class BigDummyData( 18 val regular: String, 19 @SerialName("field0") val field0: String? = null, 20 @SerialName("field1") val field1: String? = null, 21 @SerialName("field2") val field2: String? = null, 22 @SerialName("field3") val field3: String? = null, 23 @SerialName("field4") val field4: String? = null, 24 @SerialName("field5") val field5: String? = null, 25 @SerialName("field6") val field6: String? = null, 26 @SerialName("field7") val field7: String? = null, 27 @SerialName("field8") val field8: String? = null, 28 @SerialName("field9") val field9: String? = null, 29 @SerialName("field10") val field10: String? = null, 30 @SerialName("field11") val field11: String? = null, 31 @SerialName("field12") val field12: String? = null, 32 @SerialName("field13") val field13: String? = null, 33 @SerialName("field14") val field14: String? = null, 34 @SerialName("field15") val field15: String? = null, 35 @SerialName("field16") val field16: String? = null, 36 @SerialName("field17") val field17: String? = null, 37 @SerialName("field18") val field18: String? = null, 38 @SerialName("field19") val field19: String? = null, 39 @SerialName("field20") val field20: String? = null, 40 @SerialName("field21") val field21: String? = null, 41 @SerialName("field22") val field22: String? = null, 42 @SerialName("field23") val field23: String? = null, 43 @SerialName("field24") val field24: String? = null, 44 @SerialName("field25") val field25: String? = null, 45 @SerialName("field26") val field26: String? = null, 46 @SerialName("field27") val field27: String? = null, 47 @SerialName("field28") val field28: String? = null, 48 @SerialName("field29") val field29: String? = null, 49 @SerialName("field30") val field30: String? = null, 50 @SerialName("field31") val field31: String? = null, 51 @SerialName("field32") val field32: String? = null, 52 @SerialName("field33") val field33: String? = null, 53 @SerialName("field34") val field34: String? = null, 54 @SerialName("field35") val field35: String? = null, 55 @SerialName("field36") val field36: String? = null, 56 @SerialName("field37") val field37: String? = null, 57 @SerialName("field38") val field38: String? = null, 58 @SerialName("field39") val field39: String? = null, 59 @SerialName("field40") val field40: String? = "b", 60 @Required val requiredLast: String = "required" 61 ) 62 63 @Test testMoreThan32Fieldsnull64 fun testMoreThan32Fields() { 65 val data = BigDummyData("a") 66 val message = Json.encodeToString(BigDummyData.serializer(), data) 67 println(message) 68 val restored = Json.decodeFromString(BigDummyData.serializer(), """{"regular": "0","requiredLast":"r"}""") 69 with(restored) { 70 assertEquals("0", regular) 71 assertEquals("b", field40) 72 assertEquals(null, field39) 73 assertEquals("r", requiredLast) 74 } 75 76 val restored2 = Json.decodeFromString(BigDummyData.serializer(), """{"regular": "0", "field39":"f","requiredLast":"required"}""") 77 with(restored2) { 78 assertEquals("0", regular) 79 assertEquals("b", field40) 80 assertEquals("f", field39) 81 assertEquals("required", requiredLast) 82 } 83 assertFailsWith<SerializationException> { Json.decodeFromString(BigDummyData.serializer(), """{"regular": "0"}""") } 84 } 85 } 86