1package ber 2 3import ( 4 "testing" 5 "time" 6) 7 8func TestParseGeneralizedTime(t *testing.T) { 9 for _, test := range []struct { 10 str string 11 wanted time.Time 12 err error 13 }{ 14 { 15 "20170222190527Z", 16 time.Date(2017, time.Month(2), 22, 19, 05, 27, 0, time.UTC), 17 nil, 18 }, 19 { 20 "201702221905Z", 21 time.Date(2017, time.Month(2), 22, 19, 05, 0, 0, time.UTC), 22 nil, 23 }, 24 { 25 "2017022219Z", 26 time.Date(2017, time.Month(2), 22, 19, 0, 0, 0, time.UTC), 27 nil, 28 }, 29 { 30 "2017022219.25Z", 31 time.Date(2017, time.Month(2), 22, 19, 15, 0, 0, time.UTC), 32 nil, 33 }, 34 { 35 "201702221905.25Z", 36 time.Date(2017, time.Month(2), 22, 19, 5, 15, 0, time.UTC), 37 nil, 38 }, 39 { 40 "20170222190525-0100", 41 time.Date(2017, time.Month(2), 22, 19, 5, 25, 0, time.FixedZone("", -3600)), 42 nil, 43 }, 44 { 45 "20170222190525+0100", 46 time.Date(2017, time.Month(2), 22, 19, 5, 25, 0, time.FixedZone("", 3600)), 47 nil, 48 }, 49 { 50 "20170222190525+01", 51 time.Date(2017, time.Month(2), 22, 19, 5, 25, 0, time.FixedZone("", 3600)), 52 nil, 53 }, 54 { 55 "20170222190527.123Z", 56 time.Date(2017, time.Month(2), 22, 19, 05, 27, 123*1000*1000, time.UTC), 57 nil, 58 }, 59 { 60 "20170222190527,123Z", 61 time.Date(2017, time.Month(2), 22, 19, 05, 27, 123*1000*1000, time.UTC), 62 nil, 63 }, 64 { 65 "2017022219-0100", 66 time.Date(2017, time.Month(2), 22, 19, 0, 0, 0, time.FixedZone("", -3600)), 67 nil, 68 }, 69 } { 70 genTime, err := ParseGeneralizedTime([]byte(test.str)) 71 if err != nil { 72 if test.err != nil { 73 if err != test.err { 74 t.Errorf("unexpected error in %s: %s", test.str, err) 75 } 76 } else { 77 t.Errorf("test %s failed with error: %s", test.str, err) 78 } 79 } else { 80 if !genTime.Equal(test.wanted) { 81 t.Errorf("test got unexpected result: wanted=%s, got=%s", test.wanted, genTime) 82 } 83 } 84 } 85} 86