chronic 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/HISTORY.md +76 -0
- data/LICENSE +21 -0
- data/README.md +165 -0
- data/Rakefile +145 -18
- data/benchmark/benchmark.rb +13 -0
- data/chronic.gemspec +85 -0
- data/lib/chronic/chronic.rb +59 -49
- data/lib/chronic/grabber.rb +2 -2
- data/lib/chronic/handlers.rb +167 -112
- data/lib/{numerizer → chronic/numerizer}/numerizer.rb +17 -23
- data/lib/chronic/ordinal.rb +6 -6
- data/lib/chronic/pointer.rb +3 -3
- data/lib/chronic/repeater.rb +26 -12
- data/lib/chronic/repeaters/repeater_day.rb +17 -12
- data/lib/chronic/repeaters/repeater_day_name.rb +17 -12
- data/lib/chronic/repeaters/repeater_day_portion.rb +15 -14
- data/lib/chronic/repeaters/repeater_fortnight.rb +14 -9
- data/lib/chronic/repeaters/repeater_hour.rb +15 -10
- data/lib/chronic/repeaters/repeater_minute.rb +15 -10
- data/lib/chronic/repeaters/repeater_month.rb +20 -15
- data/lib/chronic/repeaters/repeater_month_name.rb +21 -16
- data/lib/chronic/repeaters/repeater_season.rb +136 -9
- data/lib/chronic/repeaters/repeater_season_name.rb +38 -17
- data/lib/chronic/repeaters/repeater_second.rb +15 -10
- data/lib/chronic/repeaters/repeater_time.rb +53 -43
- data/lib/chronic/repeaters/repeater_week.rb +16 -11
- data/lib/chronic/repeaters/repeater_weekday.rb +77 -0
- data/lib/chronic/repeaters/repeater_weekend.rb +14 -9
- data/lib/chronic/repeaters/repeater_year.rb +19 -13
- data/lib/chronic/scalar.rb +16 -14
- data/lib/chronic/separator.rb +25 -10
- data/lib/chronic/time_zone.rb +4 -3
- data/lib/chronic.rb +21 -19
- data/test/helper.rb +7 -0
- data/test/test_Chronic.rb +17 -18
- data/test/test_DaylightSavings.rb +118 -0
- data/test/test_Handler.rb +37 -38
- data/test/test_Numerizer.rb +8 -5
- data/test/test_RepeaterDayName.rb +15 -16
- data/test/test_RepeaterFortnight.rb +16 -17
- data/test/test_RepeaterHour.rb +18 -19
- data/test/test_RepeaterMinute.rb +34 -0
- data/test/test_RepeaterMonth.rb +16 -17
- data/test/test_RepeaterMonthName.rb +17 -18
- data/test/test_RepeaterTime.rb +20 -22
- data/test/test_RepeaterWeek.rb +16 -17
- data/test/test_RepeaterWeekday.rb +55 -0
- data/test/test_RepeaterWeekend.rb +21 -22
- data/test/test_RepeaterYear.rb +17 -18
- data/test/test_Span.rb +5 -6
- data/test/test_Time.rb +11 -12
- data/test/test_Token.rb +5 -6
- data/test/test_parsing.rb +314 -196
- metadata +74 -49
- data/History.txt +0 -49
- data/README.txt +0 -149
- data/test/suite.rb +0 -9
data/test/test_parsing.rb
CHANGED
|
@@ -1,592 +1,710 @@
|
|
|
1
|
-
require
|
|
2
|
-
require 'test/unit'
|
|
1
|
+
require File.join(File.dirname(__FILE__), *%w[helper])
|
|
3
2
|
|
|
4
3
|
class TestParsing < Test::Unit::TestCase
|
|
5
4
|
# Wed Aug 16 14:00:00 UTC 2006
|
|
6
5
|
TIME_2006_08_16_14_00_00 = Time.local(2006, 8, 16, 14, 0, 0, 0)
|
|
7
|
-
|
|
6
|
+
|
|
8
7
|
def setup
|
|
9
8
|
@time_2006_08_16_14_00_00 = TIME_2006_08_16_14_00_00
|
|
10
9
|
end
|
|
11
|
-
|
|
10
|
+
|
|
12
11
|
def test_parse_guess_dates
|
|
13
12
|
# rm_sd
|
|
14
13
|
|
|
15
14
|
time = parse_now("may 27")
|
|
16
15
|
assert_equal Time.local(2007, 5, 27, 12), time
|
|
17
|
-
|
|
16
|
+
|
|
18
17
|
time = parse_now("may 28", :context => :past)
|
|
19
18
|
assert_equal Time.local(2006, 5, 28, 12), time
|
|
20
|
-
|
|
19
|
+
|
|
21
20
|
time = parse_now("may 28 5pm", :context => :past)
|
|
22
21
|
assert_equal Time.local(2006, 5, 28, 17), time
|
|
23
|
-
|
|
22
|
+
|
|
24
23
|
time = parse_now("may 28 at 5pm", :context => :past)
|
|
25
24
|
assert_equal Time.local(2006, 5, 28, 17), time
|
|
26
|
-
|
|
25
|
+
|
|
27
26
|
time = parse_now("may 28 at 5:32.19pm", :context => :past)
|
|
28
27
|
assert_equal Time.local(2006, 5, 28, 17, 32, 19), time
|
|
29
|
-
|
|
28
|
+
|
|
29
|
+
# rm_sd_on
|
|
30
|
+
|
|
31
|
+
time = parse_now("5pm on may 28")
|
|
32
|
+
assert_equal Time.local(2007, 5, 28, 17), time
|
|
33
|
+
|
|
34
|
+
time = parse_now("5pm may 28")
|
|
35
|
+
assert_equal Time.local(2007, 5, 28, 17), time
|
|
36
|
+
|
|
37
|
+
time = parse_now("5 on may 28", :ambiguous_time_range => :none)
|
|
38
|
+
assert_equal Time.local(2007, 5, 28, 05), time
|
|
39
|
+
|
|
30
40
|
# rm_od
|
|
31
|
-
|
|
41
|
+
|
|
32
42
|
time = parse_now("may 27th")
|
|
33
43
|
assert_equal Time.local(2007, 5, 27, 12), time
|
|
34
|
-
|
|
44
|
+
|
|
35
45
|
time = parse_now("may 27th", :context => :past)
|
|
36
46
|
assert_equal Time.local(2006, 5, 27, 12), time
|
|
37
|
-
|
|
47
|
+
|
|
38
48
|
time = parse_now("may 27th 5:00 pm", :context => :past)
|
|
39
49
|
assert_equal Time.local(2006, 5, 27, 17), time
|
|
40
|
-
|
|
50
|
+
|
|
41
51
|
time = parse_now("may 27th at 5pm", :context => :past)
|
|
42
52
|
assert_equal Time.local(2006, 5, 27, 17), time
|
|
43
|
-
|
|
53
|
+
|
|
44
54
|
time = parse_now("may 27th at 5", :ambiguous_time_range => :none)
|
|
45
55
|
assert_equal Time.local(2007, 5, 27, 5), time
|
|
46
|
-
|
|
56
|
+
|
|
57
|
+
# rm_od_on
|
|
58
|
+
|
|
59
|
+
time = parse_now("5:00 pm may 27th", :context => :past)
|
|
60
|
+
assert_equal Time.local(2006, 5, 27, 17), time
|
|
61
|
+
|
|
62
|
+
time = parse_now("5pm on may 27th", :context => :past)
|
|
63
|
+
assert_equal Time.local(2006, 5, 27, 17), time
|
|
64
|
+
|
|
65
|
+
time = parse_now("5 on may 27th", :ambiguous_time_range => :none)
|
|
66
|
+
assert_equal Time.local(2007, 5, 27, 5), time
|
|
67
|
+
|
|
47
68
|
# rm_sy
|
|
48
|
-
|
|
69
|
+
|
|
49
70
|
time = parse_now("June 1979")
|
|
50
71
|
assert_equal Time.local(1979, 6, 16, 0), time
|
|
51
|
-
|
|
72
|
+
|
|
52
73
|
time = parse_now("dec 79")
|
|
53
74
|
assert_equal Time.local(1979, 12, 16, 12), time
|
|
54
|
-
|
|
75
|
+
|
|
55
76
|
# rm_sd_sy
|
|
56
|
-
|
|
77
|
+
|
|
57
78
|
time = parse_now("jan 3 2010")
|
|
58
79
|
assert_equal Time.local(2010, 1, 3, 12), time
|
|
59
|
-
|
|
80
|
+
|
|
60
81
|
time = parse_now("jan 3 2010 midnight")
|
|
61
82
|
assert_equal Time.local(2010, 1, 4, 0), time
|
|
62
|
-
|
|
83
|
+
|
|
63
84
|
time = parse_now("jan 3 2010 at midnight")
|
|
64
85
|
assert_equal Time.local(2010, 1, 4, 0), time
|
|
65
|
-
|
|
86
|
+
|
|
66
87
|
time = parse_now("jan 3 2010 at 4", :ambiguous_time_range => :none)
|
|
67
88
|
assert_equal Time.local(2010, 1, 3, 4), time
|
|
68
|
-
|
|
89
|
+
|
|
69
90
|
#time = parse_now("January 12, '00")
|
|
70
91
|
#assert_equal Time.local(2000, 1, 12, 12), time
|
|
71
|
-
|
|
92
|
+
|
|
93
|
+
time = parse_now("may 27, 1979")
|
|
94
|
+
assert_equal Time.local(1979, 5, 27, 12), time
|
|
95
|
+
|
|
72
96
|
time = parse_now("may 27 79")
|
|
73
97
|
assert_equal Time.local(1979, 5, 27, 12), time
|
|
74
|
-
|
|
98
|
+
|
|
75
99
|
time = parse_now("may 27 79 4:30")
|
|
76
100
|
assert_equal Time.local(1979, 5, 27, 16, 30), time
|
|
77
|
-
|
|
101
|
+
|
|
78
102
|
time = parse_now("may 27 79 at 4:30", :ambiguous_time_range => :none)
|
|
79
103
|
assert_equal Time.local(1979, 5, 27, 4, 30), time
|
|
80
|
-
|
|
104
|
+
|
|
81
105
|
# sd_rm_sy
|
|
82
106
|
|
|
83
107
|
time = parse_now("3 jan 2010")
|
|
84
108
|
assert_equal Time.local(2010, 1, 3, 12), time
|
|
85
|
-
|
|
109
|
+
|
|
86
110
|
time = parse_now("3 jan 2010 4pm")
|
|
87
111
|
assert_equal Time.local(2010, 1, 3, 16), time
|
|
88
|
-
|
|
112
|
+
|
|
113
|
+
time = parse_now("27 Oct 2006 7:30pm")
|
|
114
|
+
assert_equal Time.local(2006, 10, 27, 19, 30), time
|
|
115
|
+
|
|
89
116
|
# sm_sd_sy
|
|
90
|
-
|
|
117
|
+
|
|
91
118
|
time = parse_now("5/27/1979")
|
|
92
119
|
assert_equal Time.local(1979, 5, 27, 12), time
|
|
93
|
-
|
|
120
|
+
|
|
94
121
|
time = parse_now("5/27/1979 4am")
|
|
95
122
|
assert_equal Time.local(1979, 5, 27, 4), time
|
|
96
|
-
|
|
123
|
+
|
|
97
124
|
# sd_sm_sy
|
|
98
|
-
|
|
125
|
+
|
|
99
126
|
time = parse_now("27/5/1979")
|
|
100
127
|
assert_equal Time.local(1979, 5, 27, 12), time
|
|
101
|
-
|
|
128
|
+
|
|
102
129
|
time = parse_now("27/5/1979 @ 0700")
|
|
103
130
|
assert_equal Time.local(1979, 5, 27, 7), time
|
|
104
|
-
|
|
131
|
+
|
|
105
132
|
# sm_sy
|
|
106
|
-
|
|
133
|
+
|
|
107
134
|
time = parse_now("05/06")
|
|
108
135
|
assert_equal Time.local(2006, 5, 16, 12), time
|
|
109
|
-
|
|
136
|
+
|
|
110
137
|
time = parse_now("12/06")
|
|
111
138
|
assert_equal Time.local(2006, 12, 16, 12), time
|
|
112
|
-
|
|
139
|
+
|
|
113
140
|
time = parse_now("13/06")
|
|
114
141
|
assert_equal nil, time
|
|
115
|
-
|
|
142
|
+
|
|
116
143
|
# sy_sm_sd
|
|
117
|
-
|
|
144
|
+
|
|
118
145
|
time = parse_now("2000-1-1")
|
|
119
146
|
assert_equal Time.local(2000, 1, 1, 12), time
|
|
120
|
-
|
|
147
|
+
|
|
121
148
|
time = parse_now("2006-08-20")
|
|
122
149
|
assert_equal Time.local(2006, 8, 20, 12), time
|
|
123
|
-
|
|
150
|
+
|
|
124
151
|
time = parse_now("2006-08-20 7pm")
|
|
125
152
|
assert_equal Time.local(2006, 8, 20, 19), time
|
|
126
|
-
|
|
153
|
+
|
|
127
154
|
time = parse_now("2006-08-20 03:00")
|
|
128
155
|
assert_equal Time.local(2006, 8, 20, 3), time
|
|
129
|
-
|
|
156
|
+
|
|
130
157
|
time = parse_now("2006-08-20 03:30:30")
|
|
131
158
|
assert_equal Time.local(2006, 8, 20, 3, 30, 30), time
|
|
132
|
-
|
|
159
|
+
|
|
133
160
|
time = parse_now("2006-08-20 15:30:30")
|
|
134
161
|
assert_equal Time.local(2006, 8, 20, 15, 30, 30), time
|
|
135
|
-
|
|
162
|
+
|
|
136
163
|
time = parse_now("2006-08-20 15:30.30")
|
|
137
164
|
assert_equal Time.local(2006, 8, 20, 15, 30, 30), time
|
|
138
|
-
|
|
165
|
+
|
|
139
166
|
# rdn_rm_rd_rt_rtz_ry
|
|
140
|
-
|
|
167
|
+
|
|
141
168
|
time = parse_now("Mon Apr 02 17:00:00 PDT 2007")
|
|
142
|
-
assert_equal
|
|
143
|
-
|
|
169
|
+
assert_equal 1175558400, time.to_i
|
|
170
|
+
|
|
144
171
|
now = Time.now
|
|
145
172
|
time = parse_now(now.to_s)
|
|
146
173
|
assert_equal now.to_s, time.to_s
|
|
147
|
-
|
|
174
|
+
|
|
148
175
|
# rm_sd_rt
|
|
149
|
-
|
|
176
|
+
|
|
150
177
|
#time = parse_now("jan 5 13:00")
|
|
151
178
|
#assert_equal Time.local(2007, 1, 5, 13), time
|
|
152
|
-
|
|
153
|
-
#
|
|
154
|
-
|
|
179
|
+
|
|
180
|
+
# old dates
|
|
181
|
+
|
|
155
182
|
time = parse_now("may 40")
|
|
156
|
-
assert_equal
|
|
157
|
-
|
|
183
|
+
assert_equal Time.local(40, 5, 16, 12, 0, 0), time
|
|
184
|
+
|
|
158
185
|
time = parse_now("may 27 40")
|
|
159
|
-
assert_equal
|
|
160
|
-
|
|
186
|
+
assert_equal Time.local(40, 5, 27, 12, 0, 0), time
|
|
187
|
+
|
|
161
188
|
time = parse_now("1800-08-20")
|
|
162
|
-
assert_equal
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
def test_foo
|
|
166
|
-
Chronic.parse('two months ago this friday')
|
|
189
|
+
assert_equal Time.local(1800, 8, 20, 12, 0, 0), time
|
|
167
190
|
end
|
|
168
191
|
|
|
169
192
|
def test_parse_guess_r
|
|
170
193
|
time = parse_now("friday")
|
|
171
194
|
assert_equal Time.local(2006, 8, 18, 12), time
|
|
172
|
-
|
|
195
|
+
|
|
173
196
|
time = parse_now("tue")
|
|
174
197
|
assert_equal Time.local(2006, 8, 22, 12), time
|
|
175
|
-
|
|
198
|
+
|
|
176
199
|
time = parse_now("5")
|
|
177
200
|
assert_equal Time.local(2006, 8, 16, 17), time
|
|
178
|
-
|
|
201
|
+
|
|
179
202
|
time = Chronic.parse("5", :now => Time.local(2006, 8, 16, 3, 0, 0, 0), :ambiguous_time_range => :none)
|
|
180
203
|
assert_equal Time.local(2006, 8, 16, 5), time
|
|
181
|
-
|
|
204
|
+
|
|
182
205
|
time = parse_now("13:00")
|
|
183
206
|
assert_equal Time.local(2006, 8, 17, 13), time
|
|
184
|
-
|
|
207
|
+
|
|
185
208
|
time = parse_now("13:45")
|
|
186
209
|
assert_equal Time.local(2006, 8, 17, 13, 45), time
|
|
187
|
-
|
|
210
|
+
|
|
188
211
|
time = parse_now("november")
|
|
189
212
|
assert_equal Time.local(2006, 11, 16), time
|
|
190
213
|
end
|
|
191
|
-
|
|
214
|
+
|
|
192
215
|
def test_parse_guess_rr
|
|
193
216
|
time = parse_now("friday 13:00")
|
|
194
217
|
assert_equal Time.local(2006, 8, 18, 13), time
|
|
195
|
-
|
|
218
|
+
|
|
196
219
|
time = parse_now("monday 4:00")
|
|
197
220
|
assert_equal Time.local(2006, 8, 21, 16), time
|
|
198
|
-
|
|
221
|
+
|
|
199
222
|
time = parse_now("sat 4:00", :ambiguous_time_range => :none)
|
|
200
223
|
assert_equal Time.local(2006, 8, 19, 4), time
|
|
201
|
-
|
|
224
|
+
|
|
202
225
|
time = parse_now("sunday 4:20", :ambiguous_time_range => :none)
|
|
203
226
|
assert_equal Time.local(2006, 8, 20, 4, 20), time
|
|
204
|
-
|
|
227
|
+
|
|
205
228
|
time = parse_now("4 pm")
|
|
206
229
|
assert_equal Time.local(2006, 8, 16, 16), time
|
|
207
|
-
|
|
230
|
+
|
|
208
231
|
time = parse_now("4 am", :ambiguous_time_range => :none)
|
|
209
232
|
assert_equal Time.local(2006, 8, 16, 4), time
|
|
210
|
-
|
|
233
|
+
|
|
234
|
+
time = parse_now("12 pm")
|
|
235
|
+
assert_equal Time.local(2006, 8, 16, 12), time
|
|
236
|
+
|
|
237
|
+
time = parse_now("12:01 pm")
|
|
238
|
+
assert_equal Time.local(2006, 8, 16, 12, 1), time
|
|
239
|
+
|
|
240
|
+
time = parse_now("12:01 am")
|
|
241
|
+
assert_equal Time.local(2006, 8, 16, 0, 1), time
|
|
242
|
+
|
|
243
|
+
time = parse_now("12 am")
|
|
244
|
+
assert_equal Time.local(2006, 8, 16), time
|
|
245
|
+
|
|
211
246
|
time = parse_now("4:00 in the morning")
|
|
212
247
|
assert_equal Time.local(2006, 8, 16, 4), time
|
|
213
|
-
|
|
248
|
+
|
|
214
249
|
time = parse_now("november 4")
|
|
215
250
|
assert_equal Time.local(2006, 11, 4, 12), time
|
|
216
|
-
|
|
251
|
+
|
|
217
252
|
time = parse_now("aug 24")
|
|
218
253
|
assert_equal Time.local(2006, 8, 24, 12), time
|
|
219
254
|
end
|
|
220
|
-
|
|
255
|
+
|
|
221
256
|
def test_parse_guess_rrr
|
|
222
257
|
time = parse_now("friday 1 pm")
|
|
223
258
|
assert_equal Time.local(2006, 8, 18, 13), time
|
|
224
|
-
|
|
259
|
+
|
|
225
260
|
time = parse_now("friday 11 at night")
|
|
226
261
|
assert_equal Time.local(2006, 8, 18, 23), time
|
|
227
|
-
|
|
262
|
+
|
|
228
263
|
time = parse_now("friday 11 in the evening")
|
|
229
264
|
assert_equal Time.local(2006, 8, 18, 23), time
|
|
230
|
-
|
|
265
|
+
|
|
231
266
|
time = parse_now("sunday 6am")
|
|
232
267
|
assert_equal Time.local(2006, 8, 20, 6), time
|
|
233
|
-
|
|
268
|
+
|
|
234
269
|
time = parse_now("friday evening at 7")
|
|
235
270
|
assert_equal Time.local(2006, 8, 18, 19), time
|
|
236
271
|
end
|
|
237
|
-
|
|
272
|
+
|
|
238
273
|
def test_parse_guess_gr
|
|
239
274
|
# year
|
|
240
|
-
|
|
275
|
+
|
|
241
276
|
time = parse_now("this year")
|
|
242
277
|
assert_equal Time.local(2006, 10, 24, 12, 30), time
|
|
243
|
-
|
|
278
|
+
|
|
244
279
|
time = parse_now("this year", :context => :past)
|
|
245
280
|
assert_equal Time.local(2006, 4, 24, 12, 30), time
|
|
246
|
-
|
|
281
|
+
|
|
247
282
|
# month
|
|
248
|
-
|
|
283
|
+
|
|
249
284
|
time = parse_now("this month")
|
|
250
285
|
assert_equal Time.local(2006, 8, 24, 12), time
|
|
251
|
-
|
|
286
|
+
|
|
252
287
|
time = parse_now("this month", :context => :past)
|
|
253
288
|
assert_equal Time.local(2006, 8, 8, 12), time
|
|
254
|
-
|
|
289
|
+
|
|
255
290
|
time = Chronic.parse("next month", :now => Time.local(2006, 11, 15))
|
|
256
291
|
assert_equal Time.local(2006, 12, 16, 12), time
|
|
257
|
-
|
|
292
|
+
|
|
258
293
|
# month name
|
|
259
|
-
|
|
294
|
+
|
|
260
295
|
time = parse_now("last november")
|
|
261
296
|
assert_equal Time.local(2005, 11, 16), time
|
|
262
|
-
|
|
297
|
+
|
|
263
298
|
# fortnight
|
|
264
|
-
|
|
299
|
+
|
|
265
300
|
time = parse_now("this fortnight")
|
|
266
301
|
assert_equal Time.local(2006, 8, 21, 19, 30), time
|
|
267
|
-
|
|
302
|
+
|
|
268
303
|
time = parse_now("this fortnight", :context => :past)
|
|
269
304
|
assert_equal Time.local(2006, 8, 14, 19), time
|
|
270
|
-
|
|
305
|
+
|
|
271
306
|
# week
|
|
272
|
-
|
|
307
|
+
|
|
273
308
|
time = parse_now("this week")
|
|
274
309
|
assert_equal Time.local(2006, 8, 18, 7, 30), time
|
|
275
|
-
|
|
310
|
+
|
|
276
311
|
time = parse_now("this week", :context => :past)
|
|
277
312
|
assert_equal Time.local(2006, 8, 14, 19), time
|
|
278
|
-
|
|
313
|
+
|
|
279
314
|
# weekend
|
|
280
|
-
|
|
315
|
+
|
|
281
316
|
time = parse_now("this weekend")
|
|
282
317
|
assert_equal Time.local(2006, 8, 20), time
|
|
283
|
-
|
|
318
|
+
|
|
284
319
|
time = parse_now("this weekend", :context => :past)
|
|
285
320
|
assert_equal Time.local(2006, 8, 13), time
|
|
286
|
-
|
|
321
|
+
|
|
287
322
|
time = parse_now("last weekend")
|
|
288
323
|
assert_equal Time.local(2006, 8, 13), time
|
|
289
|
-
|
|
324
|
+
|
|
290
325
|
# day
|
|
291
|
-
|
|
326
|
+
|
|
292
327
|
time = parse_now("this day")
|
|
293
328
|
assert_equal Time.local(2006, 8, 16, 19, 30), time
|
|
294
|
-
|
|
329
|
+
|
|
295
330
|
time = parse_now("this day", :context => :past)
|
|
296
331
|
assert_equal Time.local(2006, 8, 16, 7), time
|
|
297
|
-
|
|
332
|
+
|
|
298
333
|
time = parse_now("today")
|
|
299
334
|
assert_equal Time.local(2006, 8, 16, 19, 30), time
|
|
300
|
-
|
|
335
|
+
|
|
301
336
|
time = parse_now("yesterday")
|
|
302
337
|
assert_equal Time.local(2006, 8, 15, 12), time
|
|
303
|
-
|
|
338
|
+
|
|
304
339
|
time = parse_now("tomorrow")
|
|
305
340
|
assert_equal Time.local(2006, 8, 17, 12), time
|
|
306
|
-
|
|
341
|
+
|
|
307
342
|
# day name
|
|
308
|
-
|
|
343
|
+
|
|
309
344
|
time = parse_now("this tuesday")
|
|
310
345
|
assert_equal Time.local(2006, 8, 22, 12), time
|
|
311
|
-
|
|
346
|
+
|
|
312
347
|
time = parse_now("next tuesday")
|
|
313
348
|
assert_equal Time.local(2006, 8, 22, 12), time
|
|
314
|
-
|
|
349
|
+
|
|
315
350
|
time = parse_now("last tuesday")
|
|
316
351
|
assert_equal Time.local(2006, 8, 15, 12), time
|
|
317
|
-
|
|
352
|
+
|
|
318
353
|
time = parse_now("this wed")
|
|
319
354
|
assert_equal Time.local(2006, 8, 23, 12), time
|
|
320
|
-
|
|
355
|
+
|
|
321
356
|
time = parse_now("next wed")
|
|
322
357
|
assert_equal Time.local(2006, 8, 23, 12), time
|
|
323
|
-
|
|
358
|
+
|
|
324
359
|
time = parse_now("last wed")
|
|
325
360
|
assert_equal Time.local(2006, 8, 9, 12), time
|
|
326
|
-
|
|
361
|
+
|
|
327
362
|
# day portion
|
|
328
|
-
|
|
363
|
+
|
|
329
364
|
time = parse_now("this morning")
|
|
330
365
|
assert_equal Time.local(2006, 8, 16, 9), time
|
|
331
|
-
|
|
366
|
+
|
|
332
367
|
time = parse_now("tonight")
|
|
333
368
|
assert_equal Time.local(2006, 8, 16, 22), time
|
|
334
|
-
|
|
369
|
+
|
|
335
370
|
# minute
|
|
336
|
-
|
|
371
|
+
|
|
337
372
|
time = parse_now("next minute")
|
|
338
373
|
assert_equal Time.local(2006, 8, 16, 14, 1, 30), time
|
|
339
|
-
|
|
374
|
+
|
|
340
375
|
# second
|
|
341
|
-
|
|
376
|
+
|
|
342
377
|
time = parse_now("this second")
|
|
343
378
|
assert_equal Time.local(2006, 8, 16, 14), time
|
|
344
|
-
|
|
379
|
+
|
|
345
380
|
time = parse_now("this second", :context => :past)
|
|
346
381
|
assert_equal Time.local(2006, 8, 16, 14), time
|
|
347
|
-
|
|
382
|
+
|
|
348
383
|
time = parse_now("next second")
|
|
349
384
|
assert_equal Time.local(2006, 8, 16, 14, 0, 1), time
|
|
350
|
-
|
|
385
|
+
|
|
351
386
|
time = parse_now("last second")
|
|
352
387
|
assert_equal Time.local(2006, 8, 16, 13, 59, 59), time
|
|
353
388
|
end
|
|
354
|
-
|
|
355
|
-
def test_parse_guess_grr
|
|
389
|
+
|
|
390
|
+
def test_parse_guess_grr
|
|
356
391
|
time = parse_now("yesterday at 4:00")
|
|
357
392
|
assert_equal Time.local(2006, 8, 15, 16), time
|
|
358
|
-
|
|
393
|
+
|
|
359
394
|
time = parse_now("today at 9:00")
|
|
360
395
|
assert_equal Time.local(2006, 8, 16, 9), time
|
|
361
|
-
|
|
396
|
+
|
|
362
397
|
time = parse_now("today at 2100")
|
|
363
398
|
assert_equal Time.local(2006, 8, 16, 21), time
|
|
364
|
-
|
|
399
|
+
|
|
365
400
|
time = parse_now("this day at 0900")
|
|
366
401
|
assert_equal Time.local(2006, 8, 16, 9), time
|
|
367
|
-
|
|
402
|
+
|
|
368
403
|
time = parse_now("tomorrow at 0900")
|
|
369
404
|
assert_equal Time.local(2006, 8, 17, 9), time
|
|
370
|
-
|
|
405
|
+
|
|
371
406
|
time = parse_now("yesterday at 4:00", :ambiguous_time_range => :none)
|
|
372
407
|
assert_equal Time.local(2006, 8, 15, 4), time
|
|
373
|
-
|
|
408
|
+
|
|
374
409
|
time = parse_now("last friday at 4:00")
|
|
375
410
|
assert_equal Time.local(2006, 8, 11, 16), time
|
|
376
|
-
|
|
411
|
+
|
|
377
412
|
time = parse_now("next wed 4:00")
|
|
378
413
|
assert_equal Time.local(2006, 8, 23, 16), time
|
|
379
|
-
|
|
414
|
+
|
|
380
415
|
time = parse_now("yesterday afternoon")
|
|
381
416
|
assert_equal Time.local(2006, 8, 15, 15), time
|
|
382
|
-
|
|
417
|
+
|
|
383
418
|
time = parse_now("last week tuesday")
|
|
384
419
|
assert_equal Time.local(2006, 8, 8, 12), time
|
|
385
|
-
|
|
420
|
+
|
|
386
421
|
time = parse_now("tonight at 7")
|
|
387
422
|
assert_equal Time.local(2006, 8, 16, 19), time
|
|
388
|
-
|
|
423
|
+
|
|
389
424
|
time = parse_now("tonight 7")
|
|
390
425
|
assert_equal Time.local(2006, 8, 16, 19), time
|
|
391
|
-
|
|
426
|
+
|
|
392
427
|
time = parse_now("7 tonight")
|
|
393
428
|
assert_equal Time.local(2006, 8, 16, 19), time
|
|
394
429
|
end
|
|
395
|
-
|
|
430
|
+
|
|
396
431
|
def test_parse_guess_grrr
|
|
397
432
|
time = parse_now("today at 6:00pm")
|
|
398
433
|
assert_equal Time.local(2006, 8, 16, 18), time
|
|
399
|
-
|
|
434
|
+
|
|
400
435
|
time = parse_now("today at 6:00am")
|
|
401
436
|
assert_equal Time.local(2006, 8, 16, 6), time
|
|
402
|
-
|
|
437
|
+
|
|
403
438
|
time = parse_now("this day 1800")
|
|
404
439
|
assert_equal Time.local(2006, 8, 16, 18), time
|
|
405
|
-
|
|
440
|
+
|
|
406
441
|
time = parse_now("yesterday at 4:00pm")
|
|
407
442
|
assert_equal Time.local(2006, 8, 15, 16), time
|
|
408
|
-
|
|
443
|
+
|
|
409
444
|
time = parse_now("tomorrow evening at 7")
|
|
410
445
|
assert_equal Time.local(2006, 8, 17, 19), time
|
|
411
|
-
|
|
446
|
+
|
|
412
447
|
time = parse_now("tomorrow morning at 5:30")
|
|
413
448
|
assert_equal Time.local(2006, 8, 17, 5, 30), time
|
|
449
|
+
|
|
450
|
+
time = parse_now("next monday at 12:01 am")
|
|
451
|
+
assert_equal Time.local(2006, 8, 21, 00, 1), time
|
|
452
|
+
|
|
453
|
+
time = parse_now("next monday at 12:01 pm")
|
|
454
|
+
assert_equal Time.local(2006, 8, 21, 12, 1), time
|
|
414
455
|
end
|
|
415
|
-
|
|
456
|
+
|
|
416
457
|
def test_parse_guess_rgr
|
|
417
458
|
time = parse_now("afternoon yesterday")
|
|
418
459
|
assert_equal Time.local(2006, 8, 15, 15), time
|
|
419
|
-
|
|
460
|
+
|
|
420
461
|
time = parse_now("tuesday last week")
|
|
421
462
|
assert_equal Time.local(2006, 8, 8, 12), time
|
|
422
463
|
end
|
|
423
|
-
|
|
464
|
+
|
|
424
465
|
def test_parse_guess_s_r_p
|
|
425
466
|
# past
|
|
426
|
-
|
|
467
|
+
|
|
427
468
|
time = parse_now("3 years ago")
|
|
428
469
|
assert_equal Time.local(2003, 8, 16, 14), time
|
|
429
|
-
|
|
470
|
+
|
|
430
471
|
time = parse_now("1 month ago")
|
|
431
472
|
assert_equal Time.local(2006, 7, 16, 14), time
|
|
432
|
-
|
|
473
|
+
|
|
433
474
|
time = parse_now("1 fortnight ago")
|
|
434
475
|
assert_equal Time.local(2006, 8, 2, 14), time
|
|
435
|
-
|
|
476
|
+
|
|
436
477
|
time = parse_now("2 fortnights ago")
|
|
437
478
|
assert_equal Time.local(2006, 7, 19, 14), time
|
|
438
|
-
|
|
479
|
+
|
|
439
480
|
time = parse_now("3 weeks ago")
|
|
440
481
|
assert_equal Time.local(2006, 7, 26, 14), time
|
|
441
|
-
|
|
482
|
+
|
|
442
483
|
time = parse_now("2 weekends ago")
|
|
443
484
|
assert_equal Time.local(2006, 8, 5), time
|
|
444
|
-
|
|
485
|
+
|
|
445
486
|
time = parse_now("3 days ago")
|
|
446
487
|
assert_equal Time.local(2006, 8, 13, 14), time
|
|
447
|
-
|
|
488
|
+
|
|
448
489
|
#time = parse_now("1 monday ago")
|
|
449
490
|
#assert_equal Time.local(2006, 8, 14, 12), time
|
|
450
|
-
|
|
491
|
+
|
|
451
492
|
time = parse_now("5 mornings ago")
|
|
452
493
|
assert_equal Time.local(2006, 8, 12, 9), time
|
|
453
|
-
|
|
494
|
+
|
|
454
495
|
time = parse_now("7 hours ago")
|
|
455
496
|
assert_equal Time.local(2006, 8, 16, 7), time
|
|
456
|
-
|
|
497
|
+
|
|
457
498
|
time = parse_now("3 minutes ago")
|
|
458
499
|
assert_equal Time.local(2006, 8, 16, 13, 57), time
|
|
459
|
-
|
|
500
|
+
|
|
460
501
|
time = parse_now("20 seconds before now")
|
|
461
502
|
assert_equal Time.local(2006, 8, 16, 13, 59, 40), time
|
|
462
503
|
|
|
463
504
|
# future
|
|
464
|
-
|
|
505
|
+
|
|
465
506
|
time = parse_now("3 years from now")
|
|
466
507
|
assert_equal Time.local(2009, 8, 16, 14, 0, 0), time
|
|
467
|
-
|
|
508
|
+
|
|
468
509
|
time = parse_now("6 months hence")
|
|
469
510
|
assert_equal Time.local(2007, 2, 16, 14), time
|
|
470
|
-
|
|
511
|
+
|
|
471
512
|
time = parse_now("3 fortnights hence")
|
|
472
513
|
assert_equal Time.local(2006, 9, 27, 14), time
|
|
473
|
-
|
|
514
|
+
|
|
474
515
|
time = parse_now("1 week from now")
|
|
475
516
|
assert_equal Time.local(2006, 8, 23, 14, 0, 0), time
|
|
476
|
-
|
|
517
|
+
|
|
477
518
|
time = parse_now("1 weekend from now")
|
|
478
519
|
assert_equal Time.local(2006, 8, 19), time
|
|
479
|
-
|
|
520
|
+
|
|
480
521
|
time = parse_now("2 weekends from now")
|
|
481
522
|
assert_equal Time.local(2006, 8, 26), time
|
|
482
|
-
|
|
523
|
+
|
|
483
524
|
time = parse_now("1 day hence")
|
|
484
525
|
assert_equal Time.local(2006, 8, 17, 14), time
|
|
485
|
-
|
|
526
|
+
|
|
486
527
|
time = parse_now("5 mornings hence")
|
|
487
528
|
assert_equal Time.local(2006, 8, 21, 9), time
|
|
488
|
-
|
|
529
|
+
|
|
489
530
|
time = parse_now("1 hour from now")
|
|
490
531
|
assert_equal Time.local(2006, 8, 16, 15), time
|
|
491
|
-
|
|
532
|
+
|
|
492
533
|
time = parse_now("20 minutes hence")
|
|
493
534
|
assert_equal Time.local(2006, 8, 16, 14, 20), time
|
|
494
|
-
|
|
535
|
+
|
|
495
536
|
time = parse_now("20 seconds from now")
|
|
496
537
|
assert_equal Time.local(2006, 8, 16, 14, 0, 20), time
|
|
497
|
-
|
|
538
|
+
|
|
498
539
|
time = Chronic.parse("2 months ago", :now => Time.parse("2007-03-07 23:30"))
|
|
499
540
|
assert_equal Time.local(2007, 1, 7, 23, 30), time
|
|
500
541
|
end
|
|
501
|
-
|
|
542
|
+
|
|
502
543
|
def test_parse_guess_p_s_r
|
|
503
544
|
time = parse_now("in 3 hours")
|
|
504
545
|
assert_equal Time.local(2006, 8, 16, 17), time
|
|
505
546
|
end
|
|
506
|
-
|
|
547
|
+
|
|
507
548
|
def test_parse_guess_s_r_p_a
|
|
508
549
|
# past
|
|
509
|
-
|
|
550
|
+
|
|
510
551
|
time = parse_now("3 years ago tomorrow")
|
|
511
552
|
assert_equal Time.local(2003, 8, 17, 12), time
|
|
512
|
-
|
|
553
|
+
|
|
513
554
|
time = parse_now("3 years ago this friday")
|
|
514
555
|
assert_equal Time.local(2003, 8, 18, 12), time
|
|
515
|
-
|
|
556
|
+
|
|
516
557
|
time = parse_now("3 months ago saturday at 5:00 pm")
|
|
517
558
|
assert_equal Time.local(2006, 5, 19, 17), time
|
|
518
|
-
|
|
559
|
+
|
|
519
560
|
time = parse_now("2 days from this second")
|
|
520
561
|
assert_equal Time.local(2006, 8, 18, 14), time
|
|
521
|
-
|
|
562
|
+
|
|
522
563
|
time = parse_now("7 hours before tomorrow at midnight")
|
|
523
564
|
assert_equal Time.local(2006, 8, 17, 17), time
|
|
524
|
-
|
|
565
|
+
|
|
525
566
|
# future
|
|
526
567
|
end
|
|
527
|
-
|
|
568
|
+
|
|
528
569
|
def test_parse_guess_o_r_s_r
|
|
529
570
|
time = parse_now("3rd wednesday in november")
|
|
530
571
|
assert_equal Time.local(2006, 11, 15, 12), time
|
|
531
|
-
|
|
572
|
+
|
|
532
573
|
time = parse_now("10th wednesday in november")
|
|
533
574
|
assert_equal nil, time
|
|
575
|
+
|
|
576
|
+
# time = parse_now("3rd wednesday in 2007")
|
|
577
|
+
# assert_equal Time.local(2007, 1, 20, 12), time
|
|
534
578
|
end
|
|
535
|
-
|
|
579
|
+
|
|
536
580
|
def test_parse_guess_o_r_g_r
|
|
537
581
|
time = parse_now("3rd month next year")
|
|
538
582
|
assert_equal Time.local(2007, 3, 16, 12, 30), time
|
|
539
|
-
|
|
583
|
+
|
|
540
584
|
time = parse_now("3rd thursday this september")
|
|
541
585
|
assert_equal Time.local(2006, 9, 21, 12), time
|
|
542
|
-
|
|
586
|
+
|
|
543
587
|
time = parse_now("4th day last week")
|
|
544
588
|
assert_equal Time.local(2006, 8, 9, 12), time
|
|
545
589
|
end
|
|
546
|
-
|
|
590
|
+
|
|
547
591
|
def test_parse_guess_nonsense
|
|
548
592
|
time = parse_now("some stupid nonsense")
|
|
549
593
|
assert_equal nil, time
|
|
594
|
+
|
|
595
|
+
time = parse_now("Ham Sandwich")
|
|
596
|
+
assert_equal nil, time
|
|
550
597
|
end
|
|
551
|
-
|
|
598
|
+
|
|
552
599
|
def test_parse_span
|
|
553
600
|
span = parse_now("friday", :guess => false)
|
|
554
601
|
assert_equal Time.local(2006, 8, 18), span.begin
|
|
555
602
|
assert_equal Time.local(2006, 8, 19), span.end
|
|
556
|
-
|
|
603
|
+
|
|
557
604
|
span = parse_now("november", :guess => false)
|
|
558
605
|
assert_equal Time.local(2006, 11), span.begin
|
|
559
606
|
assert_equal Time.local(2006, 12), span.end
|
|
560
|
-
|
|
607
|
+
|
|
561
608
|
span = Chronic.parse("weekend" , :now => @time_2006_08_16_14_00_00, :guess => false)
|
|
562
609
|
assert_equal Time.local(2006, 8, 19), span.begin
|
|
563
610
|
assert_equal Time.local(2006, 8, 21), span.end
|
|
564
611
|
end
|
|
565
|
-
|
|
612
|
+
|
|
613
|
+
def test_parse_with_endian_precedence
|
|
614
|
+
date = '11/02/2007'
|
|
615
|
+
|
|
616
|
+
expect_for_middle_endian = Time.local(2007, 11, 2, 12)
|
|
617
|
+
expect_for_little_endian = Time.local(2007, 2, 11, 12)
|
|
618
|
+
|
|
619
|
+
# default precedence should be toward middle endianness
|
|
620
|
+
assert_equal expect_for_middle_endian, Chronic.parse(date)
|
|
621
|
+
|
|
622
|
+
assert_equal expect_for_middle_endian, Chronic.parse(date, :endian_precedence => [:middle, :little])
|
|
623
|
+
|
|
624
|
+
assert_equal expect_for_little_endian, Chronic.parse(date, :endian_precedence => [:little, :middle])
|
|
625
|
+
end
|
|
626
|
+
|
|
566
627
|
def test_parse_words
|
|
567
628
|
assert_equal parse_now("33 days from now"), parse_now("thirty-three days from now")
|
|
568
629
|
assert_equal parse_now("2867532 seconds from now"), parse_now("two million eight hundred and sixty seven thousand five hundred and thirty two seconds from now")
|
|
569
630
|
assert_equal parse_now("may 10th"), parse_now("may tenth")
|
|
570
631
|
end
|
|
571
|
-
|
|
632
|
+
|
|
572
633
|
def test_parse_only_complete_pointers
|
|
573
634
|
assert_equal parse_now("eat pasty buns today at 2pm"), @time_2006_08_16_14_00_00
|
|
574
635
|
assert_equal parse_now("futuristically speaking today at 2pm"), @time_2006_08_16_14_00_00
|
|
575
636
|
assert_equal parse_now("meeting today at 2pm"), @time_2006_08_16_14_00_00
|
|
576
637
|
end
|
|
577
|
-
|
|
638
|
+
|
|
639
|
+
def test_am_pm
|
|
640
|
+
assert_equal Time.local(2006, 8, 16), parse_now("8/16/2006 at 12am")
|
|
641
|
+
assert_equal Time.local(2006, 8, 16, 12), parse_now("8/16/2006 at 12pm")
|
|
642
|
+
end
|
|
643
|
+
|
|
644
|
+
def test_a_p
|
|
645
|
+
assert_equal Time.local(2006, 8, 16, 0, 15), parse_now("8/16/2006 at 12:15a")
|
|
646
|
+
assert_equal Time.local(2006, 8, 16, 18, 30), parse_now("8/16/2006 at 6:30p")
|
|
647
|
+
end
|
|
648
|
+
|
|
578
649
|
def test_argument_validation
|
|
579
650
|
assert_raise(Chronic::InvalidArgumentException) do
|
|
580
651
|
time = Chronic.parse("may 27", :foo => :bar)
|
|
581
652
|
end
|
|
582
|
-
|
|
653
|
+
|
|
583
654
|
assert_raise(Chronic::InvalidArgumentException) do
|
|
584
655
|
time = Chronic.parse("may 27", :context => :bar)
|
|
585
656
|
end
|
|
586
657
|
end
|
|
587
|
-
|
|
658
|
+
|
|
659
|
+
def test_seasons
|
|
660
|
+
t = parse_now("this spring", :guess => false)
|
|
661
|
+
assert_equal Time.local(2007, 3, 20), t.begin
|
|
662
|
+
assert_equal Time.local(2007, 6, 20), t.end
|
|
663
|
+
|
|
664
|
+
t = parse_now("this winter", :guess => false)
|
|
665
|
+
assert_equal Time.local(2006, 12, 22, 23), t.begin
|
|
666
|
+
assert_equal Time.local(2007, 3, 19), t.end
|
|
667
|
+
|
|
668
|
+
t = parse_now("last spring", :guess => false)
|
|
669
|
+
assert_equal Time.local(2006, 3, 20, 23), t.begin
|
|
670
|
+
assert_equal Time.local(2006, 6, 20), t.end
|
|
671
|
+
|
|
672
|
+
t = parse_now("last winter", :guess => false)
|
|
673
|
+
assert_equal Time.local(2005, 12, 22, 23), t.begin
|
|
674
|
+
assert_equal Time.local(2006, 3, 19, 23), t.end
|
|
675
|
+
|
|
676
|
+
t = parse_now("next spring", :guess => false)
|
|
677
|
+
assert_equal Time.local(2007, 3, 20), t.begin
|
|
678
|
+
assert_equal Time.local(2007, 6, 20), t.end
|
|
679
|
+
end
|
|
680
|
+
|
|
681
|
+
# regression
|
|
682
|
+
|
|
683
|
+
# def test_partial
|
|
684
|
+
# assert_equal '', parse_now("2 hours")
|
|
685
|
+
# end
|
|
686
|
+
|
|
687
|
+
def test_days_in_november
|
|
688
|
+
t1 = Chronic.parse('1st thursday in november', :now => Time.local(2007))
|
|
689
|
+
assert_equal Time.local(2007, 11, 1, 12), t1
|
|
690
|
+
|
|
691
|
+
t1 = Chronic.parse('1st friday in november', :now => Time.local(2007))
|
|
692
|
+
assert_equal Time.local(2007, 11, 2, 12), t1
|
|
693
|
+
|
|
694
|
+
t1 = Chronic.parse('1st saturday in november', :now => Time.local(2007))
|
|
695
|
+
assert_equal Time.local(2007, 11, 3, 12), t1
|
|
696
|
+
|
|
697
|
+
t1 = Chronic.parse('1st sunday in november', :now => Time.local(2007))
|
|
698
|
+
assert_equal Time.local(2007, 11, 4, 11), t1
|
|
699
|
+
|
|
700
|
+
# Chronic.debug = true
|
|
701
|
+
#
|
|
702
|
+
# t1 = Chronic.parse('1st monday in november', :now => Time.local(2007))
|
|
703
|
+
# assert_equal Time.local(2007, 11, 5, 11), t1
|
|
704
|
+
end
|
|
705
|
+
|
|
588
706
|
private
|
|
589
707
|
def parse_now(string, options={})
|
|
590
708
|
Chronic.parse(string, {:now => TIME_2006_08_16_14_00_00 }.merge(options))
|
|
591
709
|
end
|
|
592
|
-
end
|
|
710
|
+
end
|