26
26
import org .junit .jupiter .api .Test ;
27
27
import org .junit .jupiter .params .ParameterizedTest ;
28
28
import org .junit .jupiter .params .provider .CsvSource ;
29
+ import org .junit .jupiter .params .provider .ValueSource ;
29
30
30
31
import java .nio .charset .StandardCharsets ;
31
32
import java .util .Random ;
@@ -3407,6 +3408,116 @@ void disallowsIncompleteMessagesDueToMissingVarDataInNestedGroup(
3407
3408
assertThat (exception .getMessage (), containsString ("Not fully encoded, current state: " + expectedState ));
3408
3409
}
3409
3410
3411
+ @ Test
3412
+ void decodesNullValueForFutureVersionBlockFieldWhenCurrentVersionHasNoChangesInMessage ()
3413
+ {
3414
+ final MessageHeaderEncoder headerEncoder = new MessageHeaderEncoder ();
3415
+ final SkipVersionAddPrimitiveV1Encoder encoder = new SkipVersionAddPrimitiveV1Encoder ()
3416
+ .wrapAndApplyHeader (buffer , OFFSET , headerEncoder );
3417
+
3418
+ headerEncoder
3419
+ .templateId (SkipVersionAddPrimitiveV2Encoder .TEMPLATE_ID )
3420
+ .version (1 );
3421
+
3422
+ encoder .b ("abc" );
3423
+
3424
+ final SkipVersionAddPrimitiveV2Decoder decoder = new SkipVersionAddPrimitiveV2Decoder ()
3425
+ .wrapAndApplyHeader (buffer , OFFSET , messageHeaderDecoder );
3426
+
3427
+ assertThat (decoder .a (), equalTo (SkipVersionAddPrimitiveV2Decoder .aNullValue ()));
3428
+ assertThat (decoder .b (), equalTo ("abc" ));
3429
+ }
3430
+
3431
+ @ Test
3432
+ void decodesEmptyFutureGroupWhenDecodingFromVersionWithNoChangesInMessage ()
3433
+ {
3434
+ final MessageHeaderEncoder headerEncoder = new MessageHeaderEncoder ();
3435
+ final SkipVersionAddGroupV1Encoder encoder = new SkipVersionAddGroupV1Encoder ()
3436
+ .wrapAndApplyHeader (buffer , OFFSET , headerEncoder );
3437
+
3438
+ headerEncoder
3439
+ .templateId (SkipVersionAddGroupV2Decoder .TEMPLATE_ID )
3440
+ .version (1 );
3441
+
3442
+ encoder .a (42 );
3443
+
3444
+ final SkipVersionAddGroupV2Decoder decoder = new SkipVersionAddGroupV2Decoder ()
3445
+ .wrapAndApplyHeader (buffer , OFFSET , messageHeaderDecoder );
3446
+
3447
+ assertThat (decoder .a (), equalTo (42 ));
3448
+ assertThat (decoder .b ().count (), equalTo (0 ));
3449
+ }
3450
+
3451
+ @ Test
3452
+ void decodesNullValueForFutureVarDataFieldWhenDecodingFromVersionWithNoChangesInMessage ()
3453
+ {
3454
+ final MessageHeaderEncoder headerEncoder = new MessageHeaderEncoder ();
3455
+ final SkipVersionAddVarDataV1Encoder encoder = new SkipVersionAddVarDataV1Encoder ()
3456
+ .wrapAndApplyHeader (buffer , OFFSET , headerEncoder );
3457
+
3458
+ headerEncoder
3459
+ .templateId (SkipVersionAddVarDataV2Decoder .TEMPLATE_ID )
3460
+ .version (1 );
3461
+
3462
+ encoder .a (42 );
3463
+
3464
+ final SkipVersionAddVarDataV2Decoder decoder = new SkipVersionAddVarDataV2Decoder ()
3465
+ .wrapAndApplyHeader (buffer , OFFSET , messageHeaderDecoder );
3466
+
3467
+ assertThat (decoder .a (), equalTo (42 ));
3468
+ assertThat (decoder .b (), equalTo ("" ));
3469
+ }
3470
+
3471
+ @ Test
3472
+ void allowsDecodingUnknownFutureVersions ()
3473
+ {
3474
+ final MessageHeaderEncoder headerEncoder = new MessageHeaderEncoder ();
3475
+ final SkipVersionAddPrimitiveV2Encoder encoder = new SkipVersionAddPrimitiveV2Encoder ()
3476
+ .wrapAndApplyHeader (buffer , OFFSET , headerEncoder );
3477
+
3478
+ headerEncoder
3479
+ .templateId (SkipVersionAddPrimitiveV2Encoder .TEMPLATE_ID )
3480
+ .version (42 );
3481
+
3482
+ encoder .a (43 ).b ("abc" );
3483
+
3484
+ final SkipVersionAddPrimitiveV2Decoder decoder = new SkipVersionAddPrimitiveV2Decoder ()
3485
+ .wrapAndApplyHeader (buffer , OFFSET , messageHeaderDecoder );
3486
+
3487
+ assertThat (decoder .a (), equalTo (43 ));
3488
+ assertThat (decoder .b (), equalTo ("abc" ));
3489
+ }
3490
+
3491
+ @ ParameterizedTest
3492
+ @ ValueSource (booleans = {false , true })
3493
+ void allowsSkippingFutureGroupWhenDecodingFromVersionWithNoChangesInMessage (final boolean decodeGroup )
3494
+ {
3495
+ final MessageHeaderEncoder headerEncoder = new MessageHeaderEncoder ();
3496
+ final AddGroupBeforeVarDataV0Encoder encoder = new AddGroupBeforeVarDataV0Encoder ()
3497
+ .wrapAndApplyHeader (buffer , OFFSET , headerEncoder );
3498
+
3499
+ headerEncoder
3500
+ .templateId (SkipVersionAddGroupBeforeVarDataV2Decoder .TEMPLATE_ID )
3501
+ .version (1 );
3502
+
3503
+ encoder .a (42 ).b ("abc" );
3504
+
3505
+ final SkipVersionAddGroupBeforeVarDataV2Decoder decoder = new SkipVersionAddGroupBeforeVarDataV2Decoder ()
3506
+ .wrapAndApplyHeader (buffer , OFFSET , messageHeaderDecoder );
3507
+
3508
+ assertThat (decoder .a (), equalTo (42 ));
3509
+
3510
+ if (decodeGroup )
3511
+ {
3512
+ for (final SkipVersionAddGroupBeforeVarDataV2Decoder .CDecoder group : decoder .c ())
3513
+ {
3514
+ group .sbeSkip ();
3515
+ }
3516
+ }
3517
+
3518
+ assertThat (decoder .b (), equalTo ("abc" ));
3519
+ }
3520
+
3410
3521
private void modifyHeaderToLookLikeVersion0 ()
3411
3522
{
3412
3523
messageHeaderDecoder .wrap (buffer , OFFSET );
@@ -3418,9 +3529,9 @@ private void modifyHeaderToLookLikeVersion0()
3418
3529
private void modifyHeaderToLookLikeVersion1 ()
3419
3530
{
3420
3531
messageHeaderDecoder .wrap (buffer , OFFSET );
3421
- assert messageHeaderDecoder .version () = = 1 ;
3532
+ assert messageHeaderDecoder .version () > = 1 ;
3422
3533
final int v0TemplateId = messageHeaderDecoder .templateId () - 1_000 ;
3423
3534
messageHeaderEncoder .wrap (buffer , OFFSET );
3424
- messageHeaderEncoder .templateId (v0TemplateId );
3535
+ messageHeaderEncoder .templateId (v0TemplateId ). version ( 1 ) ;
3425
3536
}
3426
3537
}
0 commit comments