@@ -236,7 +236,6 @@ class CborTaggedTest {
236
236
val structFromHex = cbor.decodeFromHexString(CborElement .serializer(), referenceHexString)
237
237
val struct = cbor.encodeToCbor(DataWithTags .serializer(), reference)
238
238
assertEquals(struct, structFromHex)
239
-
240
239
assertEquals(reference, cbor.decodeFromCbor(DataWithTags .serializer(), struct))
241
240
assertEquals(referenceHexString, cbor.encodeToHexString(CborElement .serializer(), struct))
242
241
@@ -249,68 +248,99 @@ class CborTaggedTest {
249
248
verifyValueTags = true
250
249
verifyObjectTags = true
251
250
}
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
+
256
258
257
259
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
+
258
265
assertEquals(
259
266
reference,
260
267
Cbor .CoseCompliant .decodeFromHexString(DataWithTags .serializer(), referenceHexStringDefLen)
261
268
)
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))
262
274
263
275
}
264
276
265
277
@Test
266
278
fun writeReadUntaggedKeys () {
267
- assertEquals(noKeyTags, Cbor {
279
+ val cborNoKeyTags = Cbor {
268
280
encodeKeyTags = false
269
281
encodeValueTags = true
270
282
encodeObjectTags = true
271
283
verifyKeyTags = false
272
284
verifyValueTags = true
273
285
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
300
297
encodeValueTags = true
301
298
encodeObjectTags = true
299
+ verifyKeyTags = true
302
300
verifyValueTags = true
303
301
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 {
307
314
encodeKeyTags = true
308
315
encodeValueTags = true
309
316
encodeObjectTags = true
310
317
verifyValueTags = true
311
318
verifyObjectTags = true
312
319
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
+ }
314
344
315
345
assertFailsWith(CborDecodingException ::class ) {
316
346
Cbor .CoseCompliant .decodeFromHexString(
@@ -320,14 +350,7 @@ class CborTaggedTest {
320
350
}
321
351
322
352
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)
331
354
}
332
355
}
333
356
0 commit comments