50 lines
1.6 KiB
Go
50 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestParseCron(t *testing.T) {
|
|
for _, spec := range []string{"*/5 * * * *", "0 9 * * 1-5", "30 8 1,15 * *", "* * * * *", "0 */2 * * *", "0 8-18/2 * * 1-5"} {
|
|
if _, err := parseCron(spec); err != nil {
|
|
t.Errorf("parseCron(%q) 应当成功,却得到: %v", spec, err)
|
|
}
|
|
}
|
|
for _, spec := range []string{"* * * *", "61 * * * *", "* * * * 8", "a * * * *", "* * * * * *"} {
|
|
if _, err := parseCron(spec); err == nil {
|
|
t.Errorf("parseCron(%q) 应当失败", spec)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestCronNext(t *testing.T) {
|
|
spec, _ := parseCron("30 9 * * *")
|
|
next := cronNext(spec, time.Date(2026, 9, 8, 10, 0, 0, 0, time.Local))
|
|
want := time.Date(2026, 9, 9, 9, 30, 0, 0, time.Local)
|
|
if !next.Equal(want) {
|
|
t.Fatalf("每日 09:30:期望 %v,得到 %v", want, next)
|
|
}
|
|
|
|
spec2, _ := parseCron("*/15 * * * *")
|
|
next2 := cronNext(spec2, time.Date(2026, 9, 8, 10, 7, 0, 0, time.Local))
|
|
want2 := time.Date(2026, 9, 8, 10, 15, 0, 0, time.Local)
|
|
if !next2.Equal(want2) {
|
|
t.Fatalf("*/15:期望 %v,得到 %v", want2, next2)
|
|
}
|
|
|
|
spec3, _ := parseCron("0 12 * * 5")
|
|
next3 := cronNext(spec3, time.Date(2026, 9, 8, 12, 0, 0, 0, time.Local))
|
|
want3 := time.Date(2026, 9, 11, 12, 0, 0, 0, time.Local)
|
|
if !next3.Equal(want3) {
|
|
t.Fatalf("仅周五:期望 %v,得到 %v", want3, next3)
|
|
}
|
|
|
|
spec4, _ := parseCron("0 0 * * 7")
|
|
next4 := cronNext(spec4, time.Date(2026, 9, 12, 0, 0, 0, 0, time.Local)) // 周六
|
|
want4 := time.Date(2026, 9, 13, 0, 0, 0, 0, time.Local)
|
|
if !next4.Equal(want4) {
|
|
t.Fatalf("7=周日:期望 %v,得到 %v", want4, next4)
|
|
}
|
|
}
|