88 lines
2.4 KiB
Go
88 lines
2.4 KiB
Go
package http
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
// Ensure a time duration can be parsed.
|
|
func TestParseDuration(t *testing.T) {
|
|
var tests = []struct {
|
|
s string
|
|
want time.Duration
|
|
wantErr bool
|
|
}{
|
|
{s: `10n`, want: 10 * time.Nanosecond},
|
|
{s: `10ns`, want: 10 * time.Nanosecond},
|
|
{s: `10u`, want: 10 * time.Microsecond},
|
|
{s: `10µ`, want: 10 * time.Microsecond},
|
|
{s: `10us`, want: 10 * time.Microsecond},
|
|
{s: `10µs`, want: 10 * time.Microsecond},
|
|
{s: `15ms`, want: 15 * time.Millisecond},
|
|
{s: `100s`, want: 100 * time.Second},
|
|
{s: `2m`, want: 2 * time.Minute},
|
|
{s: `2mo`, want: 2 * 30 * 24 * time.Hour},
|
|
{s: `2h`, want: 2 * time.Hour},
|
|
{s: `2d`, want: 2 * 24 * time.Hour},
|
|
{s: `2w`, want: 2 * 7 * 24 * time.Hour},
|
|
{s: `2y`, want: 2 * 365 * 24 * time.Hour},
|
|
{s: `1h30m`, want: time.Hour + 30*time.Minute},
|
|
{s: `30ms3000u`, want: 30*time.Millisecond + 3000*time.Microsecond},
|
|
{s: `-5s`, want: -5 * time.Second},
|
|
{s: `-5m30s`, want: -5*time.Minute - 30*time.Second},
|
|
{s: ``, wantErr: true},
|
|
{s: `3`, wantErr: true},
|
|
{s: `3mm`, wantErr: true},
|
|
{s: `3nm`, wantErr: true},
|
|
{s: `1000`, wantErr: true},
|
|
{s: `w`, wantErr: true},
|
|
{s: `ms`, wantErr: true},
|
|
{s: `1.2w`, wantErr: true},
|
|
{s: `10x`, wantErr: true},
|
|
}
|
|
|
|
for i, tt := range tests {
|
|
t.Run(fmt.Sprintf("%d", i), func(t *testing.T) {
|
|
got, err := ParseDuration(tt.s)
|
|
if (err != nil) != tt.wantErr {
|
|
t.Errorf("ParseDuration() error = %v, wantErr %v", err, tt.wantErr)
|
|
return
|
|
}
|
|
|
|
if got != tt.want {
|
|
t.Errorf("ParseDuration() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// Ensure a time duration can be formatted.
|
|
func TestFormatDuration(t *testing.T) {
|
|
var tests = []struct {
|
|
d time.Duration
|
|
want string
|
|
}{
|
|
{d: 3 * time.Nanosecond, want: `3ns`},
|
|
{d: 3 * time.Microsecond, want: `3us`},
|
|
{d: 1001 * time.Microsecond, want: `1001us`},
|
|
{d: 15 * time.Millisecond, want: `15ms`},
|
|
{d: 100 * time.Second, want: `100s`},
|
|
{d: 2 * time.Minute, want: `2m`},
|
|
{d: 2 * time.Hour, want: `2h`},
|
|
{d: 2 * 24 * time.Hour, want: `2d`},
|
|
{d: 2 * 7 * 24 * time.Hour, want: `2w`},
|
|
{d: 2 * 30 * 24 * time.Hour, want: `2mo`},
|
|
{d: 2 * 365 * 24 * time.Hour, want: `2y`},
|
|
}
|
|
|
|
for i, tt := range tests {
|
|
t.Run(fmt.Sprintf("%d", i), func(t *testing.T) {
|
|
got := FormatDuration(tt.d)
|
|
if got != tt.want {
|
|
t.Errorf("FormatDuration() = %s, want %s", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|