chronic 0.2.2 → 0.10.2
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.
- checksums.yaml +7 -0
- data/.gitignore +6 -0
- data/.travis.yml +8 -0
- data/HISTORY.md +243 -0
- data/LICENSE +21 -0
- data/README.md +182 -0
- data/Rakefile +62 -15
- data/chronic.gemspec +23 -0
- data/lib/chronic/date.rb +82 -0
- data/lib/chronic/grabber.rb +24 -17
- data/lib/chronic/handler.rb +97 -0
- data/lib/chronic/handlers.rb +490 -312
- data/lib/chronic/mini_date.rb +38 -0
- data/lib/chronic/numerizer.rb +130 -0
- data/lib/chronic/ordinal.rb +33 -24
- data/lib/chronic/parser.rb +268 -0
- data/lib/chronic/pointer.rb +22 -17
- data/lib/chronic/repeater.rb +137 -107
- data/lib/chronic/repeaters/repeater_day.rb +51 -44
- data/lib/chronic/repeaters/repeater_day_name.rb +50 -43
- data/lib/chronic/repeaters/repeater_day_portion.rb +97 -81
- data/lib/chronic/repeaters/repeater_fortnight.rb +61 -54
- data/lib/chronic/repeaters/repeater_hour.rb +51 -44
- data/lib/chronic/repeaters/repeater_minute.rb +51 -44
- data/lib/chronic/repeaters/repeater_month.rb +79 -60
- data/lib/chronic/repeaters/repeater_month_name.rb +85 -83
- data/lib/chronic/repeaters/repeater_season.rb +110 -22
- data/lib/chronic/repeaters/repeater_season_name.rb +41 -22
- data/lib/chronic/repeaters/repeater_second.rb +41 -34
- data/lib/chronic/repeaters/repeater_time.rb +128 -104
- data/lib/chronic/repeaters/repeater_week.rb +65 -58
- data/lib/chronic/repeaters/repeater_weekday.rb +86 -0
- data/lib/chronic/repeaters/repeater_weekend.rb +59 -52
- data/lib/chronic/repeaters/repeater_year.rb +72 -52
- data/lib/chronic/scalar.rb +53 -46
- data/lib/chronic/season.rb +26 -0
- data/lib/chronic/separator.rb +174 -43
- data/lib/chronic/sign.rb +49 -0
- data/lib/chronic/span.rb +31 -0
- data/lib/chronic/tag.rb +37 -0
- data/lib/chronic/time.rb +40 -0
- data/lib/chronic/time_zone.rb +21 -11
- data/lib/chronic/token.rb +51 -0
- data/lib/chronic.rb +94 -69
- data/test/helper.rb +12 -0
- data/test/test_chronic.rb +183 -0
- data/test/test_daylight_savings.rb +118 -0
- data/test/{test_Handler.rb → test_handler.rb} +73 -55
- data/test/test_mini_date.rb +32 -0
- data/test/test_numerizer.rb +86 -0
- data/test/test_parsing.rb +891 -248
- data/test/{test_RepeaterDayName.rb → test_repeater_day_name.rb} +16 -17
- data/test/test_repeater_day_portion.rb +254 -0
- data/test/{test_RepeaterFortnight.rb → test_repeater_fortnight.rb} +17 -18
- data/test/{test_RepeaterHour.rb → test_repeater_hour.rb} +23 -20
- data/test/test_repeater_minute.rb +34 -0
- data/test/{test_RepeaterMonth.rb → test_repeater_month.rb} +21 -18
- data/test/{test_RepeaterMonthName.rb → test_repeater_month_name.rb} +18 -19
- data/test/test_repeater_season.rb +40 -0
- data/test/{test_RepeaterTime.rb → test_repeater_time.rb} +39 -23
- data/test/{test_RepeaterWeek.rb → test_repeater_week.rb} +17 -18
- data/test/test_repeater_weekday.rb +55 -0
- data/test/{test_RepeaterWeekend.rb → test_repeater_weekend.rb} +22 -23
- data/test/{test_RepeaterYear.rb → test_repeater_year.rb} +25 -19
- data/test/{test_Span.rb → test_span.rb} +7 -8
- data/test/{test_Token.rb → test_token.rb} +6 -7
- metadata +163 -85
- data/History.txt +0 -49
- data/Manifest.txt +0 -47
- data/README.txt +0 -149
- data/lib/chronic/chronic.rb +0 -239
- data/lib/numerizer/numerizer.rb +0 -103
- data/test/suite.rb +0 -9
- data/test/test_Chronic.rb +0 -50
- data/test/test_Numerizer.rb +0 -48
- data/test/test_Time.rb +0 -50
data/test/test_parsing.rb
CHANGED
|
@@ -1,592 +1,1235 @@
|
|
|
1
|
-
require '
|
|
2
|
-
require 'test/unit'
|
|
1
|
+
require 'helper'
|
|
3
2
|
|
|
4
|
-
class TestParsing <
|
|
3
|
+
class TestParsing < 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
|
-
|
|
12
|
-
def
|
|
13
|
-
|
|
10
|
+
|
|
11
|
+
def test_handle_generic
|
|
12
|
+
time = Chronic.parse("2012-08-02T13:00:00")
|
|
13
|
+
assert_equal Time.local(2012, 8, 2, 13), time
|
|
14
|
+
|
|
15
|
+
time = Chronic.parse("2012-08-02T13:00:00+01:00")
|
|
16
|
+
assert_equal Time.utc(2012, 8, 2, 12), time
|
|
17
|
+
|
|
18
|
+
time = Chronic.parse("2012-08-02T08:00:00-04:00")
|
|
19
|
+
assert_equal Time.utc(2012, 8, 2, 12), time
|
|
20
|
+
|
|
21
|
+
time = Chronic.parse("2013-08-01T19:30:00.345-07:00")
|
|
22
|
+
time2 = Time.parse("2013-08-01 019:30:00.345-07:00")
|
|
23
|
+
assert_in_delta time, time2, 0.001
|
|
24
|
+
|
|
25
|
+
time = Chronic.parse("2012-08-02T12:00:00Z")
|
|
26
|
+
assert_equal Time.utc(2012, 8, 2, 12), time
|
|
27
|
+
|
|
28
|
+
time = Chronic.parse("2012-01-03 01:00:00.100")
|
|
29
|
+
time2 = Time.parse("2012-01-03 01:00:00.100")
|
|
30
|
+
assert_in_delta time, time2, 0.001
|
|
31
|
+
|
|
32
|
+
time = Chronic.parse("2012-01-03 01:00:00.234567")
|
|
33
|
+
time2 = Time.parse("2012-01-03 01:00:00.234567")
|
|
34
|
+
assert_in_delta time, time2, 0.000001
|
|
35
|
+
|
|
36
|
+
assert_nil Chronic.parse("1/1/32.1")
|
|
37
|
+
|
|
38
|
+
time = Chronic.parse("28th", {:guess => :begin})
|
|
39
|
+
assert_equal Time.new(Time.now.year, Time.now.month, 28), time
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def test_handle_rmn_sd
|
|
43
|
+
time = parse_now("aug 3")
|
|
44
|
+
assert_equal Time.local(2006, 8, 3, 12), time
|
|
45
|
+
|
|
46
|
+
time = parse_now("aug 3", :context => :past)
|
|
47
|
+
assert_equal Time.local(2006, 8, 3, 12), time
|
|
48
|
+
|
|
49
|
+
time = parse_now("aug. 3")
|
|
50
|
+
assert_equal Time.local(2006, 8, 3, 12), time
|
|
51
|
+
|
|
52
|
+
time = parse_now("aug 20")
|
|
53
|
+
assert_equal Time.local(2006, 8, 20, 12), time
|
|
54
|
+
|
|
55
|
+
time = parse_now("aug-20")
|
|
56
|
+
assert_equal Time.local(2006, 8, 20, 12), time
|
|
57
|
+
|
|
58
|
+
time = parse_now("aug 20", :context => :future)
|
|
59
|
+
assert_equal Time.local(2006, 8, 20, 12), time
|
|
14
60
|
|
|
15
61
|
time = parse_now("may 27")
|
|
16
62
|
assert_equal Time.local(2007, 5, 27, 12), time
|
|
17
|
-
|
|
63
|
+
|
|
18
64
|
time = parse_now("may 28", :context => :past)
|
|
19
65
|
assert_equal Time.local(2006, 5, 28, 12), time
|
|
20
|
-
|
|
66
|
+
|
|
21
67
|
time = parse_now("may 28 5pm", :context => :past)
|
|
22
68
|
assert_equal Time.local(2006, 5, 28, 17), time
|
|
23
|
-
|
|
69
|
+
|
|
24
70
|
time = parse_now("may 28 at 5pm", :context => :past)
|
|
25
71
|
assert_equal Time.local(2006, 5, 28, 17), time
|
|
26
|
-
|
|
72
|
+
|
|
27
73
|
time = parse_now("may 28 at 5:32.19pm", :context => :past)
|
|
28
74
|
assert_equal Time.local(2006, 5, 28, 17, 32, 19), time
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
75
|
+
|
|
76
|
+
time = parse_now("may 28 at 5:32:19.764")
|
|
77
|
+
assert_in_delta Time.local(2007, 5, 28, 17, 32, 19, 764000), time, 0.001
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def test_handle_rmn_sd_on
|
|
81
|
+
time = parse_now("5pm on may 28")
|
|
82
|
+
assert_equal Time.local(2007, 5, 28, 17), time
|
|
83
|
+
|
|
84
|
+
time = parse_now("5pm may 28")
|
|
85
|
+
assert_equal Time.local(2007, 5, 28, 17), time
|
|
86
|
+
|
|
87
|
+
time = parse_now("5 on may 28", :ambiguous_time_range => :none)
|
|
88
|
+
assert_equal Time.local(2007, 5, 28, 05), time
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def test_handle_rmn_od
|
|
32
92
|
time = parse_now("may 27th")
|
|
33
93
|
assert_equal Time.local(2007, 5, 27, 12), time
|
|
34
|
-
|
|
94
|
+
|
|
35
95
|
time = parse_now("may 27th", :context => :past)
|
|
36
96
|
assert_equal Time.local(2006, 5, 27, 12), time
|
|
37
|
-
|
|
97
|
+
|
|
38
98
|
time = parse_now("may 27th 5:00 pm", :context => :past)
|
|
39
99
|
assert_equal Time.local(2006, 5, 27, 17), time
|
|
40
|
-
|
|
100
|
+
|
|
41
101
|
time = parse_now("may 27th at 5pm", :context => :past)
|
|
42
102
|
assert_equal Time.local(2006, 5, 27, 17), time
|
|
43
|
-
|
|
103
|
+
|
|
44
104
|
time = parse_now("may 27th at 5", :ambiguous_time_range => :none)
|
|
45
105
|
assert_equal Time.local(2007, 5, 27, 5), time
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
time = parse_now("
|
|
50
|
-
assert_equal Time.local(
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def test_handle_od_rm
|
|
109
|
+
time = parse_now("fifteenth of this month")
|
|
110
|
+
assert_equal Time.local(2006, 8, 15, 12), time
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def test_handle_od_rmn
|
|
114
|
+
time = parse_now("22nd February")
|
|
115
|
+
assert_equal Time.local(2007, 2, 22, 12), time
|
|
116
|
+
|
|
117
|
+
time = parse_now("31st of may at 6:30pm")
|
|
118
|
+
assert_equal Time.local(2007, 5, 31, 18, 30), time
|
|
119
|
+
|
|
120
|
+
time = parse_now("11th december 8am")
|
|
121
|
+
assert_equal Time.local(2006, 12, 11, 8), time
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def test_handle_sy_rmn_od
|
|
125
|
+
time = parse_now("2009 May 22nd")
|
|
126
|
+
assert_equal Time.local(2009, 05, 22, 12), time
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def test_handle_sd_rmn
|
|
130
|
+
time = parse_now("22 February")
|
|
131
|
+
assert_equal Time.local(2007, 2, 22, 12), time
|
|
132
|
+
|
|
133
|
+
time = parse_now("22 feb")
|
|
134
|
+
assert_equal Time.local(2007, 2, 22, 12), time
|
|
135
|
+
|
|
136
|
+
time = parse_now("22-feb")
|
|
137
|
+
assert_equal Time.local(2007, 2, 22, 12), time
|
|
138
|
+
|
|
139
|
+
time = parse_now("31 of may at 6:30pm")
|
|
140
|
+
assert_equal Time.local(2007, 5, 31, 18, 30), time
|
|
141
|
+
|
|
142
|
+
time = parse_now("11 december 8am")
|
|
143
|
+
assert_equal Time.local(2006, 12, 11, 8), time
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def test_handle_rmn_od_on
|
|
147
|
+
time = parse_now("5:00 pm may 27th", :context => :past)
|
|
148
|
+
assert_equal Time.local(2006, 5, 27, 17), time
|
|
149
|
+
|
|
150
|
+
time = parse_now("05:00 pm may 27th", :context => :past)
|
|
151
|
+
assert_equal Time.local(2006, 5, 27, 17), time
|
|
152
|
+
|
|
153
|
+
time = parse_now("5pm on may 27th", :context => :past)
|
|
154
|
+
assert_equal Time.local(2006, 5, 27, 17), time
|
|
155
|
+
|
|
156
|
+
time = parse_now("5 on may 27th", :ambiguous_time_range => :none)
|
|
157
|
+
assert_equal Time.local(2007, 5, 27, 5), time
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def test_handle_rmn_sy
|
|
161
|
+
time = parse_now("may 97")
|
|
162
|
+
assert_equal Time.local(1997, 5, 16, 12), time
|
|
163
|
+
|
|
164
|
+
time = parse_now("may 33", :ambiguous_year_future_bias => 10)
|
|
165
|
+
assert_equal Time.local(2033, 5, 16, 12), time
|
|
166
|
+
|
|
167
|
+
time = parse_now("may 32")
|
|
168
|
+
assert_equal Time.local(2032, 5, 16, 12, 0, 0), time
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def test_handle_rdn_rmn_sd_t_tz_sy
|
|
172
|
+
time = parse_now("Mon Apr 02 17:00:00 PDT 2007")
|
|
173
|
+
assert_equal 1175558400, time.to_i
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def test_handle_sy_sm_sd_t_tz
|
|
177
|
+
time = parse_now("2011-07-03 22:11:35 +0100")
|
|
178
|
+
assert_equal 1309727495, time.to_i
|
|
179
|
+
|
|
180
|
+
time = parse_now("2011-07-03 22:11:35 +01:00")
|
|
181
|
+
assert_equal 1309727495, time.to_i
|
|
182
|
+
|
|
183
|
+
time = parse_now("2011-07-03 16:11:35 -05:00")
|
|
184
|
+
assert_equal 1309727495, time.to_i
|
|
185
|
+
|
|
186
|
+
time = parse_now("2011-07-03 21:11:35 UTC")
|
|
187
|
+
assert_equal 1309727495, time.to_i
|
|
188
|
+
|
|
189
|
+
time = parse_now("2011-07-03 21:11:35.362 UTC")
|
|
190
|
+
assert_in_delta 1309727495.362, time.to_f, 0.001
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def test_handle_rmn_sd_sy
|
|
194
|
+
time = parse_now("November 18, 2010")
|
|
195
|
+
assert_equal Time.local(2010, 11, 18, 12), time
|
|
196
|
+
|
|
197
|
+
time = parse_now("Jan 1,2010")
|
|
198
|
+
assert_equal Time.local(2010, 1, 1, 12), time
|
|
199
|
+
|
|
200
|
+
time = parse_now("February 14, 2004")
|
|
201
|
+
assert_equal Time.local(2004, 2, 14, 12), time
|
|
202
|
+
|
|
57
203
|
time = parse_now("jan 3 2010")
|
|
58
204
|
assert_equal Time.local(2010, 1, 3, 12), time
|
|
59
|
-
|
|
205
|
+
|
|
60
206
|
time = parse_now("jan 3 2010 midnight")
|
|
61
207
|
assert_equal Time.local(2010, 1, 4, 0), time
|
|
62
|
-
|
|
208
|
+
|
|
63
209
|
time = parse_now("jan 3 2010 at midnight")
|
|
64
210
|
assert_equal Time.local(2010, 1, 4, 0), time
|
|
65
|
-
|
|
211
|
+
|
|
66
212
|
time = parse_now("jan 3 2010 at 4", :ambiguous_time_range => :none)
|
|
67
213
|
assert_equal Time.local(2010, 1, 3, 4), time
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
214
|
+
|
|
215
|
+
time = parse_now("may 27, 1979")
|
|
216
|
+
assert_equal Time.local(1979, 5, 27, 12), time
|
|
217
|
+
|
|
72
218
|
time = parse_now("may 27 79")
|
|
73
219
|
assert_equal Time.local(1979, 5, 27, 12), time
|
|
74
|
-
|
|
220
|
+
|
|
75
221
|
time = parse_now("may 27 79 4:30")
|
|
76
222
|
assert_equal Time.local(1979, 5, 27, 16, 30), time
|
|
77
|
-
|
|
223
|
+
|
|
78
224
|
time = parse_now("may 27 79 at 4:30", :ambiguous_time_range => :none)
|
|
79
225
|
assert_equal Time.local(1979, 5, 27, 4, 30), time
|
|
80
|
-
|
|
81
|
-
# sd_rm_sy
|
|
82
226
|
|
|
227
|
+
time = parse_now("may 27 32")
|
|
228
|
+
assert_equal Time.local(2032, 5, 27, 12, 0, 0), time
|
|
229
|
+
|
|
230
|
+
time = parse_now("oct 5 2012 1045pm")
|
|
231
|
+
assert_equal Time.local(2012, 10, 5, 22, 45), time
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
def test_handle_rmn_od_sy
|
|
235
|
+
time = parse_now("may 1st 01")
|
|
236
|
+
assert_equal Time.local(2001, 5, 1, 12), time
|
|
237
|
+
|
|
238
|
+
time = parse_now("November 18th 2010")
|
|
239
|
+
assert_equal Time.local(2010, 11, 18, 12), time
|
|
240
|
+
|
|
241
|
+
time = parse_now("November 18th, 2010")
|
|
242
|
+
assert_equal Time.local(2010, 11, 18, 12), time
|
|
243
|
+
|
|
244
|
+
time = parse_now("November 18th 2010 midnight")
|
|
245
|
+
assert_equal Time.local(2010, 11, 19, 0), time
|
|
246
|
+
|
|
247
|
+
time = parse_now("November 18th 2010 at midnight")
|
|
248
|
+
assert_equal Time.local(2010, 11, 19, 0), time
|
|
249
|
+
|
|
250
|
+
time = parse_now("November 18th 2010 at 4")
|
|
251
|
+
assert_equal Time.local(2010, 11, 18, 16), time
|
|
252
|
+
|
|
253
|
+
time = parse_now("November 18th 2010 at 4", :ambiguous_time_range => :none)
|
|
254
|
+
assert_equal Time.local(2010, 11, 18, 4), time
|
|
255
|
+
|
|
256
|
+
time = parse_now("March 30th, 1979")
|
|
257
|
+
assert_equal Time.local(1979, 3, 30, 12), time
|
|
258
|
+
|
|
259
|
+
time = parse_now("March 30th 79")
|
|
260
|
+
assert_equal Time.local(1979, 3, 30, 12), time
|
|
261
|
+
|
|
262
|
+
time = parse_now("March 30th 79 4:30")
|
|
263
|
+
assert_equal Time.local(1979, 3, 30, 16, 30), time
|
|
264
|
+
|
|
265
|
+
time = parse_now("March 30th 79 at 4:30", :ambiguous_time_range => :none)
|
|
266
|
+
assert_equal Time.local(1979, 3, 30, 4, 30), time
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
def test_handle_od_rmn_sy
|
|
270
|
+
time = parse_now("22nd February 2012")
|
|
271
|
+
assert_equal Time.local(2012, 2, 22, 12), time
|
|
272
|
+
|
|
273
|
+
time = parse_now("11th december 79")
|
|
274
|
+
assert_equal Time.local(1979, 12, 11, 12), time
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
def test_handle_sd_rmn_sy
|
|
83
278
|
time = parse_now("3 jan 2010")
|
|
84
279
|
assert_equal Time.local(2010, 1, 3, 12), time
|
|
85
|
-
|
|
280
|
+
|
|
86
281
|
time = parse_now("3 jan 2010 4pm")
|
|
87
282
|
assert_equal Time.local(2010, 1, 3, 16), time
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
283
|
+
|
|
284
|
+
time = parse_now("27 Oct 2006 7:30pm")
|
|
285
|
+
assert_equal Time.local(2006, 10, 27, 19, 30), time
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
def test_handle_sm_sd_sy
|
|
91
289
|
time = parse_now("5/27/1979")
|
|
92
290
|
assert_equal Time.local(1979, 5, 27, 12), time
|
|
93
|
-
|
|
291
|
+
|
|
94
292
|
time = parse_now("5/27/1979 4am")
|
|
95
293
|
assert_equal Time.local(1979, 5, 27, 4), time
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
294
|
+
|
|
295
|
+
time = parse_now("7/12/11")
|
|
296
|
+
assert_equal Time.local(2011, 7, 12, 12), time
|
|
297
|
+
|
|
298
|
+
time = parse_now("7/12/11", :endian_precedence => :little)
|
|
299
|
+
assert_equal Time.local(2011, 12, 7, 12), time
|
|
300
|
+
|
|
301
|
+
time = parse_now("9/19/2011 6:05:57 PM")
|
|
302
|
+
assert_equal Time.local(2011, 9, 19, 18, 05, 57), time
|
|
303
|
+
|
|
304
|
+
# month day overflows
|
|
305
|
+
time = parse_now("30/2/2000")
|
|
306
|
+
assert_nil time
|
|
307
|
+
|
|
308
|
+
time = parse_now("2013-03-12 17:00", :context => :past)
|
|
309
|
+
assert_equal Time.local(2013, 3, 12, 17, 0, 0), time
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
def test_handle_sd_sm_sy
|
|
99
313
|
time = parse_now("27/5/1979")
|
|
100
314
|
assert_equal Time.local(1979, 5, 27, 12), time
|
|
101
|
-
|
|
315
|
+
|
|
102
316
|
time = parse_now("27/5/1979 @ 0700")
|
|
103
317
|
assert_equal Time.local(1979, 5, 27, 7), time
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
318
|
+
|
|
319
|
+
time = parse_now("03/18/2012 09:26 pm")
|
|
320
|
+
assert_equal Time.local(2012, 3, 18, 21, 26), time
|
|
321
|
+
|
|
322
|
+
time = parse_now("30.07.2013 16:34:22")
|
|
323
|
+
assert_equal Time.local(2013, 7, 30, 16, 34, 22), time
|
|
324
|
+
|
|
325
|
+
time = parse_now("09.08.2013")
|
|
326
|
+
assert_equal Time.local(2013, 8, 9, 12), time
|
|
327
|
+
|
|
328
|
+
time = parse_now("30-07-2013 21:53:49")
|
|
329
|
+
assert_equal Time.local(2013, 7, 30, 21, 53, 49), time
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
def test_handle_sy_sm_sd
|
|
118
333
|
time = parse_now("2000-1-1")
|
|
119
334
|
assert_equal Time.local(2000, 1, 1, 12), time
|
|
120
|
-
|
|
335
|
+
|
|
121
336
|
time = parse_now("2006-08-20")
|
|
122
337
|
assert_equal Time.local(2006, 8, 20, 12), time
|
|
123
|
-
|
|
338
|
+
|
|
124
339
|
time = parse_now("2006-08-20 7pm")
|
|
125
340
|
assert_equal Time.local(2006, 8, 20, 19), time
|
|
126
|
-
|
|
341
|
+
|
|
127
342
|
time = parse_now("2006-08-20 03:00")
|
|
128
343
|
assert_equal Time.local(2006, 8, 20, 3), time
|
|
129
|
-
|
|
344
|
+
|
|
130
345
|
time = parse_now("2006-08-20 03:30:30")
|
|
131
346
|
assert_equal Time.local(2006, 8, 20, 3, 30, 30), time
|
|
132
|
-
|
|
347
|
+
|
|
133
348
|
time = parse_now("2006-08-20 15:30:30")
|
|
134
349
|
assert_equal Time.local(2006, 8, 20, 15, 30, 30), time
|
|
135
|
-
|
|
350
|
+
|
|
136
351
|
time = parse_now("2006-08-20 15:30.30")
|
|
137
352
|
assert_equal Time.local(2006, 8, 20, 15, 30, 30), time
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
time = parse_now(
|
|
146
|
-
assert_equal
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
#
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
353
|
+
|
|
354
|
+
time = parse_now("2006-08-20 15:30:30:000536")
|
|
355
|
+
assert_in_delta Time.local(2006, 8, 20, 15, 30, 30, 536), time, 0.000001
|
|
356
|
+
|
|
357
|
+
time = parse_now("1902-08-20")
|
|
358
|
+
assert_equal Time.local(1902, 8, 20, 12, 0, 0), time
|
|
359
|
+
|
|
360
|
+
time = parse_now("2013.07.30 11:45:23")
|
|
361
|
+
assert_equal Time.local(2013, 7, 30, 11, 45, 23), time
|
|
362
|
+
|
|
363
|
+
time = parse_now("2013.08.09")
|
|
364
|
+
assert_equal Time.local(2013, 8, 9, 12, 0, 0), time
|
|
365
|
+
|
|
366
|
+
# exif date time original
|
|
367
|
+
time = parse_now("2012:05:25 22:06:50")
|
|
368
|
+
assert_equal Time.local(2012, 5, 25, 22, 6, 50), time
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
def test_handle_sm_sd
|
|
372
|
+
time = parse_now("05/06")
|
|
373
|
+
assert_equal Time.local(2007, 5, 6, 12), time
|
|
374
|
+
|
|
375
|
+
time = parse_now("05/06", :endian_precedence => [:little, :medium])
|
|
376
|
+
assert_equal Time.local(2007, 6, 5, 12), time
|
|
377
|
+
|
|
378
|
+
time = parse_now("05/06 6:05:57 PM")
|
|
379
|
+
assert_equal Time.local(2007, 5, 6, 18, 05, 57), time
|
|
380
|
+
|
|
381
|
+
time = parse_now("05/06 6:05:57 PM", :endian_precedence => [:little, :medium])
|
|
382
|
+
assert_equal Time.local(2007, 6, 5, 18, 05, 57), time
|
|
383
|
+
|
|
384
|
+
time = parse_now("13/09")
|
|
385
|
+
assert_equal Time.local(2006, 9, 13, 12), time
|
|
386
|
+
|
|
387
|
+
# future
|
|
388
|
+
time = parse_now("05/06") # future is default context
|
|
389
|
+
assert_equal Time.local(2007, 5, 6, 12), time
|
|
390
|
+
|
|
391
|
+
time = parse_now("1/13", :context => :future)
|
|
392
|
+
assert_equal Time.local(2007, 1, 13, 12), time
|
|
393
|
+
|
|
394
|
+
time = parse_now("3/13", :context => :none)
|
|
395
|
+
assert_equal Time.local(2006, 3, 13, 12), time
|
|
396
|
+
end
|
|
397
|
+
|
|
398
|
+
# def test_handle_sm_sy
|
|
399
|
+
# time = parse_now("05/06")
|
|
400
|
+
# assert_equal Time.local(2006, 5, 16, 12), time
|
|
401
|
+
#
|
|
402
|
+
# time = parse_now("12/06")
|
|
403
|
+
# assert_equal Time.local(2006, 12, 16, 12), time
|
|
404
|
+
#
|
|
405
|
+
# time = parse_now("13/06")
|
|
406
|
+
# assert_equal nil, time
|
|
407
|
+
# end
|
|
408
|
+
|
|
409
|
+
def test_handle_sy_sm
|
|
410
|
+
time = parse_now("2012-06")
|
|
411
|
+
assert_equal Time.local(2012, 06, 16), time
|
|
412
|
+
|
|
413
|
+
time = parse_now("2013/12")
|
|
414
|
+
assert_equal Time.local(2013, 12, 16, 12, 0), time
|
|
415
|
+
end
|
|
416
|
+
|
|
417
|
+
def test_handle_r
|
|
418
|
+
time = parse_now("9am on Saturday")
|
|
419
|
+
assert_equal Time.local(2006, 8, 19, 9), time
|
|
420
|
+
|
|
421
|
+
time = parse_now("on Tuesday")
|
|
422
|
+
assert_equal Time.local(2006, 8, 22, 12), time
|
|
423
|
+
|
|
424
|
+
time = parse_now("1:00:00 PM")
|
|
425
|
+
assert_equal Time.local(2006, 8, 16, 13), time
|
|
426
|
+
|
|
427
|
+
time = parse_now("01:00:00 PM")
|
|
428
|
+
assert_equal Time.local(2006, 8, 16, 13), time
|
|
429
|
+
|
|
430
|
+
time = parse_now("today at 02:00:00", :hours24 => false)
|
|
431
|
+
assert_equal Time.local(2006, 8, 16, 14), time
|
|
432
|
+
|
|
433
|
+
time = parse_now("today at 02:00:00 AM", :hours24 => false)
|
|
434
|
+
assert_equal Time.local(2006, 8, 16, 2), time
|
|
435
|
+
|
|
436
|
+
time = parse_now("today at 3:00:00", :hours24 => true)
|
|
437
|
+
assert_equal Time.local(2006, 8, 16, 3), time
|
|
438
|
+
|
|
439
|
+
time = parse_now("today at 03:00:00", :hours24 => true)
|
|
440
|
+
assert_equal Time.local(2006, 8, 16, 3), time
|
|
441
|
+
|
|
442
|
+
time = parse_now("tomorrow at 4a.m.")
|
|
443
|
+
assert_equal Time.local(2006, 8, 17, 4), time
|
|
444
|
+
end
|
|
445
|
+
|
|
446
|
+
def test_handle_r_g_r
|
|
447
|
+
end
|
|
448
|
+
|
|
449
|
+
def test_handle_srp
|
|
450
|
+
end
|
|
451
|
+
|
|
452
|
+
def test_handle_s_r_p
|
|
453
|
+
end
|
|
454
|
+
|
|
455
|
+
def test_handle_p_s_r
|
|
456
|
+
end
|
|
457
|
+
|
|
458
|
+
def test_handle_s_r_p_a
|
|
459
|
+
time1 = parse_now("two days ago 0:0:0am")
|
|
460
|
+
time2 = parse_now("two days ago 00:00:00am")
|
|
461
|
+
assert_equal time1, time2
|
|
462
|
+
end
|
|
463
|
+
|
|
464
|
+
def test_handle_orr
|
|
465
|
+
time = parse_now("5th tuesday in january")
|
|
466
|
+
assert_equal Time.local(2007, 01, 30, 12), time
|
|
467
|
+
|
|
468
|
+
time = parse_now("5th tuesday in february")
|
|
159
469
|
assert_equal nil, time
|
|
160
|
-
|
|
161
|
-
|
|
470
|
+
|
|
471
|
+
%W(jan feb march april may june july aug sep oct nov dec).each_with_index do |month, index|
|
|
472
|
+
time = parse_now("5th tuesday in #{month}")
|
|
473
|
+
|
|
474
|
+
if time then
|
|
475
|
+
assert_equal time.month, index+1
|
|
476
|
+
end
|
|
477
|
+
end
|
|
478
|
+
end
|
|
479
|
+
|
|
480
|
+
def test_handle_o_r_s_r
|
|
481
|
+
time = parse_now("3rd wednesday in november")
|
|
482
|
+
assert_equal Time.local(2006, 11, 15, 12), time
|
|
483
|
+
|
|
484
|
+
time = parse_now("10th wednesday in november")
|
|
162
485
|
assert_equal nil, time
|
|
486
|
+
|
|
487
|
+
# time = parse_now("3rd wednesday in 2007")
|
|
488
|
+
# assert_equal Time.local(2007, 1, 20, 12), time
|
|
163
489
|
end
|
|
164
|
-
|
|
165
|
-
def
|
|
166
|
-
|
|
490
|
+
|
|
491
|
+
def test_handle_o_r_g_r
|
|
492
|
+
time = parse_now("3rd month next year", :guess => false)
|
|
493
|
+
assert_equal Time.local(2007, 3), time.begin
|
|
494
|
+
|
|
495
|
+
time = parse_now("3rd month next year", :guess => false)
|
|
496
|
+
assert_equal Time.local(2007, 3, 1), time.begin
|
|
497
|
+
|
|
498
|
+
time = parse_now("3rd thursday this september")
|
|
499
|
+
assert_equal Time.local(2006, 9, 21, 12), time
|
|
500
|
+
|
|
501
|
+
now = Time.parse("1/10/2010")
|
|
502
|
+
time = parse_now("3rd thursday this november", :now => now)
|
|
503
|
+
assert_equal Time.local(2010, 11, 18, 12), time
|
|
504
|
+
|
|
505
|
+
time = parse_now("4th day last week")
|
|
506
|
+
assert_equal Time.local(2006, 8, 9, 12), time
|
|
507
|
+
end
|
|
508
|
+
|
|
509
|
+
def test_handle_sm_rmn_sy
|
|
510
|
+
time = parse_now('30-Mar-11')
|
|
511
|
+
assert_equal Time.local(2011, 3, 30, 12), time
|
|
512
|
+
|
|
513
|
+
time = parse_now('31-Aug-12')
|
|
514
|
+
assert_equal Time.local(2012, 8, 31), time
|
|
167
515
|
end
|
|
168
516
|
|
|
517
|
+
# end of testing handlers
|
|
518
|
+
|
|
169
519
|
def test_parse_guess_r
|
|
170
520
|
time = parse_now("friday")
|
|
171
521
|
assert_equal Time.local(2006, 8, 18, 12), time
|
|
172
|
-
|
|
522
|
+
|
|
173
523
|
time = parse_now("tue")
|
|
174
524
|
assert_equal Time.local(2006, 8, 22, 12), time
|
|
175
|
-
|
|
525
|
+
|
|
176
526
|
time = parse_now("5")
|
|
177
527
|
assert_equal Time.local(2006, 8, 16, 17), time
|
|
178
|
-
|
|
528
|
+
|
|
179
529
|
time = Chronic.parse("5", :now => Time.local(2006, 8, 16, 3, 0, 0, 0), :ambiguous_time_range => :none)
|
|
180
530
|
assert_equal Time.local(2006, 8, 16, 5), time
|
|
181
|
-
|
|
531
|
+
|
|
182
532
|
time = parse_now("13:00")
|
|
183
533
|
assert_equal Time.local(2006, 8, 17, 13), time
|
|
184
|
-
|
|
534
|
+
|
|
185
535
|
time = parse_now("13:45")
|
|
186
536
|
assert_equal Time.local(2006, 8, 17, 13, 45), time
|
|
187
|
-
|
|
537
|
+
|
|
538
|
+
time = parse_now("1:01pm")
|
|
539
|
+
assert_equal Time.local(2006, 8, 16, 13, 01), time
|
|
540
|
+
|
|
541
|
+
time = parse_now("2:01pm")
|
|
542
|
+
assert_equal Time.local(2006, 8, 16, 14, 01), time
|
|
543
|
+
|
|
188
544
|
time = parse_now("november")
|
|
189
545
|
assert_equal Time.local(2006, 11, 16), time
|
|
190
546
|
end
|
|
191
|
-
|
|
547
|
+
|
|
192
548
|
def test_parse_guess_rr
|
|
193
549
|
time = parse_now("friday 13:00")
|
|
194
550
|
assert_equal Time.local(2006, 8, 18, 13), time
|
|
195
|
-
|
|
551
|
+
|
|
196
552
|
time = parse_now("monday 4:00")
|
|
197
553
|
assert_equal Time.local(2006, 8, 21, 16), time
|
|
198
|
-
|
|
554
|
+
|
|
199
555
|
time = parse_now("sat 4:00", :ambiguous_time_range => :none)
|
|
200
556
|
assert_equal Time.local(2006, 8, 19, 4), time
|
|
201
|
-
|
|
557
|
+
|
|
202
558
|
time = parse_now("sunday 4:20", :ambiguous_time_range => :none)
|
|
203
559
|
assert_equal Time.local(2006, 8, 20, 4, 20), time
|
|
204
|
-
|
|
560
|
+
|
|
205
561
|
time = parse_now("4 pm")
|
|
206
562
|
assert_equal Time.local(2006, 8, 16, 16), time
|
|
207
|
-
|
|
563
|
+
|
|
208
564
|
time = parse_now("4 am", :ambiguous_time_range => :none)
|
|
209
565
|
assert_equal Time.local(2006, 8, 16, 4), time
|
|
210
|
-
|
|
566
|
+
|
|
567
|
+
time = parse_now("12 pm")
|
|
568
|
+
assert_equal Time.local(2006, 8, 16, 12), time
|
|
569
|
+
|
|
570
|
+
time = parse_now("12:01 pm")
|
|
571
|
+
assert_equal Time.local(2006, 8, 16, 12, 1), time
|
|
572
|
+
|
|
573
|
+
time = parse_now("12:01 am")
|
|
574
|
+
assert_equal Time.local(2006, 8, 16, 0, 1), time
|
|
575
|
+
|
|
576
|
+
time = parse_now("12 am")
|
|
577
|
+
assert_equal Time.local(2006, 8, 16), time
|
|
578
|
+
|
|
211
579
|
time = parse_now("4:00 in the morning")
|
|
212
580
|
assert_equal Time.local(2006, 8, 16, 4), time
|
|
213
|
-
|
|
581
|
+
|
|
582
|
+
time = parse_now("0:10")
|
|
583
|
+
assert_equal Time.local(2006, 8, 17, 0, 10), time
|
|
584
|
+
|
|
214
585
|
time = parse_now("november 4")
|
|
215
586
|
assert_equal Time.local(2006, 11, 4, 12), time
|
|
216
|
-
|
|
587
|
+
|
|
217
588
|
time = parse_now("aug 24")
|
|
218
589
|
assert_equal Time.local(2006, 8, 24, 12), time
|
|
219
590
|
end
|
|
220
|
-
|
|
591
|
+
|
|
221
592
|
def test_parse_guess_rrr
|
|
222
593
|
time = parse_now("friday 1 pm")
|
|
223
594
|
assert_equal Time.local(2006, 8, 18, 13), time
|
|
224
|
-
|
|
595
|
+
|
|
225
596
|
time = parse_now("friday 11 at night")
|
|
226
597
|
assert_equal Time.local(2006, 8, 18, 23), time
|
|
227
|
-
|
|
598
|
+
|
|
228
599
|
time = parse_now("friday 11 in the evening")
|
|
229
600
|
assert_equal Time.local(2006, 8, 18, 23), time
|
|
230
|
-
|
|
601
|
+
|
|
231
602
|
time = parse_now("sunday 6am")
|
|
232
603
|
assert_equal Time.local(2006, 8, 20, 6), time
|
|
233
|
-
|
|
604
|
+
|
|
234
605
|
time = parse_now("friday evening at 7")
|
|
235
606
|
assert_equal Time.local(2006, 8, 18, 19), time
|
|
236
607
|
end
|
|
237
|
-
|
|
608
|
+
|
|
238
609
|
def test_parse_guess_gr
|
|
239
610
|
# year
|
|
240
|
-
|
|
241
|
-
time = parse_now("this year")
|
|
242
|
-
assert_equal Time.local(2006,
|
|
243
|
-
|
|
244
|
-
time = parse_now("this year", :context => :past)
|
|
245
|
-
assert_equal Time.local(2006,
|
|
246
|
-
|
|
611
|
+
|
|
612
|
+
time = parse_now("this year", :guess => false)
|
|
613
|
+
assert_equal Time.local(2006, 8, 17), time.begin
|
|
614
|
+
|
|
615
|
+
time = parse_now("this year", :context => :past, :guess => false)
|
|
616
|
+
assert_equal Time.local(2006, 1, 1), time.begin
|
|
617
|
+
|
|
247
618
|
# month
|
|
248
|
-
|
|
619
|
+
|
|
249
620
|
time = parse_now("this month")
|
|
250
621
|
assert_equal Time.local(2006, 8, 24, 12), time
|
|
251
|
-
|
|
622
|
+
|
|
252
623
|
time = parse_now("this month", :context => :past)
|
|
253
624
|
assert_equal Time.local(2006, 8, 8, 12), time
|
|
254
|
-
|
|
625
|
+
|
|
255
626
|
time = Chronic.parse("next month", :now => Time.local(2006, 11, 15))
|
|
256
627
|
assert_equal Time.local(2006, 12, 16, 12), time
|
|
257
|
-
|
|
628
|
+
|
|
258
629
|
# month name
|
|
259
|
-
|
|
630
|
+
|
|
260
631
|
time = parse_now("last november")
|
|
261
632
|
assert_equal Time.local(2005, 11, 16), time
|
|
262
|
-
|
|
633
|
+
|
|
263
634
|
# fortnight
|
|
264
|
-
|
|
635
|
+
|
|
265
636
|
time = parse_now("this fortnight")
|
|
266
637
|
assert_equal Time.local(2006, 8, 21, 19, 30), time
|
|
267
|
-
|
|
638
|
+
|
|
268
639
|
time = parse_now("this fortnight", :context => :past)
|
|
269
640
|
assert_equal Time.local(2006, 8, 14, 19), time
|
|
270
|
-
|
|
641
|
+
|
|
271
642
|
# week
|
|
272
|
-
|
|
643
|
+
|
|
273
644
|
time = parse_now("this week")
|
|
274
645
|
assert_equal Time.local(2006, 8, 18, 7, 30), time
|
|
275
|
-
|
|
646
|
+
|
|
276
647
|
time = parse_now("this week", :context => :past)
|
|
277
648
|
assert_equal Time.local(2006, 8, 14, 19), time
|
|
278
|
-
|
|
649
|
+
|
|
279
650
|
# weekend
|
|
280
|
-
|
|
651
|
+
|
|
281
652
|
time = parse_now("this weekend")
|
|
282
653
|
assert_equal Time.local(2006, 8, 20), time
|
|
283
|
-
|
|
654
|
+
|
|
284
655
|
time = parse_now("this weekend", :context => :past)
|
|
285
656
|
assert_equal Time.local(2006, 8, 13), time
|
|
286
|
-
|
|
657
|
+
|
|
287
658
|
time = parse_now("last weekend")
|
|
288
659
|
assert_equal Time.local(2006, 8, 13), time
|
|
289
|
-
|
|
660
|
+
|
|
290
661
|
# day
|
|
291
|
-
|
|
662
|
+
|
|
292
663
|
time = parse_now("this day")
|
|
293
|
-
assert_equal Time.local(2006, 8, 16, 19
|
|
294
|
-
|
|
664
|
+
assert_equal Time.local(2006, 8, 16, 19), time
|
|
665
|
+
|
|
295
666
|
time = parse_now("this day", :context => :past)
|
|
296
667
|
assert_equal Time.local(2006, 8, 16, 7), time
|
|
297
|
-
|
|
668
|
+
|
|
298
669
|
time = parse_now("today")
|
|
299
|
-
assert_equal Time.local(2006, 8, 16, 19
|
|
300
|
-
|
|
670
|
+
assert_equal Time.local(2006, 8, 16, 19), time
|
|
671
|
+
|
|
301
672
|
time = parse_now("yesterday")
|
|
302
673
|
assert_equal Time.local(2006, 8, 15, 12), time
|
|
303
|
-
|
|
674
|
+
|
|
675
|
+
now = Time.parse("2011-05-27 23:10") # after 11pm
|
|
676
|
+
time = parse_now("yesterday", :now => now)
|
|
677
|
+
assert_equal Time.local(2011, 05, 26, 12), time
|
|
678
|
+
|
|
304
679
|
time = parse_now("tomorrow")
|
|
305
680
|
assert_equal Time.local(2006, 8, 17, 12), time
|
|
306
|
-
|
|
681
|
+
|
|
307
682
|
# day name
|
|
308
|
-
|
|
683
|
+
|
|
309
684
|
time = parse_now("this tuesday")
|
|
310
685
|
assert_equal Time.local(2006, 8, 22, 12), time
|
|
311
|
-
|
|
686
|
+
|
|
312
687
|
time = parse_now("next tuesday")
|
|
313
688
|
assert_equal Time.local(2006, 8, 22, 12), time
|
|
314
|
-
|
|
689
|
+
|
|
315
690
|
time = parse_now("last tuesday")
|
|
316
691
|
assert_equal Time.local(2006, 8, 15, 12), time
|
|
317
|
-
|
|
692
|
+
|
|
318
693
|
time = parse_now("this wed")
|
|
319
694
|
assert_equal Time.local(2006, 8, 23, 12), time
|
|
320
|
-
|
|
695
|
+
|
|
321
696
|
time = parse_now("next wed")
|
|
322
697
|
assert_equal Time.local(2006, 8, 23, 12), time
|
|
323
|
-
|
|
698
|
+
|
|
324
699
|
time = parse_now("last wed")
|
|
325
700
|
assert_equal Time.local(2006, 8, 9, 12), time
|
|
326
|
-
|
|
701
|
+
|
|
702
|
+
monday = Time.local(2006, 8, 21, 12)
|
|
703
|
+
assert_equal monday, parse_now("mon")
|
|
704
|
+
assert_equal monday, parse_now("mun")
|
|
705
|
+
|
|
706
|
+
tuesday = Time.local(2006, 8, 22, 12)
|
|
707
|
+
assert_equal tuesday, parse_now("tue")
|
|
708
|
+
assert_equal tuesday, parse_now("tus")
|
|
709
|
+
|
|
710
|
+
wednesday = Time.local(2006, 8, 23, 12)
|
|
711
|
+
assert_equal wednesday, parse_now("wed")
|
|
712
|
+
assert_equal wednesday, parse_now("wenns")
|
|
713
|
+
|
|
714
|
+
thursday = Time.local(2006, 8, 17, 12)
|
|
715
|
+
assert_equal thursday, parse_now("thu")
|
|
716
|
+
assert_equal thursday, parse_now("thur")
|
|
717
|
+
|
|
718
|
+
friday = Time.local(2006, 8, 18, 12)
|
|
719
|
+
assert_equal friday, parse_now("fri")
|
|
720
|
+
assert_equal friday, parse_now("fry")
|
|
721
|
+
|
|
722
|
+
saturday = Time.local(2006, 8, 19, 12)
|
|
723
|
+
assert_equal saturday, parse_now("sat")
|
|
724
|
+
assert_equal saturday, parse_now("satterday")
|
|
725
|
+
|
|
726
|
+
sunday = Time.local(2006, 8, 20, 12)
|
|
727
|
+
assert_equal sunday, parse_now("sun")
|
|
728
|
+
assert_equal sunday, parse_now("sum")
|
|
729
|
+
|
|
327
730
|
# day portion
|
|
328
|
-
|
|
731
|
+
|
|
329
732
|
time = parse_now("this morning")
|
|
330
733
|
assert_equal Time.local(2006, 8, 16, 9), time
|
|
331
|
-
|
|
734
|
+
|
|
332
735
|
time = parse_now("tonight")
|
|
333
736
|
assert_equal Time.local(2006, 8, 16, 22), time
|
|
334
|
-
|
|
737
|
+
|
|
738
|
+
# hour
|
|
739
|
+
|
|
740
|
+
time = parse_now("next hr")
|
|
741
|
+
assert_equal Time.local(2006, 8, 16, 15, 30, 0), time
|
|
742
|
+
|
|
743
|
+
time = parse_now("next hrs")
|
|
744
|
+
assert_equal Time.local(2006, 8, 16, 15, 30, 0), time
|
|
745
|
+
|
|
335
746
|
# minute
|
|
336
|
-
|
|
747
|
+
|
|
748
|
+
time = parse_now("next min")
|
|
749
|
+
assert_equal Time.local(2006, 8, 16, 14, 1, 30), time
|
|
750
|
+
|
|
751
|
+
time = parse_now("next mins")
|
|
752
|
+
assert_equal Time.local(2006, 8, 16, 14, 1, 30), time
|
|
753
|
+
|
|
337
754
|
time = parse_now("next minute")
|
|
338
755
|
assert_equal Time.local(2006, 8, 16, 14, 1, 30), time
|
|
339
|
-
|
|
756
|
+
|
|
340
757
|
# second
|
|
341
|
-
|
|
758
|
+
|
|
759
|
+
time = parse_now("next sec")
|
|
760
|
+
assert_equal Time.local(2006, 8, 16, 14, 0, 1), time
|
|
761
|
+
|
|
762
|
+
time = parse_now("next secs")
|
|
763
|
+
assert_equal Time.local(2006, 8, 16, 14, 0, 1), time
|
|
764
|
+
|
|
342
765
|
time = parse_now("this second")
|
|
343
766
|
assert_equal Time.local(2006, 8, 16, 14), time
|
|
344
|
-
|
|
767
|
+
|
|
345
768
|
time = parse_now("this second", :context => :past)
|
|
346
769
|
assert_equal Time.local(2006, 8, 16, 14), time
|
|
347
|
-
|
|
770
|
+
|
|
348
771
|
time = parse_now("next second")
|
|
349
772
|
assert_equal Time.local(2006, 8, 16, 14, 0, 1), time
|
|
350
|
-
|
|
773
|
+
|
|
351
774
|
time = parse_now("last second")
|
|
352
775
|
assert_equal Time.local(2006, 8, 16, 13, 59, 59), time
|
|
353
776
|
end
|
|
354
|
-
|
|
355
|
-
def test_parse_guess_grr
|
|
777
|
+
|
|
778
|
+
def test_parse_guess_grr
|
|
356
779
|
time = parse_now("yesterday at 4:00")
|
|
357
780
|
assert_equal Time.local(2006, 8, 15, 16), time
|
|
358
|
-
|
|
781
|
+
|
|
359
782
|
time = parse_now("today at 9:00")
|
|
360
783
|
assert_equal Time.local(2006, 8, 16, 9), time
|
|
361
|
-
|
|
784
|
+
|
|
362
785
|
time = parse_now("today at 2100")
|
|
363
786
|
assert_equal Time.local(2006, 8, 16, 21), time
|
|
364
|
-
|
|
787
|
+
|
|
365
788
|
time = parse_now("this day at 0900")
|
|
366
789
|
assert_equal Time.local(2006, 8, 16, 9), time
|
|
367
|
-
|
|
790
|
+
|
|
368
791
|
time = parse_now("tomorrow at 0900")
|
|
369
792
|
assert_equal Time.local(2006, 8, 17, 9), time
|
|
370
|
-
|
|
793
|
+
|
|
371
794
|
time = parse_now("yesterday at 4:00", :ambiguous_time_range => :none)
|
|
372
795
|
assert_equal Time.local(2006, 8, 15, 4), time
|
|
373
|
-
|
|
796
|
+
|
|
374
797
|
time = parse_now("last friday at 4:00")
|
|
375
798
|
assert_equal Time.local(2006, 8, 11, 16), time
|
|
376
|
-
|
|
799
|
+
|
|
377
800
|
time = parse_now("next wed 4:00")
|
|
378
801
|
assert_equal Time.local(2006, 8, 23, 16), time
|
|
379
|
-
|
|
802
|
+
|
|
380
803
|
time = parse_now("yesterday afternoon")
|
|
381
804
|
assert_equal Time.local(2006, 8, 15, 15), time
|
|
382
|
-
|
|
805
|
+
|
|
383
806
|
time = parse_now("last week tuesday")
|
|
384
807
|
assert_equal Time.local(2006, 8, 8, 12), time
|
|
385
|
-
|
|
808
|
+
|
|
386
809
|
time = parse_now("tonight at 7")
|
|
387
810
|
assert_equal Time.local(2006, 8, 16, 19), time
|
|
388
|
-
|
|
811
|
+
|
|
389
812
|
time = parse_now("tonight 7")
|
|
390
813
|
assert_equal Time.local(2006, 8, 16, 19), time
|
|
391
|
-
|
|
814
|
+
|
|
392
815
|
time = parse_now("7 tonight")
|
|
393
816
|
assert_equal Time.local(2006, 8, 16, 19), time
|
|
394
817
|
end
|
|
395
|
-
|
|
818
|
+
|
|
396
819
|
def test_parse_guess_grrr
|
|
397
820
|
time = parse_now("today at 6:00pm")
|
|
398
821
|
assert_equal Time.local(2006, 8, 16, 18), time
|
|
399
|
-
|
|
822
|
+
|
|
400
823
|
time = parse_now("today at 6:00am")
|
|
401
824
|
assert_equal Time.local(2006, 8, 16, 6), time
|
|
402
|
-
|
|
825
|
+
|
|
403
826
|
time = parse_now("this day 1800")
|
|
404
827
|
assert_equal Time.local(2006, 8, 16, 18), time
|
|
405
|
-
|
|
828
|
+
|
|
406
829
|
time = parse_now("yesterday at 4:00pm")
|
|
407
830
|
assert_equal Time.local(2006, 8, 15, 16), time
|
|
408
|
-
|
|
831
|
+
|
|
409
832
|
time = parse_now("tomorrow evening at 7")
|
|
410
833
|
assert_equal Time.local(2006, 8, 17, 19), time
|
|
411
|
-
|
|
834
|
+
|
|
412
835
|
time = parse_now("tomorrow morning at 5:30")
|
|
413
836
|
assert_equal Time.local(2006, 8, 17, 5, 30), time
|
|
837
|
+
|
|
838
|
+
time = parse_now("next monday at 12:01 am")
|
|
839
|
+
assert_equal Time.local(2006, 8, 21, 00, 1), time
|
|
840
|
+
|
|
841
|
+
time = parse_now("next monday at 12:01 pm")
|
|
842
|
+
assert_equal Time.local(2006, 8, 21, 12, 1), time
|
|
843
|
+
|
|
844
|
+
# with context
|
|
845
|
+
time = parse_now("sunday at 8:15pm", :context => :past)
|
|
846
|
+
assert_equal Time.local(2006, 8, 13, 20, 15), time
|
|
414
847
|
end
|
|
415
|
-
|
|
848
|
+
|
|
416
849
|
def test_parse_guess_rgr
|
|
417
850
|
time = parse_now("afternoon yesterday")
|
|
418
851
|
assert_equal Time.local(2006, 8, 15, 15), time
|
|
419
|
-
|
|
852
|
+
|
|
420
853
|
time = parse_now("tuesday last week")
|
|
421
854
|
assert_equal Time.local(2006, 8, 8, 12), time
|
|
422
855
|
end
|
|
423
|
-
|
|
856
|
+
|
|
857
|
+
def test_parse_guess_a_ago
|
|
858
|
+
time = parse_now("AN hour ago")
|
|
859
|
+
assert_equal Time.local(2006, 8, 16, 13), time
|
|
860
|
+
|
|
861
|
+
time = parse_now("A day ago")
|
|
862
|
+
assert_equal Time.local(2006, 8, 15, 14), time
|
|
863
|
+
|
|
864
|
+
time = parse_now("a month ago")
|
|
865
|
+
assert_equal Time.local(2006, 7, 16, 14), time
|
|
866
|
+
|
|
867
|
+
time = parse_now("a year ago")
|
|
868
|
+
assert_equal Time.local(2005, 8, 16, 14), time
|
|
869
|
+
end
|
|
870
|
+
|
|
424
871
|
def test_parse_guess_s_r_p
|
|
425
872
|
# past
|
|
426
|
-
|
|
873
|
+
|
|
427
874
|
time = parse_now("3 years ago")
|
|
428
875
|
assert_equal Time.local(2003, 8, 16, 14), time
|
|
429
|
-
|
|
876
|
+
|
|
430
877
|
time = parse_now("1 month ago")
|
|
431
878
|
assert_equal Time.local(2006, 7, 16, 14), time
|
|
432
|
-
|
|
879
|
+
|
|
433
880
|
time = parse_now("1 fortnight ago")
|
|
434
881
|
assert_equal Time.local(2006, 8, 2, 14), time
|
|
435
|
-
|
|
882
|
+
|
|
436
883
|
time = parse_now("2 fortnights ago")
|
|
437
884
|
assert_equal Time.local(2006, 7, 19, 14), time
|
|
438
|
-
|
|
885
|
+
|
|
439
886
|
time = parse_now("3 weeks ago")
|
|
440
887
|
assert_equal Time.local(2006, 7, 26, 14), time
|
|
441
|
-
|
|
888
|
+
|
|
442
889
|
time = parse_now("2 weekends ago")
|
|
443
890
|
assert_equal Time.local(2006, 8, 5), time
|
|
444
|
-
|
|
891
|
+
|
|
445
892
|
time = parse_now("3 days ago")
|
|
446
893
|
assert_equal Time.local(2006, 8, 13, 14), time
|
|
447
|
-
|
|
894
|
+
|
|
448
895
|
#time = parse_now("1 monday ago")
|
|
449
896
|
#assert_equal Time.local(2006, 8, 14, 12), time
|
|
450
|
-
|
|
897
|
+
|
|
451
898
|
time = parse_now("5 mornings ago")
|
|
452
899
|
assert_equal Time.local(2006, 8, 12, 9), time
|
|
453
|
-
|
|
900
|
+
|
|
454
901
|
time = parse_now("7 hours ago")
|
|
455
902
|
assert_equal Time.local(2006, 8, 16, 7), time
|
|
456
|
-
|
|
903
|
+
|
|
457
904
|
time = parse_now("3 minutes ago")
|
|
458
905
|
assert_equal Time.local(2006, 8, 16, 13, 57), time
|
|
459
|
-
|
|
906
|
+
|
|
460
907
|
time = parse_now("20 seconds before now")
|
|
461
908
|
assert_equal Time.local(2006, 8, 16, 13, 59, 40), time
|
|
462
909
|
|
|
463
910
|
# future
|
|
464
|
-
|
|
911
|
+
|
|
465
912
|
time = parse_now("3 years from now")
|
|
466
913
|
assert_equal Time.local(2009, 8, 16, 14, 0, 0), time
|
|
467
|
-
|
|
914
|
+
|
|
468
915
|
time = parse_now("6 months hence")
|
|
469
916
|
assert_equal Time.local(2007, 2, 16, 14), time
|
|
470
|
-
|
|
917
|
+
|
|
471
918
|
time = parse_now("3 fortnights hence")
|
|
472
919
|
assert_equal Time.local(2006, 9, 27, 14), time
|
|
473
|
-
|
|
920
|
+
|
|
474
921
|
time = parse_now("1 week from now")
|
|
475
922
|
assert_equal Time.local(2006, 8, 23, 14, 0, 0), time
|
|
476
|
-
|
|
923
|
+
|
|
477
924
|
time = parse_now("1 weekend from now")
|
|
478
925
|
assert_equal Time.local(2006, 8, 19), time
|
|
479
|
-
|
|
926
|
+
|
|
480
927
|
time = parse_now("2 weekends from now")
|
|
481
928
|
assert_equal Time.local(2006, 8, 26), time
|
|
482
|
-
|
|
929
|
+
|
|
483
930
|
time = parse_now("1 day hence")
|
|
484
931
|
assert_equal Time.local(2006, 8, 17, 14), time
|
|
485
|
-
|
|
932
|
+
|
|
486
933
|
time = parse_now("5 mornings hence")
|
|
487
934
|
assert_equal Time.local(2006, 8, 21, 9), time
|
|
488
|
-
|
|
935
|
+
|
|
489
936
|
time = parse_now("1 hour from now")
|
|
490
937
|
assert_equal Time.local(2006, 8, 16, 15), time
|
|
491
|
-
|
|
938
|
+
|
|
492
939
|
time = parse_now("20 minutes hence")
|
|
493
940
|
assert_equal Time.local(2006, 8, 16, 14, 20), time
|
|
494
|
-
|
|
941
|
+
|
|
495
942
|
time = parse_now("20 seconds from now")
|
|
496
943
|
assert_equal Time.local(2006, 8, 16, 14, 0, 20), time
|
|
497
|
-
|
|
944
|
+
|
|
498
945
|
time = Chronic.parse("2 months ago", :now => Time.parse("2007-03-07 23:30"))
|
|
499
946
|
assert_equal Time.local(2007, 1, 7, 23, 30), time
|
|
947
|
+
|
|
948
|
+
# Two repeaters
|
|
949
|
+
time = parse_now("25 minutes and 20 seconds from now")
|
|
950
|
+
assert_equal Time.local(2006, 8, 16, 14, 25, 20), time
|
|
951
|
+
|
|
952
|
+
time = parse_now("24 hours and 20 minutes from now")
|
|
953
|
+
assert_equal Time.local(2006, 8, 17, 14, 20, 0), time
|
|
954
|
+
|
|
955
|
+
time = parse_now("24 hours 20 minutes from now")
|
|
956
|
+
assert_equal Time.local(2006, 8, 17, 14, 20, 0), time
|
|
500
957
|
end
|
|
501
|
-
|
|
958
|
+
|
|
502
959
|
def test_parse_guess_p_s_r
|
|
503
960
|
time = parse_now("in 3 hours")
|
|
504
961
|
assert_equal Time.local(2006, 8, 16, 17), time
|
|
505
962
|
end
|
|
506
|
-
|
|
963
|
+
|
|
507
964
|
def test_parse_guess_s_r_p_a
|
|
508
965
|
# past
|
|
509
|
-
|
|
966
|
+
|
|
510
967
|
time = parse_now("3 years ago tomorrow")
|
|
511
968
|
assert_equal Time.local(2003, 8, 17, 12), time
|
|
512
|
-
|
|
969
|
+
|
|
513
970
|
time = parse_now("3 years ago this friday")
|
|
514
971
|
assert_equal Time.local(2003, 8, 18, 12), time
|
|
515
|
-
|
|
972
|
+
|
|
516
973
|
time = parse_now("3 months ago saturday at 5:00 pm")
|
|
517
974
|
assert_equal Time.local(2006, 5, 19, 17), time
|
|
518
|
-
|
|
975
|
+
|
|
519
976
|
time = parse_now("2 days from this second")
|
|
520
977
|
assert_equal Time.local(2006, 8, 18, 14), time
|
|
521
|
-
|
|
978
|
+
|
|
522
979
|
time = parse_now("7 hours before tomorrow at midnight")
|
|
523
980
|
assert_equal Time.local(2006, 8, 17, 17), time
|
|
524
|
-
|
|
981
|
+
|
|
525
982
|
# future
|
|
526
983
|
end
|
|
527
|
-
|
|
528
|
-
def test_parse_guess_o_r_s_r
|
|
529
|
-
time = parse_now("3rd wednesday in november")
|
|
530
|
-
assert_equal Time.local(2006, 11, 15, 12), time
|
|
531
|
-
|
|
532
|
-
time = parse_now("10th wednesday in november")
|
|
533
|
-
assert_equal nil, time
|
|
534
|
-
end
|
|
535
|
-
|
|
984
|
+
|
|
536
985
|
def test_parse_guess_o_r_g_r
|
|
537
|
-
time = parse_now("3rd month next year")
|
|
538
|
-
assert_equal Time.local(2007, 3
|
|
539
|
-
|
|
986
|
+
time = parse_now("3rd month next year", :guess => false)
|
|
987
|
+
assert_equal Time.local(2007, 3), time.begin
|
|
988
|
+
|
|
989
|
+
time = parse_now("3rd month next year", :guess => false)
|
|
990
|
+
assert_equal Time.local(2007, 3, 1), time.begin
|
|
991
|
+
|
|
540
992
|
time = parse_now("3rd thursday this september")
|
|
541
993
|
assert_equal Time.local(2006, 9, 21, 12), time
|
|
542
|
-
|
|
994
|
+
|
|
995
|
+
now = Time.parse("1/10/2010")
|
|
996
|
+
time = parse_now("3rd thursday this november", :now => now)
|
|
997
|
+
assert_equal Time.local(2010, 11, 18, 12), time
|
|
998
|
+
|
|
543
999
|
time = parse_now("4th day last week")
|
|
544
1000
|
assert_equal Time.local(2006, 8, 9, 12), time
|
|
545
1001
|
end
|
|
546
|
-
|
|
1002
|
+
|
|
547
1003
|
def test_parse_guess_nonsense
|
|
548
1004
|
time = parse_now("some stupid nonsense")
|
|
549
1005
|
assert_equal nil, time
|
|
1006
|
+
|
|
1007
|
+
time = parse_now("Ham Sandwich")
|
|
1008
|
+
assert_equal nil, time
|
|
550
1009
|
end
|
|
551
|
-
|
|
1010
|
+
|
|
552
1011
|
def test_parse_span
|
|
553
1012
|
span = parse_now("friday", :guess => false)
|
|
554
1013
|
assert_equal Time.local(2006, 8, 18), span.begin
|
|
555
1014
|
assert_equal Time.local(2006, 8, 19), span.end
|
|
556
|
-
|
|
1015
|
+
|
|
557
1016
|
span = parse_now("november", :guess => false)
|
|
558
1017
|
assert_equal Time.local(2006, 11), span.begin
|
|
559
1018
|
assert_equal Time.local(2006, 12), span.end
|
|
560
|
-
|
|
1019
|
+
|
|
561
1020
|
span = Chronic.parse("weekend" , :now => @time_2006_08_16_14_00_00, :guess => false)
|
|
562
1021
|
assert_equal Time.local(2006, 8, 19), span.begin
|
|
563
1022
|
assert_equal Time.local(2006, 8, 21), span.end
|
|
564
1023
|
end
|
|
565
|
-
|
|
1024
|
+
|
|
1025
|
+
def test_parse_with_endian_precedence
|
|
1026
|
+
date = '11/02/2007'
|
|
1027
|
+
|
|
1028
|
+
expect_for_middle_endian = Time.local(2007, 11, 2, 12)
|
|
1029
|
+
expect_for_little_endian = Time.local(2007, 2, 11, 12)
|
|
1030
|
+
|
|
1031
|
+
# default precedence should be toward middle endianness
|
|
1032
|
+
assert_equal expect_for_middle_endian, Chronic.parse(date)
|
|
1033
|
+
|
|
1034
|
+
assert_equal expect_for_middle_endian, Chronic.parse(date, :endian_precedence => [:middle, :little])
|
|
1035
|
+
|
|
1036
|
+
assert_equal expect_for_little_endian, Chronic.parse(date, :endian_precedence => [:little, :middle])
|
|
1037
|
+
end
|
|
1038
|
+
|
|
566
1039
|
def test_parse_words
|
|
567
1040
|
assert_equal parse_now("33 days from now"), parse_now("thirty-three days from now")
|
|
568
1041
|
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
1042
|
assert_equal parse_now("may 10th"), parse_now("may tenth")
|
|
1043
|
+
assert_equal parse_now("second monday in january"), parse_now("2nd monday in january")
|
|
1044
|
+
end
|
|
1045
|
+
|
|
1046
|
+
def test_relative_to_an_hour_before
|
|
1047
|
+
# example prenormalization "10 to 2" becomes "10 minutes past 2"
|
|
1048
|
+
assert_equal Time.local(2006, 8, 16, 13, 50), parse_now("10 to 2")
|
|
1049
|
+
assert_equal Time.local(2006, 8, 16, 13, 50), parse_now("10 till 2")
|
|
1050
|
+
assert_equal Time.local(2006, 8, 16, 13, 50), parse_now("10 prior to 2")
|
|
1051
|
+
assert_equal Time.local(2006, 8, 16, 13, 50), parse_now("10 before 2")
|
|
1052
|
+
|
|
1053
|
+
# uses the current hour, so 2006-08-16 13:50:00, not 14:50
|
|
1054
|
+
assert_equal Time.local(2006, 8, 16, 13, 50), parse_now("10 to")
|
|
1055
|
+
assert_equal Time.local(2006, 8, 16, 13, 50), parse_now("10 till")
|
|
1056
|
+
|
|
1057
|
+
assert_equal Time.local(2006, 8, 16, 15, 45), parse_now("quarter to 4")
|
|
570
1058
|
end
|
|
571
|
-
|
|
1059
|
+
|
|
1060
|
+
def test_relative_to_an_hour_after
|
|
1061
|
+
# not nil
|
|
1062
|
+
assert_equal Time.local(2006, 8, 16, 14, 10), parse_now("10 after 2")
|
|
1063
|
+
assert_equal Time.local(2006, 8, 16, 14, 10), parse_now("10 past 2")
|
|
1064
|
+
assert_equal Time.local(2006, 8, 16, 14, 30), parse_now("half past 2")
|
|
1065
|
+
end
|
|
1066
|
+
|
|
572
1067
|
def test_parse_only_complete_pointers
|
|
573
1068
|
assert_equal parse_now("eat pasty buns today at 2pm"), @time_2006_08_16_14_00_00
|
|
574
1069
|
assert_equal parse_now("futuristically speaking today at 2pm"), @time_2006_08_16_14_00_00
|
|
575
1070
|
assert_equal parse_now("meeting today at 2pm"), @time_2006_08_16_14_00_00
|
|
576
1071
|
end
|
|
577
|
-
|
|
578
|
-
def
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
end
|
|
582
|
-
|
|
583
|
-
assert_raise(Chronic::InvalidArgumentException) do
|
|
584
|
-
time = Chronic.parse("may 27", :context => :bar)
|
|
585
|
-
end
|
|
1072
|
+
|
|
1073
|
+
def test_am_pm
|
|
1074
|
+
assert_equal Time.local(2006, 8, 16), parse_now("8/16/2006 at 12am")
|
|
1075
|
+
assert_equal Time.local(2006, 8, 16, 12), parse_now("8/16/2006 at 12pm")
|
|
586
1076
|
end
|
|
587
|
-
|
|
1077
|
+
|
|
1078
|
+
def test_a_p
|
|
1079
|
+
assert_equal Time.local(2006, 8, 16, 0, 15), parse_now("8/16/2006 at 12:15a")
|
|
1080
|
+
assert_equal Time.local(2006, 8, 16, 18, 30), parse_now("8/16/2006 at 6:30p")
|
|
1081
|
+
end
|
|
1082
|
+
|
|
1083
|
+
def test_seasons
|
|
1084
|
+
t = parse_now("this spring", :guess => false)
|
|
1085
|
+
assert_equal Time.local(2007, 3, 20), t.begin
|
|
1086
|
+
assert_equal Time.local(2007, 6, 20), t.end
|
|
1087
|
+
|
|
1088
|
+
t = parse_now("this winter", :guess => false)
|
|
1089
|
+
assert_equal Time.local(2006, 12, 22), t.begin
|
|
1090
|
+
assert_equal Time.local(2007, 3, 19), t.end
|
|
1091
|
+
|
|
1092
|
+
t = parse_now("last spring", :guess => false)
|
|
1093
|
+
assert_equal Time.local(2006, 3, 20), t.begin
|
|
1094
|
+
assert_equal Time.local(2006, 6, 20), t.end
|
|
1095
|
+
|
|
1096
|
+
t = parse_now("last winter", :guess => false)
|
|
1097
|
+
assert_equal Time.local(2005, 12, 22), t.begin
|
|
1098
|
+
assert_equal Time.local(2006, 3, 19), t.end
|
|
1099
|
+
|
|
1100
|
+
t = parse_now("next spring", :guess => false)
|
|
1101
|
+
assert_equal Time.local(2007, 3, 20), t.begin
|
|
1102
|
+
assert_equal Time.local(2007, 6, 20), t.end
|
|
1103
|
+
end
|
|
1104
|
+
|
|
1105
|
+
# regression
|
|
1106
|
+
|
|
1107
|
+
# def test_partial
|
|
1108
|
+
# assert_equal '', parse_now("2 hours")
|
|
1109
|
+
# end
|
|
1110
|
+
|
|
1111
|
+
def test_days_in_november
|
|
1112
|
+
t1 = Chronic.parse('1st thursday in november', :now => Time.local(2007))
|
|
1113
|
+
assert_equal Time.local(2007, 11, 1, 12), t1
|
|
1114
|
+
|
|
1115
|
+
t1 = Chronic.parse('1st friday in november', :now => Time.local(2007))
|
|
1116
|
+
assert_equal Time.local(2007, 11, 2, 12), t1
|
|
1117
|
+
|
|
1118
|
+
t1 = Chronic.parse('1st saturday in november', :now => Time.local(2007))
|
|
1119
|
+
assert_equal Time.local(2007, 11, 3, 12), t1
|
|
1120
|
+
|
|
1121
|
+
# t1 = Chronic.parse('1st sunday in november', :now => Time.local(2007))
|
|
1122
|
+
# assert_equal Time.local(2007, 11, 4, 12), t1
|
|
1123
|
+
|
|
1124
|
+
# Chronic.debug = true
|
|
1125
|
+
#
|
|
1126
|
+
# t1 = Chronic.parse('1st monday in november', :now => Time.local(2007))
|
|
1127
|
+
# assert_equal Time.local(2007, 11, 5, 11), t1
|
|
1128
|
+
end
|
|
1129
|
+
|
|
1130
|
+
def test_now_changes
|
|
1131
|
+
t1 = Chronic.parse("now")
|
|
1132
|
+
sleep 0.1
|
|
1133
|
+
t2 = Chronic.parse("now")
|
|
1134
|
+
refute_equal t1, t2
|
|
1135
|
+
end
|
|
1136
|
+
|
|
1137
|
+
def test_noon
|
|
1138
|
+
t1 = Chronic.parse('2011-01-01 at noon', :ambiguous_time_range => :none)
|
|
1139
|
+
assert_equal Time.local(2011, 1, 1, 12, 0), t1
|
|
1140
|
+
end
|
|
1141
|
+
|
|
1142
|
+
def test_handle_rdn_rmn_sd
|
|
1143
|
+
time = parse_now("Thu Aug 10")
|
|
1144
|
+
assert_equal Time.local(2006, 8, 10, 12), time
|
|
1145
|
+
|
|
1146
|
+
time = parse_now("Thursday July 31")
|
|
1147
|
+
assert_equal Time.local(2006, 7, 31, 12), time
|
|
1148
|
+
|
|
1149
|
+
time = parse_now("Thursday December 31")
|
|
1150
|
+
assert_equal Time.local(2006, 12, 31, 12), time
|
|
1151
|
+
end
|
|
1152
|
+
|
|
1153
|
+
def test_handle_rdn_rmn_sd_rt
|
|
1154
|
+
time = parse_now("Thu Aug 10 4pm")
|
|
1155
|
+
assert_equal Time.local(2006, 8, 10, 16), time
|
|
1156
|
+
|
|
1157
|
+
time = parse_now("Thu Aug 10 at 4pm")
|
|
1158
|
+
assert_equal Time.local(2006, 8, 10, 16), time
|
|
1159
|
+
end
|
|
1160
|
+
|
|
1161
|
+
def test_handle_rdn_rmn_od_rt
|
|
1162
|
+
time = parse_now("Thu Aug 10th at 4pm")
|
|
1163
|
+
assert_equal Time.local(2006, 8, 10, 16), time
|
|
1164
|
+
end
|
|
1165
|
+
|
|
1166
|
+
def test_handle_rdn_od_rt
|
|
1167
|
+
time = parse_now("Thu 17th at 4pm")
|
|
1168
|
+
assert_equal Time.local(2006, 8, 17, 16), time
|
|
1169
|
+
|
|
1170
|
+
time = parse_now("Thu 16th at 4pm")
|
|
1171
|
+
assert_equal Time.local(2006, 8, 16, 16), time
|
|
1172
|
+
|
|
1173
|
+
time = parse_now("Thu 1st at 4pm")
|
|
1174
|
+
assert_equal Time.local(2006, 9, 1, 16), time
|
|
1175
|
+
|
|
1176
|
+
time = parse_now("Thu 1st at 4pm", :context => :past)
|
|
1177
|
+
assert_equal Time.local(2006, 8, 1, 16), time
|
|
1178
|
+
end
|
|
1179
|
+
|
|
1180
|
+
def test_handle_rdn_od
|
|
1181
|
+
time = parse_now("Thu 17th")
|
|
1182
|
+
assert_equal Time.local(2006, 8, 17, 12), time
|
|
1183
|
+
end
|
|
1184
|
+
|
|
1185
|
+
def test_handle_rdn_rmn_sd_sy
|
|
1186
|
+
time = parse_now("Thu Aug 10 2006")
|
|
1187
|
+
assert_equal Time.local(2006, 8, 10, 12), time
|
|
1188
|
+
|
|
1189
|
+
time = parse_now("Thursday July 31 2006")
|
|
1190
|
+
assert_equal Time.local(2006, 7, 31, 12), time
|
|
1191
|
+
|
|
1192
|
+
time = parse_now("Thursday December 31 2006")
|
|
1193
|
+
assert_equal Time.local(2006, 12, 31, 12), time
|
|
1194
|
+
|
|
1195
|
+
time = parse_now("Thursday December 30 2006")
|
|
1196
|
+
assert_equal Time.local(2006, 12, 30, 12), time
|
|
1197
|
+
end
|
|
1198
|
+
|
|
1199
|
+
def test_handle_rdn_rmn_od
|
|
1200
|
+
time = parse_now("Thu Aug 10th")
|
|
1201
|
+
assert_equal Time.local(2006, 8, 10, 12), time
|
|
1202
|
+
|
|
1203
|
+
time = parse_now("Thursday July 31st")
|
|
1204
|
+
assert_equal Time.local(2006, 7, 31, 12), time
|
|
1205
|
+
|
|
1206
|
+
time = parse_now("Thursday December 31st")
|
|
1207
|
+
assert_equal Time.local(2006, 12, 31, 12), time
|
|
1208
|
+
end
|
|
1209
|
+
|
|
1210
|
+
def test_handle_rdn_rmn_od_sy
|
|
1211
|
+
time = parse_now("Thu Aug 10th 2005")
|
|
1212
|
+
assert_equal Time.local(2005, 8, 10, 12), time
|
|
1213
|
+
|
|
1214
|
+
time = parse_now("Thursday July 31st 2005")
|
|
1215
|
+
assert_equal Time.local(2005, 7, 31, 12), time
|
|
1216
|
+
|
|
1217
|
+
time = parse_now("Thursday December 31st 2005")
|
|
1218
|
+
assert_equal Time.local(2005, 12, 31, 12), time
|
|
1219
|
+
|
|
1220
|
+
time = parse_now("Thursday December 30th 2005")
|
|
1221
|
+
assert_equal Time.local(2005, 12, 30, 12), time
|
|
1222
|
+
end
|
|
1223
|
+
|
|
1224
|
+
def test_normalizing_day_portions
|
|
1225
|
+
assert_equal pre_normalize("8:00 pm February 11"), pre_normalize("8:00 p.m. February 11")
|
|
1226
|
+
end
|
|
1227
|
+
|
|
588
1228
|
private
|
|
589
1229
|
def parse_now(string, options={})
|
|
590
1230
|
Chronic.parse(string, {:now => TIME_2006_08_16_14_00_00 }.merge(options))
|
|
591
1231
|
end
|
|
592
|
-
|
|
1232
|
+
def pre_normalize(s)
|
|
1233
|
+
Chronic::Parser.new.pre_normalize s
|
|
1234
|
+
end
|
|
1235
|
+
end
|