@@ -236,7 +236,6 @@ class CborTaggedTest {
236236 val structFromHex = cbor.decodeFromHexString(CborElement .serializer(), referenceHexString)
237237 val struct = cbor.encodeToCbor(DataWithTags .serializer(), reference)
238238 assertEquals(struct, structFromHex)
239-
240239 assertEquals(reference, cbor.decodeFromCbor(DataWithTags .serializer(), struct))
241240 assertEquals(referenceHexString, cbor.encodeToHexString(CborElement .serializer(), struct))
242241
@@ -249,68 +248,99 @@ class CborTaggedTest {
249248 verifyValueTags = true
250249 verifyObjectTags = true
251250 }
252- assertEquals(
253- referenceHexStringDefLen,
254- cborDef.encodeToHexString(DataWithTags .serializer(), reference)
255- )
251+ assertEquals(referenceHexStringDefLen, cborDef.encodeToHexString(DataWithTags .serializer(), reference))
252+ val structDefFromHex = cborDef.decodeFromHexString(CborElement .serializer(), referenceHexStringDefLen)
253+ val structDef = cborDef.encodeToCbor(DataWithTags .serializer(), reference)
254+ assertEquals(structDef, structDefFromHex)
255+ assertEquals(reference, cborDef.decodeFromCbor(DataWithTags .serializer(), structDef))
256+ assertEquals(referenceHexStringDefLen, cborDef.encodeToHexString(CborElement .serializer(), structDef))
257+
256258
257259 assertEquals(reference, Cbor .CoseCompliant .decodeFromHexString(DataWithTags .serializer(), referenceHexString))
260+ val structCoseFromHex = Cbor .CoseCompliant .decodeFromHexString(CborElement .serializer(), referenceHexString)
261+ val structCose = Cbor .CoseCompliant .encodeToCbor(DataWithTags .serializer(), reference)
262+ assertEquals(structCose, structCoseFromHex)
263+ assertEquals(reference, Cbor .CoseCompliant .decodeFromCbor(DataWithTags .serializer(), structCose))
264+
258265 assertEquals(
259266 reference,
260267 Cbor .CoseCompliant .decodeFromHexString(DataWithTags .serializer(), referenceHexStringDefLen)
261268 )
269+ val structCoseFromHexDef =
270+ Cbor .CoseCompliant .decodeFromHexString(CborElement .serializer(), referenceHexStringDefLen)
271+ val structCoseDef = Cbor .CoseCompliant .encodeToCbor(DataWithTags .serializer(), reference)
272+ assertEquals(structCoseDef, structCoseFromHexDef)
273+ assertEquals(reference, Cbor .CoseCompliant .decodeFromCbor(DataWithTags .serializer(), structCoseDef))
262274
263275 }
264276
265277 @Test
266278 fun writeReadUntaggedKeys () {
267- assertEquals(noKeyTags, Cbor {
279+ val cborNoKeyTags = Cbor {
268280 encodeKeyTags = false
269281 encodeValueTags = true
270282 encodeObjectTags = true
271283 verifyKeyTags = false
272284 verifyValueTags = true
273285 verifyObjectTags = true
274- }.encodeToHexString(DataWithTags .serializer(), reference))
275- assertEquals(
276- noKeyTagsDefLen,
277- Cbor {
278- useDefiniteLengthEncoding = true
279- encodeKeyTags = false
280- encodeValueTags = true
281- encodeObjectTags = true
282- verifyKeyTags = true
283- verifyValueTags = true
284- verifyObjectTags = true
285- }.encodeToHexString(
286- DataWithTags .serializer(),
287- reference
288- )
289- )
290- assertEquals(reference, Cbor {
291- encodeKeyTags = true
292- encodeValueTags = true
293- encodeObjectTags = true
294- verifyValueTags = true
295- verifyObjectTags = true
296- verifyKeyTags = false
297- }.decodeFromHexString(noKeyTags))
298- assertEquals(reference, Cbor {
299- encodeKeyTags = true
286+ }
287+ assertEquals(noKeyTags, cborNoKeyTags.encodeToHexString(DataWithTags .serializer(), reference))
288+ (cborNoKeyTags to noKeyTags).let { (cbor, hex) ->
289+ val struct = cbor.encodeToCbor(DataWithTags .serializer(), reference)
290+ assertEquals(struct, cbor.decodeFromHexString(CborElement .serializer(), hex))
291+ assertEquals(reference, cbor.decodeFromCbor(DataWithTags .serializer(), struct))
292+ }
293+
294+ val cborNoKeyTagsDefLen = Cbor {
295+ useDefiniteLengthEncoding = true
296+ encodeKeyTags = false
300297 encodeValueTags = true
301298 encodeObjectTags = true
299+ verifyKeyTags = true
302300 verifyValueTags = true
303301 verifyObjectTags = true
304- verifyKeyTags = false
305- }.decodeFromHexString(noKeyTagsDefLen))
306- assertEquals(reference, Cbor {
302+ }
303+ assertEquals(noKeyTagsDefLen, cborNoKeyTagsDefLen.encodeToHexString(DataWithTags .serializer(), reference))
304+ (cborNoKeyTagsDefLen to noKeyTagsDefLen).let { (cbor, hex) ->
305+ val struct = cbor.encodeToCbor(DataWithTags .serializer(), reference)
306+ assertEquals(struct, cbor.decodeFromHexString(CborElement .serializer(), hex))
307+ // this must fail, because encoding/decoding is not symmetric with the current config (the struct does not have the tags, but the hex string does)
308+ assertFailsWith(CborDecodingException ::class ) {
309+ assertEquals(reference, cbor.decodeFromCbor(DataWithTags .serializer(), struct))
310+ }
311+ }
312+
313+ val cborEncodingKeyTags = Cbor {
307314 encodeKeyTags = true
308315 encodeValueTags = true
309316 encodeObjectTags = true
310317 verifyValueTags = true
311318 verifyObjectTags = true
312319 verifyKeyTags = false
313- }.decodeFromHexString(referenceHexString))
320+ }
321+ assertEquals(reference, cborEncodingKeyTags.decodeFromHexString(noKeyTags))
322+ (cborEncodingKeyTags to noKeyTags).let { (cbor, hex) ->
323+ val struct = cbor.encodeToCbor(DataWithTags .serializer(), reference)
324+ // this must not be equal, because the scruct has the tags, but the hex string doesn't
325+ assertNotEquals(struct, cbor.decodeFromHexString(CborElement .serializer(), hex))
326+ assertEquals(reference, cbor.decodeFromCbor(DataWithTags .serializer(), struct))
327+ }
328+
329+ assertEquals(reference, cborEncodingKeyTags.decodeFromHexString(noKeyTagsDefLen))
330+ (cborEncodingKeyTags to noKeyTagsDefLen).let { (cbor, hex) ->
331+ val struct = cbor.encodeToCbor(DataWithTags .serializer(), reference)
332+ // this must not be equals, because the scruct has the tags, but the hex string doesn't (as above)
333+ assertNotEquals(struct, cbor.decodeFromHexString(CborElement .serializer(), hex))
334+ assertEquals(reference, cbor.decodeFromCbor(DataWithTags .serializer(), struct))
335+ }
336+
337+
338+ assertEquals(reference, cborEncodingKeyTags.decodeFromHexString(referenceHexString))
339+ (cborNoKeyTags to noKeyTags).let { (cbor, hex) ->
340+ val struct = cbor.encodeToCbor(DataWithTags .serializer(), reference)
341+ assertEquals(struct, cbor.decodeFromHexString(CborElement .serializer(), hex))
342+ assertEquals(reference, cbor.decodeFromCbor(DataWithTags .serializer(), struct))
343+ }
314344
315345 assertFailsWith(CborDecodingException ::class ) {
316346 Cbor .CoseCompliant .decodeFromHexString(
@@ -320,14 +350,7 @@ class CborTaggedTest {
320350 }
321351
322352 assertFailsWith(CborDecodingException ::class ) {
323- Cbor {
324- encodeKeyTags = true
325- encodeValueTags = true
326- encodeObjectTags = true
327- verifyValueTags = true
328- verifyObjectTags = true
329- verifyKeyTags = false
330- }.decodeFromHexString(DataWithTags .serializer(), noValueTags)
353+ cborEncodingKeyTags.decodeFromHexString(DataWithTags .serializer(), noValueTags)
331354 }
332355 }
333356
0 commit comments