@@ -391,13 +391,58 @@ func TestCard_Revision(t *testing.T) {
391
391
}
392
392
393
393
func TestCard_FieldValue (t * testing.T ) {
394
- got := NewFieldValue ("geo:1.23,4.56" )
395
- if expected := FieldValue ("geo:1.23\\ ,4.56" ); got != expected {
396
- t .Errorf ("Expected FieldValue to be %q but got %q" , expected , got )
394
+ fieldValues := map [FieldValue ][]string {
395
+ "" : {"" },
396
+ "," : {"" , "" },
397
+ "\\ ," : {"," },
398
+ ",,\\ ,," : {"" , "" , "," , "" },
399
+ "geo:1.23\\ ,4.56" : {"geo:1.23,4.56" },
400
+ "geo:1.23,4.56" : {"geo:1.23" , "4.56" },
401
+ "geo:1\\ ,23,4\\ ,56" : {"geo:1,23" , "4,56" },
402
+ }
403
+ for fv , parts := range fieldValues {
404
+ t .Run (fv .String (), func (t * testing.T ) {
405
+ gotParts := fv .Values ()
406
+ if ! reflect .DeepEqual (parts , gotParts ) {
407
+ t .Errorf ("Expected parts to be %+v but got %+v" , parts , gotParts )
408
+ }
409
+
410
+ gotFV := NewFieldValue (parts ... )
411
+ if gotFV != fv {
412
+ t .Errorf ("Expected FieldValue to be %+v but got %+v" , fv , gotFV )
413
+ }
414
+ })
397
415
}
398
416
}
399
417
400
- func FuzzCard_FieldValue (f * testing.F ) {
418
+ // go test -fuzztime=10s -fuzz=Card_FieldValueRaw
419
+ func FuzzCard_FieldValueRaw (f * testing.F ) {
420
+ f .Add (`` )
421
+ f .Add (`123` )
422
+ f .Add (`1,2,3` )
423
+ f .Add (`1\abc` ) // missing escaping of "\"
424
+ f .Add (`1\,2,3` )
425
+ f .Add (`1\\,2,3` )
426
+ f .Fuzz (func (t * testing.T , raw string ) {
427
+ fv := FieldValue (raw )
428
+ parts := fv .Values ()
429
+ got1 := NewFieldValue (parts ... )
430
+ if got1 != fv {
431
+ // the raw value was wrongly escaped:
432
+ // "got" should now be correctly escaped
433
+ if len (got1 ) <= len (fv ) {
434
+ t .Errorf ("Expected a larger (escaped) string than %q, got %q" , fv , got1 )
435
+ }
436
+ // encode again and check that we get back the same (correctly escaped) raw value
437
+ got2 := NewFieldValue (got1 .Values ()... )
438
+ if got1 != got2 {
439
+ t .Errorf ("Expected %q, got %q" , got1 , got2 )
440
+ }
441
+ }
442
+ })
443
+ }
444
+
445
+ func FuzzCard_FieldValueParts (f * testing.F ) {
401
446
f .Add ("p0" , "p1" )
402
447
f .Add ("1,2" , "3" )
403
448
f .Add ("1\\ ,2" , "3" )
0 commit comments