forked from TrueCloudLab/restic
Extend custom Duration granularity to hours and add tests
This commit is contained in:
parent
c8fc72364a
commit
7486bfea5b
2 changed files with 24 additions and 4 deletions
|
@ -10,9 +10,9 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// Duration is similar to time.Duration, except it only supports larger ranges
|
// Duration is similar to time.Duration, except it only supports larger ranges
|
||||||
// like days, months, and years.
|
// like hours, days, months, and years.
|
||||||
type Duration struct {
|
type Duration struct {
|
||||||
Days, Months, Years int
|
Hours, Days, Months, Years int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d Duration) String() string {
|
func (d Duration) String() string {
|
||||||
|
@ -29,6 +29,10 @@ func (d Duration) String() string {
|
||||||
s += fmt.Sprintf("%dd", d.Days)
|
s += fmt.Sprintf("%dd", d.Days)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if d.Hours != 0 {
|
||||||
|
s += fmt.Sprintf("%dh", d.Hours)
|
||||||
|
}
|
||||||
|
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,7 +77,7 @@ func nextNumber(input string) (num int, rest string, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ParseDuration parses a duration from a string. The format is:
|
// ParseDuration parses a duration from a string. The format is:
|
||||||
// 6y5m234d
|
// 6y5m234d37h
|
||||||
func ParseDuration(s string) (Duration, error) {
|
func ParseDuration(s string) (Duration, error) {
|
||||||
var (
|
var (
|
||||||
d Duration
|
d Duration
|
||||||
|
@ -100,6 +104,8 @@ func ParseDuration(s string) (Duration, error) {
|
||||||
d.Months = num
|
d.Months = num
|
||||||
case 'd':
|
case 'd':
|
||||||
d.Days = num
|
d.Days = num
|
||||||
|
case 'h':
|
||||||
|
d.Hours = num
|
||||||
}
|
}
|
||||||
|
|
||||||
s = s[1:]
|
s = s[1:]
|
||||||
|
@ -127,5 +133,5 @@ func (d Duration) Type() string {
|
||||||
|
|
||||||
// Zero returns true if the duration is empty (all values are set to zero).
|
// Zero returns true if the duration is empty (all values are set to zero).
|
||||||
func (d Duration) Zero() bool {
|
func (d Duration) Zero() bool {
|
||||||
return d.Years == 0 && d.Months == 0 && d.Days == 0
|
return d.Years == 0 && d.Months == 0 && d.Days == 0 && d.Hours == 0
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,15 +13,24 @@ func TestNextNumber(t *testing.T) {
|
||||||
rest string
|
rest string
|
||||||
err bool
|
err bool
|
||||||
}{
|
}{
|
||||||
|
{
|
||||||
|
input: "12h", num: 12, rest: "h",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
input: "3d", num: 3, rest: "d",
|
input: "3d", num: 3, rest: "d",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
input: "4d9h", num: 4, rest: "d9h",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
input: "7m5d", num: 7, rest: "m5d",
|
input: "7m5d", num: 7, rest: "m5d",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: "-23y7m5d", num: -23, rest: "y7m5d",
|
input: "-23y7m5d", num: -23, rest: "y7m5d",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
input: "-13y5m11d12h", num: -13, rest: "y5m11d12h",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
input: " 5d", num: 0, rest: " 5d", err: true,
|
input: " 5d", num: 0, rest: " 5d", err: true,
|
||||||
},
|
},
|
||||||
|
@ -55,10 +64,15 @@ func TestParseDuration(t *testing.T) {
|
||||||
d Duration
|
d Duration
|
||||||
output string
|
output string
|
||||||
}{
|
}{
|
||||||
|
{"9h", Duration{Hours: 9}, "9h"},
|
||||||
{"3d", Duration{Days: 3}, "3d"},
|
{"3d", Duration{Days: 3}, "3d"},
|
||||||
|
{"4d2h", Duration{Days: 4, Hours: 2}, "4d2h"},
|
||||||
{"7m5d", Duration{Months: 7, Days: 5}, "7m5d"},
|
{"7m5d", Duration{Months: 7, Days: 5}, "7m5d"},
|
||||||
|
{"6m4d8h", Duration{Months: 6, Days: 4, Hours: 8}, "6m4d8h"},
|
||||||
{"5d7m", Duration{Months: 7, Days: 5}, "7m5d"},
|
{"5d7m", Duration{Months: 7, Days: 5}, "7m5d"},
|
||||||
|
{"4h3d9m", Duration{Months: 9, Days: 3, Hours: 4}, "9m3d4h"},
|
||||||
{"-7m5d", Duration{Months: -7, Days: 5}, "-7m5d"},
|
{"-7m5d", Duration{Months: -7, Days: 5}, "-7m5d"},
|
||||||
|
{"1y4m-5d-3h", Duration{Years: 1, Months: 4, Days: -5, Hours: -3}, "1y4m-5d-3h"},
|
||||||
{"2y7m-5d", Duration{Years: 2, Months: 7, Days: -5}, "2y7m-5d"},
|
{"2y7m-5d", Duration{Years: 2, Months: 7, Days: -5}, "2y7m-5d"},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue