@@ -397,6 +397,75 @@ func TestParseByteDateTime(t *testing.T) {
397
397
}
398
398
}
399
399
400
+ func TestParseByteDateTimeFail (t * testing.T ) {
401
+ cases := []struct {
402
+ name string
403
+ str string
404
+ wantErr string
405
+ }{
406
+ {
407
+ name : "parse invalid time" ,
408
+ str : "hello" ,
409
+ wantErr : "invalid time bytes: hello" ,
410
+ },
411
+ {
412
+ name : "parse year" ,
413
+ str : "000!-00-00 00:00:00.000000" ,
414
+ wantErr : "not [0-9]" ,
415
+ },
416
+ {
417
+ name : "parse month" ,
418
+ str : "0000-!0-00 00:00:00.000000" ,
419
+ wantErr : "not [0-9]" ,
420
+ },
421
+ {
422
+ name : `parse "-" after parsed year` ,
423
+ str : "0000:00-00 00:00:00.000000" ,
424
+ wantErr : "bad value for field: `:`" ,
425
+ },
426
+ {
427
+ name : `parse "-" after parsed month` ,
428
+ str : "0000-00:00 00:00:00.000000" ,
429
+ wantErr : "bad value for field: `:`" ,
430
+ },
431
+ {
432
+ name : `parse " " after parsed date` ,
433
+ str : "0000-00-00+00:00:00.000000" ,
434
+ wantErr : "bad value for field: `+`" ,
435
+ },
436
+ {
437
+ name : `parse ":" after parsed date` ,
438
+ str : "0000-00-00 00-00:00.000000" ,
439
+ wantErr : "bad value for field: `-`" ,
440
+ },
441
+ {
442
+ name : `parse ":" after parsed hour` ,
443
+ str : "0000-00-00 00:00-00.000000" ,
444
+ wantErr : "bad value for field: `-`" ,
445
+ },
446
+ {
447
+ name : `parse "." after parsed sec` ,
448
+ str : "0000-00-00 00:00:00?000000" ,
449
+ wantErr : "bad value for field: `?`" ,
450
+ },
451
+ }
452
+
453
+ for _ , cc := range cases {
454
+ t .Run (cc .name , func (t * testing.T ) {
455
+ got , err := parseByteDateTime ([]byte (cc .str ), time .UTC )
456
+ if err == nil {
457
+ t .Fatal ("want error" )
458
+ }
459
+ if cc .wantErr != err .Error () {
460
+ t .Fatalf ("want `%s`, but got `%s`" , cc .wantErr , err )
461
+ }
462
+ if ! got .IsZero () {
463
+ t .Fatal ("want zero time" )
464
+ }
465
+ })
466
+ }
467
+ }
468
+
400
469
func BenchmarkParseDateTime (b * testing.B ) {
401
470
str := "2020-05-13 21:30:45"
402
471
loc := time .FixedZone ("test" , 8 * 60 * 60 )
0 commit comments