forked from danott/recurrence
/
week_test.go
96 lines (79 loc) · 2.4 KB
/
week_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package recurrence
import (
"encoding/json"
"testing"
"time"
)
func TestWeek(t *testing.T) {
tr := MonthRange(January, 2006)
assertIsOnlyOccurring(t, tr, Week(First), "2006-01-01", "2006-01-02",
"2006-01-03", "2006-01-04", "2006-01-05", "2006-01-06", "2006-01-07")
assertIsOnlyOccurring(t, tr, Week(Second), "2006-01-08", "2006-01-09",
"2006-01-10", "2006-01-11", "2006-01-12", "2006-01-13", "2006-01-14")
assertIsOnlyOccurring(t, tr, Week(Third), "2006-01-15", "2006-01-16",
"2006-01-17", "2006-01-18", "2006-01-19", "2006-01-20", "2006-01-21")
assertIsOnlyOccurring(t, tr, Week(Fourth), "2006-01-22", "2006-01-23",
"2006-01-24", "2006-01-25", "2006-01-26", "2006-01-27", "2006-01-28")
assertIsOnlyOccurring(t, tr, Week(Fifth),
"2006-01-29", "2006-01-30", "2006-01-31")
assertIsOnlyOccurring(t, tr, Week(Last), "2006-01-25", "2006-01-26",
"2006-01-27", "2006-01-28", "2006-01-29", "2006-01-30", "2006-01-31")
}
func TestWeekOccurrences(t *testing.T) {
tr := TimeRange{time.Time(NewDate("2006-01-01")), time.Time(NewDate("2006-12-31"))}
expectations := map[Schedule]int{
Week(1): 84,
Week(2): 84,
Week(3): 84,
Week(4): 84,
Week(5): 29,
Week(Last): 84,
}
assertOccurrenceGeneration(t, tr, expectations)
}
func TestWeekMarshalJSON(t *testing.T) {
tests := map[string]Week{
`{"week":1}`: Week(1),
`{"week":2}`: Week(2),
`{"week":3}`: Week(3),
`{"week":4}`: Week(4),
`{"week":5}`: Week(5),
`{"week":"Last"}`: Week(Last),
}
for expected, input := range tests {
output, err := json.Marshal(input)
if string(output) != expected || err != nil {
t.Errorf("\nInput: %v\nExpected: %v\nActual: %v\nError: %v", input, expected, output, err)
}
}
}
func TestWeekUnmarshalJSON(t *testing.T) {
tests := map[string]Week{
`1`: Week(1),
`2`: Week(2),
`3`: Week(3),
`4`: Week(4),
`5`: Week(5),
`"Last"`: Week(Last),
}
for input, expected := range tests {
var output Week
err := json.Unmarshal([]byte(input), &output)
if output != expected || err != nil {
t.Errorf("\nInput: %v\nExpected: %v\nActual: %v\nError: %v", input, expected, output, err)
}
}
}
func BenchmarkWeekOccurrences(b *testing.B) {
tr := TimeRange{time.Now(), time.Now().AddDate(1000, 0, 0)}
var w Week
for n := 0; n < b.N; n++ {
run := n % 6
if run == 0 {
w = Week(Last)
} else {
w = Week(run)
}
w.Occurrences(tr)
}
}