Skip to content

Commit 3292cb6

Browse files
authored
Merge pull request #45 from iamreinder/master
2 parents e229050 + 14f6714 commit 3292cb6

File tree

3 files changed

+46
-7
lines changed

3 files changed

+46
-7
lines changed

rules/nl/nl_test.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package nl_test
22

33
import (
4-
"github.com/olebedev/when/rules/nl"
54
"testing"
65
"time"
76

7+
"github.com/olebedev/when/rules/nl"
8+
89
"github.com/olebedev/when"
910
"github.com/stretchr/testify/require"
1011
)
@@ -51,12 +52,15 @@ func TestAll(t *testing.T) {
5152

5253
// complex cases
5354
fixt := []Fixture{
55+
{"vorige week zondag om 10:00", 0, "vorige week zondag om 10:00", ((-3 * 24) + 10) * time.Hour},
5456
{"vanavond om 23:10", 0, "vanavond om 23:10", (23 * time.Hour) + (10 * time.Minute)},
5557
{"op vrijdagmiddag", 3, "vrijdagmiddag", ((2 * 24) + 15) * time.Hour},
5658
{"komende dinsdag om 14:00", 0, "komende dinsdag om 14:00", ((6 * 24) + 14) * time.Hour},
5759
{"komende dinsdag 2 uur 's middags", 0, "komende dinsdag 2 uur 's middags", ((6 * 24) + 14) * time.Hour},
5860
{"komende woensdag om 14:25", 0, "komende woensdag om 14:25", (((7 * 24) + 14) * time.Hour) + (25 * time.Minute)},
5961
{"om 11 uur afgelopen dinsdag", 3, "11 uur afgelopen dinsdag", -13 * time.Hour},
62+
{"volgende week dinsdag om 18:15", 0, "volgende week dinsdag om 18:15", (((6 * 24) + 18) * time.Hour) + (15 * time.Minute)},
63+
{"volgende week vrijdag", 0, "volgende week vrijdag", (9 * 24) * time.Hour},
6064
}
6165

6266
ApplyFixtures(t, "nl.All...", w, fixt)

rules/nl/weekday.go

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ func Weekday(s rules.Strategy) rules.Rule {
1515
RegExp: regexp.MustCompile("(?i)" +
1616
"(?:\\W|^)" +
1717
"(?:op\\s*?)?" +
18-
"(?:(deze|vorige|afgelopen|volgende|komende)\\s*)?" +
18+
"(?:(deze|vorige|vorige week|afgelopen|volgende|volgende week|komende|komende week)\\s*)?" +
1919
"(" + WEEKDAY_OFFSET_PATTERN[3:] + // skip '(?:'
2020
"(?:\\s*(deze|vorige|afgelopen|volgende|komende)\\s*week)?" +
2121
"(?:\\W|$)",
@@ -40,6 +40,18 @@ func Weekday(s rules.Strategy) rules.Rule {
4040

4141
// Switch:
4242
switch {
43+
case strings.Contains(norm, "vorige week"):
44+
if dayInt == 6 {
45+
dayInt = -1
46+
}
47+
diff := int(ref.Weekday()) - dayInt
48+
if diff != 0 && dayInt <= 0 {
49+
c.Duration = -time.Duration(diff) * 24 * time.Hour
50+
} else if diff != 0 {
51+
c.Duration = -time.Duration(7+diff) * 24 * time.Hour
52+
} else {
53+
c.Duration = -(7 * 24 * time.Hour)
54+
}
4355
case strings.Contains(norm, "afgelopen") || strings.Contains(norm, "vorige"):
4456
diff := int(ref.Weekday()) - dayInt
4557
if diff > 0 {
@@ -49,10 +61,16 @@ func Weekday(s rules.Strategy) rules.Rule {
4961
} else {
5062
c.Duration = -(7 * 24 * time.Hour)
5163
}
64+
case strings.Contains(norm, "volgende week"):
65+
if dayInt == 0 {
66+
dayInt = 7
67+
}
68+
diff := dayInt - int(ref.Weekday())
69+
c.Duration = time.Duration(7+diff) * 24 * time.Hour
5270
case strings.Contains(norm, "volgende"), strings.Contains(norm, "komende"):
5371
diff := dayInt - int(ref.Weekday())
5472
if diff > 0 {
55-
c.Duration = time.Duration(diff*24) * time.Hour
73+
c.Duration = time.Duration(diff) * 24 * time.Hour
5674
} else if diff < 0 {
5775
c.Duration = time.Duration(7+diff) * 24 * time.Hour
5876
} else {
@@ -62,7 +80,7 @@ func Weekday(s rules.Strategy) rules.Rule {
6280
if int(ref.Weekday()) < dayInt {
6381
diff := dayInt - int(ref.Weekday())
6482
if diff > 0 {
65-
c.Duration = time.Duration(diff*24) * time.Hour
83+
c.Duration = time.Duration(diff) * 24 * time.Hour
6684
} else if diff < 0 {
6785
c.Duration = time.Duration(7+diff) * 24 * time.Hour
6886
} else {
@@ -71,7 +89,7 @@ func Weekday(s rules.Strategy) rules.Rule {
7189
} else if int(ref.Weekday()) > dayInt {
7290
diff := int(ref.Weekday()) - dayInt
7391
if diff > 0 {
74-
c.Duration = -time.Duration(diff*24) * time.Hour
92+
c.Duration = -time.Duration(diff) * 24 * time.Hour
7593
} else if diff < 0 {
7694
c.Duration = -time.Duration(7+diff) * 24 * time.Hour
7795
} else {

rules/nl/weekday_test.go

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,40 @@
11
package nl_test
22

33
import (
4-
"github.com/olebedev/when/rules/nl"
54
"testing"
65
"time"
76

7+
"github.com/olebedev/when/rules/nl"
8+
89
"github.com/olebedev/when"
910
"github.com/olebedev/when/rules"
1011
)
1112

1213
func TestWeekday(t *testing.T) {
13-
// current is Friday
14+
// current is Wednesday
1415
fixt := []Fixture{
16+
// past week
17+
{"vorige week maandag", 0, "vorige week maandag", -(9 * 24 * time.Hour)},
18+
{"vorige week dinsdag", 0, "vorige week dinsdag", -(8 * 24 * time.Hour)},
19+
{"vorige week woensdag", 0, "vorige week woensdag", -(7 * 24 * time.Hour)},
20+
{"vorige week donderdag", 0, "vorige week donderdag", -(6 * 24 * time.Hour)},
21+
{"vorige week vrijdag", 0, "vorige week vrijdag", -(5 * 24 * time.Hour)},
22+
{"vorige week zaterdag", 0, "vorige week zaterdag", -(4 * 24 * time.Hour)},
23+
{"vorige week zondag", 0, "vorige week zondag", -(3 * 24 * time.Hour)},
1524
// past/last
1625
{"doe het voor afgelopen maandag", 13, "afgelopen maandag", -(2 * 24 * time.Hour)},
1726
{"afgelopen zaterdag", 0, "afgelopen zaterdag", -(4 * 24 * time.Hour)},
1827
{"afgelopen vrijdag", 0, "afgelopen vrijdag", -(5 * 24 * time.Hour)},
1928
{"afgelopen woensdag", 0, "afgelopen woensdag", -(7 * 24 * time.Hour)},
2029
{"afgelopen dinsdag", 0, "afgelopen dinsdag", -(24 * time.Hour)},
30+
// next week
31+
{"volgende week maandag", 0, "volgende week maandag", 5 * 24 * time.Hour},
32+
{"volgende week dinsdag", 0, "volgende week dinsdag", 6 * 24 * time.Hour},
33+
{"volgende week woensdag", 0, "volgende week woensdag", 7 * 24 * time.Hour},
34+
{"volgende week donderdag", 0, "volgende week donderdag", 8 * 24 * time.Hour},
35+
{"volgende week vrijdag", 0, "volgende week vrijdag", 9 * 24 * time.Hour},
36+
{"volgende week zaterdag", 0, "volgende week zaterdag", 10 * 24 * time.Hour},
37+
{"volgende week zondag", 0, "volgende week zondag", 11 * 24 * time.Hour},
2138
// next
2239
{"komende dinsdag", 0, "komende dinsdag", 6 * 24 * time.Hour},
2340
{"stuur me een bericht komende woensdag", 21, "komende woensdag", 7 * 24 * time.Hour},

0 commit comments

Comments
 (0)