@@ -328,6 +328,34 @@ var mergeCases = []mergeTestCase{{
328
328
`{"setStr":["a","b","c","d","e","f","g","h","i","j"]}` ,
329
329
`{"setStr":["1","b","2","h","3","e","4","k","l"]}` ,
330
330
`{"setStr":["a","1","b","c","d","f","g","2","h","i","j","3","e","4","k","l"]}` ,
331
+ }, { // We have a duplicate in LHS
332
+ `{"setStr":["a","b","b"]}` ,
333
+ `{"setStr":["c"]}` ,
334
+ `{"setStr":["a","b","b","c"]}` ,
335
+ }, { // We have a duplicate in LHS.
336
+ `{"setStr":["a","b","b"]}` ,
337
+ `{"setStr":["b"]}` ,
338
+ `{"setStr":["a","b"]}` ,
339
+ }, { // We have a duplicate in LHS.
340
+ `{"setStr":["a","b","b"]}` ,
341
+ `{"setStr":["a"]}` ,
342
+ `{"setStr":["a","b","b"]}` ,
343
+ }, { // We have a duplicate in LHS.
344
+ `{"setStr":["a","b","c","d","e","c"]}` ,
345
+ `{"setStr":["1","b","2","e","d"]}` ,
346
+ `{"setStr":["a","1","b","c","2","e","c","d"]}` ,
347
+ }, { // We have a duplicate in LHS, also present in RHS, keep only one.
348
+ `{"setStr":["a","b","c","d","e","c"]}` ,
349
+ `{"setStr":["1","b","2","c","e","d"]}` ,
350
+ `{"setStr":["a","1","b","2","c","e","d"]}` ,
351
+ }, { // We have 2 duplicates in LHS, one is replaced.
352
+ `{"setStr":["a","a","b","b"]}` ,
353
+ `{"setStr":["b","c","d"]}` ,
354
+ `{"setStr":["a","a","b","c","d"]}` ,
355
+ }, { // We have 2 duplicates in LHS, and nothing on the right
356
+ `{"setStr":["a","a","b","b"]}` ,
357
+ `{"setStr":[]}` ,
358
+ `{"setStr":["a","a","b","b"]}` ,
331
359
}, {
332
360
`{"setBool":[true]}` ,
333
361
`{"setBool":[false]}` ,
@@ -336,6 +364,22 @@ var mergeCases = []mergeTestCase{{
336
364
`{"setNumeric":[1,2,3.14159]}` ,
337
365
`{"setNumeric":[1,2,3]}` ,
338
366
`{"setNumeric":[1,2,3.14159,3]}` ,
367
+ }, {
368
+ `{"setStr":["c","a","g","f","c","a"]}` ,
369
+ `{"setStr":["c","f","a","g"]}` ,
370
+ `{"setStr":["c","f","a","g"]}` ,
371
+ }, {
372
+ `{"setNumeric":[1,2,3.14159,1,2]}` ,
373
+ `{"setNumeric":[1,2,3]}` ,
374
+ `{"setNumeric":[1,2,3.14159,3]}` ,
375
+ }, {
376
+ `{"setBool":[true,false,true]}` ,
377
+ `{"setBool":[false]}` ,
378
+ `{"setBool":[true,false,true]}` ,
379
+ }, {
380
+ `{"setBool":[true,false,true]}` ,
381
+ `{"setBool":[true]}` ,
382
+ `{"setBool":[true, false]}` ,
339
383
},
340
384
},
341
385
}, {
@@ -423,6 +467,18 @@ var mergeCases = []mergeTestCase{{
423
467
`{"atomicList":["a","a","a"]}` ,
424
468
`{"atomicList":["a","a"]}` ,
425
469
`{"atomicList":["a","a"]}` ,
470
+ }, {
471
+ `{"list":[{"key":"a","id":1,"bv":true},{"key":"b","id":2},{"key":"a","id":1,"bv":false,"nv":2}]}` ,
472
+ `{"list":[{"key":"a","id":1,"nv":3},{"key":"c","id":3},{"key":"b","id":2}]}` ,
473
+ `{"list":[{"key":"a","id":1,"nv":3},{"key":"c","id":3},{"key":"b","id":2}]}` ,
474
+ }, {
475
+ `{"list":[{"key":"a","id":1,"nv":1},{"key":"a","id":1,"nv":2}]}` ,
476
+ `{"list":[]}` ,
477
+ `{"list":[{"key":"a","id":1,"nv":1},{"key":"a","id":1,"nv":2}]}` ,
478
+ }, {
479
+ `{"list":[{"key":"a","id":1,"nv":1},{"key":"a","id":1,"nv":2}]}` ,
480
+ `{}` ,
481
+ `{"list":[{"key":"a","id":1,"nv":1},{"key":"a","id":1,"nv":2}]}` ,
426
482
}},
427
483
}}
428
484
@@ -437,18 +493,16 @@ func (tt mergeTestCase) test(t *testing.T) {
437
493
t .Run (fmt .Sprintf ("%v-valid-%v" , tt .name , i ), func (t * testing.T ) {
438
494
t .Parallel ()
439
495
pt := parser .Type (tt .rootTypeName )
440
-
441
- lhs , err := pt .FromYAML (triplet .lhs )
496
+ // Former object can have duplicates in sets.
497
+ lhs , err := pt .FromYAML (triplet .lhs , typed . AllowDuplicates )
442
498
if err != nil {
443
499
t .Fatalf ("unable to parser/validate lhs yaml: %v\n %v" , err , triplet .lhs )
444
500
}
445
-
446
501
rhs , err := pt .FromYAML (triplet .rhs )
447
502
if err != nil {
448
503
t .Fatalf ("unable to parser/validate rhs yaml: %v\n %v" , err , triplet .rhs )
449
504
}
450
-
451
- out , err := pt .FromYAML (triplet .out )
505
+ out , err := pt .FromYAML (triplet .out , typed .AllowDuplicates )
452
506
if err != nil {
453
507
t .Fatalf ("unable to parser/validate out yaml: %v\n %v" , err , triplet .out )
454
508
}
0 commit comments