time_test.go (2569B)
1 package sdp 2 3 import ( 4 "reflect" 5 "testing" 6 "time" 7 ) 8 9 func TestParseTimes(t *testing.T) { 10 var cases = []struct { 11 when string 12 want [2]time.Time 13 }{ 14 {"0 0", [2]time.Time{time.Time{}, time.Time{}}}, 15 { 16 "3930082049 0", 17 [2]time.Time{ 18 time.Date(2024, time.July, 16, 1, 27, 29, 0, time.UTC), 19 time.Time{}, 20 }, 21 }, 22 { 23 "3724394400 3724398000", 24 [2]time.Time{ 25 time.Date(2018, time.January, 8, 10, 0, 0, 0, time.UTC), 26 time.Date(2018, time.January, 8, 11, 0, 0, 0, time.UTC), 27 }, 28 }, 29 { 30 "3724484400 3724488000", 31 [2]time.Time{ 32 time.Date(2018, time.January, 9, 11, 0, 0, 0, time.UTC), 33 time.Date(2018, time.January, 9, 12, 0, 0, 0, time.UTC), 34 }, 35 }, 36 } 37 38 for _, tt := range cases { 39 got, err := parseTimes(tt.when) 40 if err != nil { 41 t.Fatal(err) 42 } 43 if got != tt.want { 44 t.Errorf("parseTimes(%q) = %v, want %v", tt.when, got, tt.want) 45 } 46 } 47 } 48 49 // TODO(otl): tests for invalid repeat lines, e.g. missing fields, negative values 50 51 func TestParseRepeat(t *testing.T) { 52 line := "604800 3600 0 90000" 53 want := Repeat{7 * 24 * time.Hour, time.Hour, []time.Duration{0, 25 * time.Hour}} 54 got, err := parseRepeat(line) 55 if err != nil { 56 t.Fatal(err) 57 } 58 if !reflect.DeepEqual(got, want) { 59 t.Errorf("parse repeat %s: got %v, want %v", line, got, want) 60 } 61 } 62 63 func TestDuration(t *testing.T) { 64 var cases = []struct{ 65 s string 66 want time.Duration 67 }{ 68 {"2d", 48*time.Hour}, 69 {"-1d", -24*time.Hour}, 70 } 71 for _, tt := range cases { 72 got, err := parseDuration(tt.s) 73 if err != nil { 74 t.Fatalf("parse %q: %v", tt.s, err) 75 } 76 if got != tt.want { 77 t.Errorf("parseDuration(%q) = %s, want %s", tt.s, got, tt.want) 78 } 79 } 80 } 81 82 func TestParseAdjustments(t *testing.T) { 83 var cases = []struct { 84 name string 85 line string 86 want []TimeAdjustment 87 wantErr bool 88 }{ 89 {"uneven", "3730922900 -2h 123456789", nil, true}, 90 {"missing offset", "3730922900 ", nil, true}, 91 {"garbage", "hello world!", nil, true}, 92 { 93 "from rfc", 94 "3730928400 -1h 3749680800 0", 95 []TimeAdjustment{ 96 {time.Date(2018, time.March, 25, 1, 0, 0, 0, time.UTC), -time.Hour}, 97 {time.Date(2018, time.October, 28, 2, 0, 0, 0, time.UTC), 0}, 98 }, 99 false, 100 }, 101 } 102 for _, tt := range cases { 103 t.Run(tt.name, func(t *testing.T) { 104 got, err := parseAdjustments(tt.line) 105 if err != nil && !tt.wantErr { 106 t.Fatal(err) 107 } else if err == nil && tt.wantErr { 108 t.Error("unexpected nil error") 109 } 110 if !reflect.DeepEqual(got, tt.want) { 111 t.Errorf("parseAdjustments(%q) = %v, want %v", tt.line, got, tt.want) 112 } 113 }) 114 } 115 }