chronic 0.1.5 → 0.6.5

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.
Files changed (68) hide show
  1. data/.gemtest +0 -0
  2. data/.gitignore +5 -0
  3. data/.yardopts +3 -0
  4. data/HISTORY.md +180 -0
  5. data/LICENSE +21 -0
  6. data/README.md +176 -0
  7. data/Rakefile +39 -32
  8. data/chronic.gemspec +17 -0
  9. data/lib/chronic/chronic.rb +294 -208
  10. data/lib/chronic/grabber.rb +22 -17
  11. data/lib/chronic/handler.rb +90 -0
  12. data/lib/chronic/handlers.rb +365 -278
  13. data/lib/chronic/mini_date.rb +38 -0
  14. data/lib/chronic/numerizer.rb +121 -0
  15. data/lib/chronic/ordinal.rb +23 -19
  16. data/lib/chronic/pointer.rb +20 -17
  17. data/lib/chronic/repeater.rb +126 -105
  18. data/lib/chronic/repeaters/repeater_day.rb +49 -43
  19. data/lib/chronic/repeaters/repeater_day_name.rb +48 -42
  20. data/lib/chronic/repeaters/repeater_day_portion.rb +81 -80
  21. data/lib/chronic/repeaters/repeater_fortnight.rb +59 -53
  22. data/lib/chronic/repeaters/repeater_hour.rb +49 -43
  23. data/lib/chronic/repeaters/repeater_minute.rb +55 -39
  24. data/lib/chronic/repeaters/repeater_month.rb +77 -55
  25. data/lib/chronic/repeaters/repeater_month_name.rb +83 -82
  26. data/lib/chronic/repeaters/repeater_season.rb +107 -21
  27. data/lib/chronic/repeaters/repeater_season_name.rb +41 -22
  28. data/lib/chronic/repeaters/repeater_second.rb +39 -33
  29. data/lib/chronic/repeaters/repeater_time.rb +117 -103
  30. data/lib/chronic/repeaters/repeater_week.rb +63 -57
  31. data/lib/chronic/repeaters/repeater_weekday.rb +85 -0
  32. data/lib/chronic/repeaters/repeater_weekend.rb +64 -9
  33. data/lib/chronic/repeaters/repeater_year.rb +70 -51
  34. data/lib/chronic/scalar.rb +64 -29
  35. data/lib/chronic/season.rb +37 -0
  36. data/lib/chronic/separator.rb +50 -38
  37. data/lib/chronic/span.rb +31 -0
  38. data/lib/chronic/tag.rb +42 -0
  39. data/lib/chronic/time_zone.rb +30 -0
  40. data/lib/chronic/token.rb +45 -0
  41. data/lib/chronic.rb +86 -22
  42. data/test/helper.rb +6 -0
  43. data/test/test_Chronic.rb +118 -20
  44. data/test/test_DaylightSavings.rb +118 -0
  45. data/test/test_Handler.rb +36 -42
  46. data/test/test_MiniDate.rb +32 -0
  47. data/test/test_Numerizer.rb +72 -0
  48. data/test/test_RepeaterDayName.rb +15 -16
  49. data/test/test_RepeaterFortnight.rb +16 -17
  50. data/test/test_RepeaterHour.rb +22 -19
  51. data/test/test_RepeaterMinute.rb +34 -0
  52. data/test/test_RepeaterMonth.rb +20 -17
  53. data/test/test_RepeaterMonthName.rb +17 -18
  54. data/test/test_RepeaterSeason.rb +40 -0
  55. data/test/test_RepeaterTime.rb +20 -22
  56. data/test/test_RepeaterWeek.rb +16 -17
  57. data/test/test_RepeaterWeekday.rb +55 -0
  58. data/test/test_RepeaterWeekend.rb +74 -0
  59. data/test/test_RepeaterYear.rb +24 -18
  60. data/test/test_Span.rb +5 -6
  61. data/test/test_Token.rb +5 -6
  62. data/test/test_parsing.rb +743 -338
  63. metadata +81 -54
  64. data/History.txt +0 -29
  65. data/Manifest.txt +0 -43
  66. data/README.txt +0 -149
  67. data/test/parse_numbers.rb +0 -50
  68. data/test/suite.rb +0 -9
data/test/test_parsing.rb CHANGED
@@ -1,507 +1,912 @@
1
- require 'chronic'
2
- require 'test/unit'
1
+ require 'helper'
3
2
 
4
3
  class TestParsing < Test::Unit::TestCase
5
-
4
+ # Wed Aug 16 14:00:00 UTC 2006
5
+ TIME_2006_08_16_14_00_00 = Time.local(2006, 8, 16, 14, 0, 0, 0)
6
+
6
7
  def setup
7
- # Wed Aug 16 14:00:00 UTC 2006
8
- @time_2006_08_16_14_00_00 = Time.local(2006, 8, 16, 14, 0, 0, 0)
9
- @time_2006_08_16_03_00_00 = Time.local(2006, 8, 16, 3, 0, 0, 0)
8
+ @time_2006_08_16_14_00_00 = TIME_2006_08_16_14_00_00
10
9
  end
11
-
12
- def test__parse_guess_dates
13
- # rm_sd
14
10
 
15
- time = Chronic.parse("may 27", :now => @time_2006_08_16_14_00_00)
11
+ def test_handle_rmn_sd
12
+ time = parse_now("aug 3")
13
+ assert_equal Time.local(2006, 8, 3, 12), time
14
+
15
+ time = parse_now("aug 3", :context => :past)
16
+ assert_equal Time.local(2006, 8, 3, 12), time
17
+
18
+ time = parse_now("aug 20")
19
+ assert_equal Time.local(2006, 8, 20, 12), time
20
+
21
+ time = parse_now("aug 20", :context => :future)
22
+ assert_equal Time.local(2006, 8, 20, 12), time
23
+
24
+ time = parse_now("may 27")
16
25
  assert_equal Time.local(2007, 5, 27, 12), time
17
-
18
- time = Chronic.parse("may 28", :now => @time_2006_08_16_14_00_00, :context => :past)
26
+
27
+ time = parse_now("may 28", :context => :past)
19
28
  assert_equal Time.local(2006, 5, 28, 12), time
20
-
21
- time = Chronic.parse("may 28 5pm", :now => @time_2006_08_16_14_00_00, :context => :past)
29
+
30
+ time = parse_now("may 28 5pm", :context => :past)
22
31
  assert_equal Time.local(2006, 5, 28, 17), time
23
-
24
- time = Chronic.parse("may 28 at 5pm", :now => @time_2006_08_16_14_00_00, :context => :past)
32
+
33
+ time = parse_now("may 28 at 5pm", :context => :past)
25
34
  assert_equal Time.local(2006, 5, 28, 17), time
26
-
27
- time = Chronic.parse("may 28 at 5:32.19pm", :now => @time_2006_08_16_14_00_00, :context => :past)
35
+
36
+ time = parse_now("may 28 at 5:32.19pm", :context => :past)
28
37
  assert_equal Time.local(2006, 5, 28, 17, 32, 19), time
29
-
30
- # rm_od
31
-
32
- time = Chronic.parse("may 27th", :now => @time_2006_08_16_14_00_00)
38
+ end
39
+
40
+ def test_handle_rmn_sd_on
41
+ time = parse_now("5pm on may 28")
42
+ assert_equal Time.local(2007, 5, 28, 17), time
43
+
44
+ time = parse_now("5pm may 28")
45
+ assert_equal Time.local(2007, 5, 28, 17), time
46
+
47
+ time = parse_now("5 on may 28", :ambiguous_time_range => :none)
48
+ assert_equal Time.local(2007, 5, 28, 05), time
49
+ end
50
+
51
+ def test_handle_rmn_od
52
+ time = parse_now("may 27th")
33
53
  assert_equal Time.local(2007, 5, 27, 12), time
34
-
35
- time = Chronic.parse("may 27th", :now => @time_2006_08_16_14_00_00, :context => :past)
54
+
55
+ time = parse_now("may 27th", :context => :past)
36
56
  assert_equal Time.local(2006, 5, 27, 12), time
37
-
38
- time = Chronic.parse("may 27th 5:00 pm", :now => @time_2006_08_16_14_00_00, :context => :past)
57
+
58
+ time = parse_now("may 27th 5:00 pm", :context => :past)
39
59
  assert_equal Time.local(2006, 5, 27, 17), time
40
-
41
- time = Chronic.parse("may 27th at 5pm", :now => @time_2006_08_16_14_00_00, :context => :past)
60
+
61
+ time = parse_now("may 27th at 5pm", :context => :past)
42
62
  assert_equal Time.local(2006, 5, 27, 17), time
43
-
44
- time = Chronic.parse("may 27th at 5", :now => @time_2006_08_16_14_00_00, :ambiguous_time_range => :none)
63
+
64
+ time = parse_now("may 27th at 5", :ambiguous_time_range => :none)
45
65
  assert_equal Time.local(2007, 5, 27, 5), time
46
-
47
- # rm_sy
48
-
49
- time = Chronic.parse("June 1979", :now => @time_2006_08_16_14_00_00)
50
- assert_equal Time.local(1979, 6, 16, 0), time
51
-
52
- time = Chronic.parse("dec 79", :now => @time_2006_08_16_14_00_00)
53
- assert_equal Time.local(1979, 12, 16, 12), time
54
-
55
- # rm_sd_sy
56
-
57
- time = Chronic.parse("jan 3 2010", :now => @time_2006_08_16_14_00_00)
66
+ end
67
+
68
+ def test_handle_od_rmn
69
+ time = parse_now("22nd February")
70
+ assert_equal Time.local(2007, 2, 22, 12), time
71
+
72
+ time = parse_now("31st of may at 6:30pm")
73
+ assert_equal Time.local(2007, 5, 31, 18, 30), time
74
+
75
+ time = parse_now("11th december 8am")
76
+ assert_equal Time.local(2006, 12, 11, 8), time
77
+ end
78
+
79
+ def test_handle_sy_rmn_od
80
+ time = parse_now("2009 May 22nd")
81
+ assert_equal Time.local(2009, 05, 22, 12), time
82
+ end
83
+
84
+ def test_handle_sd_rmn
85
+ time = parse_now("22 February")
86
+ assert_equal Time.local(2007, 2, 22, 12), time
87
+
88
+ time = parse_now("31 of may at 6:30pm")
89
+ assert_equal Time.local(2007, 5, 31, 18, 30), time
90
+
91
+ time = parse_now("11 december 8am")
92
+ assert_equal Time.local(2006, 12, 11, 8), time
93
+ end
94
+
95
+ def test_handle_rmn_od_on
96
+ time = parse_now("5:00 pm may 27th", :context => :past)
97
+ assert_equal Time.local(2006, 5, 27, 17), time
98
+
99
+ time = parse_now("05:00 pm may 27th", :context => :past)
100
+ assert_equal Time.local(2006, 5, 27, 17), time
101
+
102
+ time = parse_now("5pm on may 27th", :context => :past)
103
+ assert_equal Time.local(2006, 5, 27, 17), time
104
+
105
+ time = parse_now("5 on may 27th", :ambiguous_time_range => :none)
106
+ assert_equal Time.local(2007, 5, 27, 5), time
107
+ end
108
+
109
+ def test_handle_rmn_sy
110
+ time = parse_now("may 97")
111
+ assert_equal Time.local(1997, 5, 16, 12), time
112
+
113
+ time = parse_now("may 33", :ambiguous_year_future_bias => 10)
114
+ assert_equal Time.local(2033, 5, 16, 12), time
115
+
116
+ time = parse_now("may 32")
117
+ assert_equal Time.local(2032, 5, 16, 12, 0, 0), time
118
+ end
119
+
120
+ def test_handle_rdn_rmn_sd_t_tz_sy
121
+ time = parse_now("Mon Apr 02 17:00:00 PDT 2007")
122
+ assert_equal 1175558400, time.to_i
123
+ end
124
+
125
+ def test_handle_sy_sm_sd_t_tz
126
+ time = parse_now("2011-07-03 22:11:35 +0100")
127
+ assert_equal 1309727495, time.to_i
128
+
129
+ time = parse_now("2011-07-03 22:11:35 +01:00")
130
+ assert_equal 1309727495, time.to_i
131
+
132
+ time = parse_now("2011-07-03 21:11:35 UTC")
133
+ assert_equal 1309727495, time.to_i
134
+ end
135
+
136
+ def test_handle_rmn_sd_sy
137
+ time = parse_now("November 18, 2010")
138
+ assert_equal Time.local(2010, 11, 18, 12), time
139
+
140
+ time = parse_now("Jan 1,2010")
141
+ assert_equal Time.local(2010, 1, 1, 12), time
142
+
143
+ time = parse_now("February 14, 2004")
144
+ assert_equal Time.local(2004, 2, 14, 12), time
145
+
146
+ time = parse_now("jan 3 2010")
58
147
  assert_equal Time.local(2010, 1, 3, 12), time
59
-
60
- time = Chronic.parse("jan 3 2010 midnight", :now => @time_2006_08_16_14_00_00)
148
+
149
+ time = parse_now("jan 3 2010 midnight")
61
150
  assert_equal Time.local(2010, 1, 4, 0), time
62
-
63
- time = Chronic.parse("jan 3 2010 at midnight", :now => @time_2006_08_16_14_00_00)
151
+
152
+ time = parse_now("jan 3 2010 at midnight")
64
153
  assert_equal Time.local(2010, 1, 4, 0), time
65
-
66
- time = Chronic.parse("jan 3 2010 at 4", :now => @time_2006_08_16_14_00_00, :ambiguous_time_range => :none)
154
+
155
+ time = parse_now("jan 3 2010 at 4", :ambiguous_time_range => :none)
67
156
  assert_equal Time.local(2010, 1, 3, 4), time
68
-
69
- #time = Chronic.parse("January 12, '00", :now => @time_2006_08_16_14_00_00)
70
- #assert_equal Time.local(2000, 1, 12, 12), time
71
-
72
- time = Chronic.parse("may 27 79", :now => @time_2006_08_16_14_00_00)
157
+
158
+ time = parse_now("may 27, 1979")
73
159
  assert_equal Time.local(1979, 5, 27, 12), time
74
-
75
- time = Chronic.parse("may 27 79 4:30", :now => @time_2006_08_16_14_00_00)
160
+
161
+ time = parse_now("may 27 79")
162
+ assert_equal Time.local(1979, 5, 27, 12), time
163
+
164
+ time = parse_now("may 27 79 4:30")
76
165
  assert_equal Time.local(1979, 5, 27, 16, 30), time
77
-
78
- time = Chronic.parse("may 27 79 at 4:30", :now => @time_2006_08_16_14_00_00, :ambiguous_time_range => :none)
166
+
167
+ time = parse_now("may 27 79 at 4:30", :ambiguous_time_range => :none)
79
168
  assert_equal Time.local(1979, 5, 27, 4, 30), time
80
-
81
- # sd_rm_sy
82
169
 
83
- time = Chronic.parse("3 jan 2010", :now => @time_2006_08_16_14_00_00)
170
+ time = parse_now("may 27 32")
171
+ assert_equal Time.local(2032, 5, 27, 12, 0, 0), time
172
+ end
173
+
174
+ def test_handle_rmn_od_sy
175
+ time = parse_now("may 1st 01")
176
+ assert_equal Time.local(2001, 5, 1, 12), time
177
+
178
+ time = parse_now("November 18th 2010")
179
+ assert_equal Time.local(2010, 11, 18, 12), time
180
+
181
+ time = parse_now("November 18th, 2010")
182
+ assert_equal Time.local(2010, 11, 18, 12), time
183
+
184
+ time = parse_now("November 18th 2010 midnight")
185
+ assert_equal Time.local(2010, 11, 19, 0), time
186
+
187
+ time = parse_now("November 18th 2010 at midnight")
188
+ assert_equal Time.local(2010, 11, 19, 0), time
189
+
190
+ time = parse_now("November 18th 2010 at 4")
191
+ assert_equal Time.local(2010, 11, 18, 16), time
192
+
193
+ time = parse_now("November 18th 2010 at 4", :ambiguous_time_range => :none)
194
+ assert_equal Time.local(2010, 11, 18, 4), time
195
+
196
+ time = parse_now("March 30th, 1979")
197
+ assert_equal Time.local(1979, 3, 30, 12), time
198
+
199
+ time = parse_now("March 30th 79")
200
+ assert_equal Time.local(1979, 3, 30, 12), time
201
+
202
+ time = parse_now("March 30th 79 4:30")
203
+ assert_equal Time.local(1979, 3, 30, 16, 30), time
204
+
205
+ time = parse_now("March 30th 79 at 4:30", :ambiguous_time_range => :none)
206
+ assert_equal Time.local(1979, 3, 30, 4, 30), time
207
+ end
208
+
209
+ def test_handle_od_rmn_sy
210
+ time = parse_now("22nd February 2012")
211
+ assert_equal Time.local(2012, 2, 22, 12), time
212
+
213
+ time = parse_now("11th december 79")
214
+ assert_equal Time.local(1979, 12, 11, 12), time
215
+ end
216
+
217
+ def test_handle_sd_rmn_sy
218
+ time = parse_now("3 jan 2010")
84
219
  assert_equal Time.local(2010, 1, 3, 12), time
85
-
86
- time = Chronic.parse("3 jan 2010 4pm", :now => @time_2006_08_16_14_00_00)
220
+
221
+ time = parse_now("3 jan 2010 4pm")
87
222
  assert_equal Time.local(2010, 1, 3, 16), time
88
-
89
- # sm_sd_sy
90
-
91
- time = Chronic.parse("5/27/1979", :now => @time_2006_08_16_14_00_00)
223
+
224
+ time = parse_now("27 Oct 2006 7:30pm")
225
+ assert_equal Time.local(2006, 10, 27, 19, 30), time
226
+ end
227
+
228
+ def test_handle_sm_sd_sy
229
+ time = parse_now("5/27/1979")
92
230
  assert_equal Time.local(1979, 5, 27, 12), time
93
-
94
- time = Chronic.parse("5/27/1979 4am", :now => @time_2006_08_16_14_00_00)
231
+
232
+ time = parse_now("5/27/1979 4am")
95
233
  assert_equal Time.local(1979, 5, 27, 4), time
96
-
97
- # sd_sm_sy
98
-
99
- time = Chronic.parse("27/5/1979", :now => @time_2006_08_16_14_00_00)
234
+
235
+ time = parse_now("7/12/11")
236
+ assert_equal Time.local(2011, 7, 12, 12), time
237
+
238
+ time = parse_now("7/12/11", :endian_precedence => :little)
239
+ assert_equal Time.local(2011, 12, 7, 12), time
240
+
241
+ time = parse_now("9/19/2011 6:05:57 PM")
242
+ assert_equal Time.local(2011, 9, 19, 18, 05, 57), time
243
+
244
+ # month day overflows
245
+ time = parse_now("30/2/2000")
246
+ assert_nil time
247
+ end
248
+
249
+ def test_handle_sd_sm_sy
250
+ time = parse_now("27/5/1979")
100
251
  assert_equal Time.local(1979, 5, 27, 12), time
101
-
102
- time = Chronic.parse("27/5/1979 @ 0700", :now => @time_2006_08_16_14_00_00)
252
+
253
+ time = parse_now("27/5/1979 @ 0700")
103
254
  assert_equal Time.local(1979, 5, 27, 7), time
104
-
105
- # sm_sy
106
-
107
- time = Chronic.parse("05/06", :now => @time_2006_08_16_14_00_00)
108
- assert_equal Time.local(2006, 5, 16, 12), time
109
-
110
- time = Chronic.parse("12/06", :now => @time_2006_08_16_14_00_00)
111
- assert_equal Time.local(2006, 12, 16, 12), time
112
-
113
- time = Chronic.parse("13/06", :now => @time_2006_08_16_14_00_00)
114
- assert_equal nil, time
115
-
116
- # sy_sm_sd
117
-
118
- time = Chronic.parse("2000-1-1", :now => @time_2006_08_16_14_00_00)
255
+ end
256
+
257
+ def test_handle_sy_sm_sd
258
+ time = parse_now("2000-1-1")
119
259
  assert_equal Time.local(2000, 1, 1, 12), time
120
-
121
- time = Chronic.parse("2006-08-20", :now => @time_2006_08_16_14_00_00)
260
+
261
+ time = parse_now("2006-08-20")
122
262
  assert_equal Time.local(2006, 8, 20, 12), time
123
-
124
- time = Chronic.parse("2006-08-20 7pm", :now => @time_2006_08_16_14_00_00)
263
+
264
+ time = parse_now("2006-08-20 7pm")
125
265
  assert_equal Time.local(2006, 8, 20, 19), time
126
-
127
- time = Chronic.parse("2006-08-20 03:00", :now => @time_2006_08_16_14_00_00)
266
+
267
+ time = parse_now("2006-08-20 03:00")
128
268
  assert_equal Time.local(2006, 8, 20, 3), time
129
-
130
- time = Chronic.parse("2006-08-20 03:30:30", :now => @time_2006_08_16_14_00_00)
269
+
270
+ time = parse_now("2006-08-20 03:30:30")
131
271
  assert_equal Time.local(2006, 8, 20, 3, 30, 30), time
132
-
133
- time = Chronic.parse("2006-08-20 15:30:30", :now => @time_2006_08_16_14_00_00)
272
+
273
+ time = parse_now("2006-08-20 15:30:30")
134
274
  assert_equal Time.local(2006, 8, 20, 15, 30, 30), time
135
-
136
- time = Chronic.parse("2006-08-20 15:30.30", :now => @time_2006_08_16_14_00_00)
275
+
276
+ time = parse_now("2006-08-20 15:30.30")
137
277
  assert_equal Time.local(2006, 8, 20, 15, 30, 30), time
138
-
139
- # rm_sd_rt
140
-
141
- #time = Chronic.parse("jan 5 13:00", :now => @time_2006_08_16_14_00_00)
142
- #assert_equal Time.local(2007, 1, 5, 13), time
143
-
144
- # due to limitations of the Time class, these don't work
145
-
146
- time = Chronic.parse("may 40", :now => @time_2006_08_16_14_00_00)
278
+
279
+ time = parse_now("1902-08-20")
280
+ assert_equal Time.local(1902, 8, 20, 12, 0, 0), time
281
+ end
282
+
283
+ def test_handle_sm_sy
284
+ time = parse_now("05/06")
285
+ assert_equal Time.local(2006, 5, 16, 12), time
286
+
287
+ time = parse_now("12/06")
288
+ assert_equal Time.local(2006, 12, 16, 12), time
289
+
290
+ time = parse_now("13/06")
147
291
  assert_equal nil, time
148
-
149
- time = Chronic.parse("may 27 40", :now => @time_2006_08_16_14_00_00)
292
+ end
293
+
294
+ def test_handle_r
295
+ end
296
+
297
+ def test_handle_r_g_r
298
+ end
299
+
300
+ def test_handle_srp
301
+ end
302
+
303
+ def test_handle_s_r_p
304
+ end
305
+
306
+ def test_handle_p_s_r
307
+ end
308
+
309
+ def test_handle_s_r_p_a
310
+ end
311
+
312
+ def test_handle_orr
313
+ time = parse_now("5th tuesday in january")
314
+ assert_equal Time.local(2007, 01, 30, 12), time
315
+
316
+ time = parse_now("5th tuesday in february")
150
317
  assert_equal nil, time
151
-
152
- time = Chronic.parse("1800-08-20", :now => @time_2006_08_16_14_00_00)
318
+
319
+ %W(jan feb march april may june july aug sep oct nov dec).each_with_index do |month, index|
320
+ time = parse_now("5th tuesday in #{month}")
321
+
322
+ if time then
323
+ assert_equal time.month, index+1
324
+ end
325
+ end
326
+ end
327
+
328
+ def test_handle_o_r_s_r
329
+ time = parse_now("3rd wednesday in november")
330
+ assert_equal Time.local(2006, 11, 15, 12), time
331
+
332
+ time = parse_now("10th wednesday in november")
153
333
  assert_equal nil, time
334
+
335
+ # time = parse_now("3rd wednesday in 2007")
336
+ # assert_equal Time.local(2007, 1, 20, 12), time
154
337
  end
155
338
 
339
+ def test_handle_o_r_g_r
340
+ time = parse_now("3rd month next year", :guess => false)
341
+ assert_equal Time.local(2007, 3), time.begin
342
+
343
+ time = parse_now("3rd month next year", :guess => false)
344
+ assert_equal Time.local(2007, 3, 1), time.begin
345
+
346
+ time = parse_now("3rd thursday this september")
347
+ assert_equal Time.local(2006, 9, 21, 12), time
348
+
349
+ now = Time.parse("1/10/2010")
350
+ time = parse_now("3rd thursday this november", :now => now)
351
+ assert_equal Time.local(2010, 11, 18, 12), time
352
+
353
+ time = parse_now("4th day last week")
354
+ assert_equal Time.local(2006, 8, 9, 12), time
355
+ end
356
+
357
+ # end of testing handlers
358
+
156
359
  def test_parse_guess_r
157
- time = Chronic.parse("friday", :now => @time_2006_08_16_14_00_00)
360
+ time = parse_now("friday")
158
361
  assert_equal Time.local(2006, 8, 18, 12), time
159
-
160
- time = Chronic.parse("5", :now => @time_2006_08_16_14_00_00)
362
+
363
+ time = parse_now("tue")
364
+ assert_equal Time.local(2006, 8, 22, 12), time
365
+
366
+ time = parse_now("5")
161
367
  assert_equal Time.local(2006, 8, 16, 17), time
162
-
163
- time = Chronic.parse("5", :now => @time_2006_08_16_03_00_00, :ambiguous_time_range => :none)
368
+
369
+ time = Chronic.parse("5", :now => Time.local(2006, 8, 16, 3, 0, 0, 0), :ambiguous_time_range => :none)
164
370
  assert_equal Time.local(2006, 8, 16, 5), time
165
-
166
- time = Chronic.parse("13:00", :now => @time_2006_08_16_14_00_00)
371
+
372
+ time = parse_now("13:00")
167
373
  assert_equal Time.local(2006, 8, 17, 13), time
168
-
169
- time = Chronic.parse("13:45", :now => @time_2006_08_16_14_00_00)
374
+
375
+ time = parse_now("13:45")
170
376
  assert_equal Time.local(2006, 8, 17, 13, 45), time
171
-
172
- time = Chronic.parse("november", :now => @time_2006_08_16_14_00_00)
377
+
378
+ time = parse_now("1:01pm")
379
+ assert_equal Time.local(2006, 8, 16, 13, 01), time
380
+
381
+ time = parse_now("2:01pm")
382
+ assert_equal Time.local(2006, 8, 16, 14, 01), time
383
+
384
+ time = parse_now("november")
173
385
  assert_equal Time.local(2006, 11, 16), time
174
386
  end
175
-
387
+
176
388
  def test_parse_guess_rr
177
- time = Chronic.parse("friday 13:00", :now => @time_2006_08_16_14_00_00)
389
+ time = parse_now("friday 13:00")
178
390
  assert_equal Time.local(2006, 8, 18, 13), time
179
-
180
- time = Chronic.parse("monday 4:00", :now => @time_2006_08_16_14_00_00)
391
+
392
+ time = parse_now("monday 4:00")
181
393
  assert_equal Time.local(2006, 8, 21, 16), time
182
-
183
- time = Chronic.parse("sat 4:00", :now => @time_2006_08_16_14_00_00, :ambiguous_time_range => :none)
394
+
395
+ time = parse_now("sat 4:00", :ambiguous_time_range => :none)
184
396
  assert_equal Time.local(2006, 8, 19, 4), time
185
-
186
- time = Chronic.parse("sunday 4:20", :now => @time_2006_08_16_14_00_00, :ambiguous_time_range => :none)
397
+
398
+ time = parse_now("sunday 4:20", :ambiguous_time_range => :none)
187
399
  assert_equal Time.local(2006, 8, 20, 4, 20), time
188
-
189
- time = Chronic.parse("4 pm", :now => @time_2006_08_16_14_00_00)
400
+
401
+ time = parse_now("4 pm")
190
402
  assert_equal Time.local(2006, 8, 16, 16), time
191
-
192
- time = Chronic.parse("4 am", :now => @time_2006_08_16_14_00_00, :ambiguous_time_range => :none)
403
+
404
+ time = parse_now("4 am", :ambiguous_time_range => :none)
193
405
  assert_equal Time.local(2006, 8, 16, 4), time
194
-
195
- time = Chronic.parse("4:00 in the morning", :now => @time_2006_08_16_14_00_00)
406
+
407
+ time = parse_now("12 pm")
408
+ assert_equal Time.local(2006, 8, 16, 12), time
409
+
410
+ time = parse_now("12:01 pm")
411
+ assert_equal Time.local(2006, 8, 16, 12, 1), time
412
+
413
+ time = parse_now("12:01 am")
414
+ assert_equal Time.local(2006, 8, 16, 0, 1), time
415
+
416
+ time = parse_now("12 am")
417
+ assert_equal Time.local(2006, 8, 16), time
418
+
419
+ time = parse_now("4:00 in the morning")
196
420
  assert_equal Time.local(2006, 8, 16, 4), time
197
-
198
- time = Chronic.parse("november 4", :now => @time_2006_08_16_14_00_00)
421
+
422
+ time = parse_now("0:10")
423
+ assert_equal Time.local(2006, 8, 17, 0, 10), time
424
+
425
+ time = parse_now("november 4")
199
426
  assert_equal Time.local(2006, 11, 4, 12), time
200
-
201
- time = Chronic.parse("aug 24", :now => @time_2006_08_16_14_00_00)
427
+
428
+ time = parse_now("aug 24")
202
429
  assert_equal Time.local(2006, 8, 24, 12), time
203
430
  end
204
-
431
+
205
432
  def test_parse_guess_rrr
206
- time = Chronic.parse("friday 1 pm", :now => @time_2006_08_16_14_00_00)
433
+ time = parse_now("friday 1 pm")
207
434
  assert_equal Time.local(2006, 8, 18, 13), time
208
-
209
- time = Chronic.parse("friday 11 at night", :now => @time_2006_08_16_14_00_00)
435
+
436
+ time = parse_now("friday 11 at night")
210
437
  assert_equal Time.local(2006, 8, 18, 23), time
211
-
212
- time = Chronic.parse("friday 11 in the evening", :now => @time_2006_08_16_14_00_00)
438
+
439
+ time = parse_now("friday 11 in the evening")
213
440
  assert_equal Time.local(2006, 8, 18, 23), time
214
-
215
- time = Chronic.parse("sunday 6am", :now => @time_2006_08_16_14_00_00)
441
+
442
+ time = parse_now("sunday 6am")
216
443
  assert_equal Time.local(2006, 8, 20, 6), time
444
+
445
+ time = parse_now("friday evening at 7")
446
+ assert_equal Time.local(2006, 8, 18, 19), time
217
447
  end
218
-
448
+
219
449
  def test_parse_guess_gr
220
450
  # year
221
-
222
- time = Chronic.parse("this year", :now => @time_2006_08_16_14_00_00)
223
- assert_equal Time.local(2006, 10, 24, 12, 30), time
224
-
225
- time = Chronic.parse("this year", :now => @time_2006_08_16_14_00_00, :context => :past)
226
- assert_equal Time.local(2006, 4, 24, 12, 30), time
227
-
451
+
452
+ time = parse_now("this year", :guess => false)
453
+ assert_equal Time.local(2006, 8, 17), time.begin
454
+
455
+ time = parse_now("this year", :context => :past, :guess => false)
456
+ assert_equal Time.local(2006, 1, 1), time.begin
457
+
228
458
  # month
229
-
230
- time = Chronic.parse("this month", :now => @time_2006_08_16_14_00_00)
459
+
460
+ time = parse_now("this month")
231
461
  assert_equal Time.local(2006, 8, 24, 12), time
232
-
233
- time = Chronic.parse("this month", :now => @time_2006_08_16_14_00_00, :context => :past)
462
+
463
+ time = parse_now("this month", :context => :past)
234
464
  assert_equal Time.local(2006, 8, 8, 12), time
235
-
465
+
466
+ time = Chronic.parse("next month", :now => Time.local(2006, 11, 15))
467
+ assert_equal Time.local(2006, 12, 16, 12), time
468
+
236
469
  # month name
237
-
238
- time = Chronic.parse("last november", :now => @time_2006_08_16_14_00_00)
470
+
471
+ time = parse_now("last november")
239
472
  assert_equal Time.local(2005, 11, 16), time
240
-
473
+
241
474
  # fortnight
242
-
243
- time = Chronic.parse("this fortnight", :now => @time_2006_08_16_14_00_00)
475
+
476
+ time = parse_now("this fortnight")
244
477
  assert_equal Time.local(2006, 8, 21, 19, 30), time
245
-
246
- time = Chronic.parse("this fortnight", :now => @time_2006_08_16_14_00_00, :context => :past)
478
+
479
+ time = parse_now("this fortnight", :context => :past)
247
480
  assert_equal Time.local(2006, 8, 14, 19), time
248
-
481
+
249
482
  # week
250
-
251
- time = Chronic.parse("this week", :now => @time_2006_08_16_14_00_00)
483
+
484
+ time = parse_now("this week")
252
485
  assert_equal Time.local(2006, 8, 18, 7, 30), time
253
-
254
- time = Chronic.parse("this week", :now => @time_2006_08_16_14_00_00, :context => :past)
486
+
487
+ time = parse_now("this week", :context => :past)
255
488
  assert_equal Time.local(2006, 8, 14, 19), time
256
-
489
+
490
+ # weekend
491
+
492
+ time = parse_now("this weekend")
493
+ assert_equal Time.local(2006, 8, 20), time
494
+
495
+ time = parse_now("this weekend", :context => :past)
496
+ assert_equal Time.local(2006, 8, 13), time
497
+
498
+ time = parse_now("last weekend")
499
+ assert_equal Time.local(2006, 8, 13), time
500
+
257
501
  # day
258
-
259
- time = Chronic.parse("this day", :now => @time_2006_08_16_14_00_00)
260
- assert_equal Time.local(2006, 8, 16, 19, 30), time
261
-
262
- time = Chronic.parse("this day", :now => @time_2006_08_16_14_00_00, :context => :past)
502
+
503
+ time = parse_now("this day")
504
+ assert_equal Time.local(2006, 8, 16, 19), time
505
+
506
+ time = parse_now("this day", :context => :past)
263
507
  assert_equal Time.local(2006, 8, 16, 7), time
264
-
265
- time = Chronic.parse("today", :now => @time_2006_08_16_14_00_00)
266
- assert_equal Time.local(2006, 8, 16, 19, 30), time
267
-
268
- time = Chronic.parse("yesterday", :now => @time_2006_08_16_14_00_00)
508
+
509
+ time = parse_now("today")
510
+ assert_equal Time.local(2006, 8, 16, 19), time
511
+
512
+ time = parse_now("yesterday")
269
513
  assert_equal Time.local(2006, 8, 15, 12), time
270
-
271
- time = Chronic.parse("tomorrow", :now => @time_2006_08_16_14_00_00)
514
+
515
+ now = Time.parse("2011-05-27 23:10") # after 11pm
516
+ time = parse_now("yesterday", :now => now)
517
+ assert_equal Time.local(2011, 05, 26, 12), time
518
+
519
+ time = parse_now("tomorrow")
272
520
  assert_equal Time.local(2006, 8, 17, 12), time
273
-
521
+
274
522
  # day name
275
-
276
- time = Chronic.parse("this tuesday", :now => @time_2006_08_16_14_00_00)
523
+
524
+ time = parse_now("this tuesday")
277
525
  assert_equal Time.local(2006, 8, 22, 12), time
278
-
279
- time = Chronic.parse("next tuesday", :now => @time_2006_08_16_14_00_00)
526
+
527
+ time = parse_now("next tuesday")
280
528
  assert_equal Time.local(2006, 8, 22, 12), time
281
-
282
- time = Chronic.parse("last tuesday", :now => @time_2006_08_16_14_00_00)
529
+
530
+ time = parse_now("last tuesday")
283
531
  assert_equal Time.local(2006, 8, 15, 12), time
284
-
285
- time = Chronic.parse("this wed", :now => @time_2006_08_16_14_00_00)
532
+
533
+ time = parse_now("this wed")
286
534
  assert_equal Time.local(2006, 8, 23, 12), time
287
-
288
- time = Chronic.parse("next wed", :now => @time_2006_08_16_14_00_00)
535
+
536
+ time = parse_now("next wed")
289
537
  assert_equal Time.local(2006, 8, 23, 12), time
290
-
291
- time = Chronic.parse("last wed", :now => @time_2006_08_16_14_00_00)
538
+
539
+ time = parse_now("last wed")
292
540
  assert_equal Time.local(2006, 8, 9, 12), time
293
-
541
+
294
542
  # day portion
295
-
296
- time = Chronic.parse("this morning", :now => @time_2006_08_16_14_00_00)
543
+
544
+ time = parse_now("this morning")
297
545
  assert_equal Time.local(2006, 8, 16, 9), time
298
-
299
- time = Chronic.parse("tonight", :now => @time_2006_08_16_14_00_00)
546
+
547
+ time = parse_now("tonight")
300
548
  assert_equal Time.local(2006, 8, 16, 22), time
301
-
549
+
550
+ # minute
551
+
552
+ time = parse_now("next minute")
553
+ assert_equal Time.local(2006, 8, 16, 14, 1, 30), time
554
+
302
555
  # second
303
-
304
- time = Chronic.parse("this second", :now => @time_2006_08_16_14_00_00)
556
+
557
+ time = parse_now("this second")
305
558
  assert_equal Time.local(2006, 8, 16, 14), time
306
-
307
- time = Chronic.parse("this second", :now => @time_2006_08_16_14_00_00, :context => :past)
559
+
560
+ time = parse_now("this second", :context => :past)
308
561
  assert_equal Time.local(2006, 8, 16, 14), time
309
-
310
- time = Chronic.parse("next second", :now => @time_2006_08_16_14_00_00)
562
+
563
+ time = parse_now("next second")
311
564
  assert_equal Time.local(2006, 8, 16, 14, 0, 1), time
312
-
313
- time = Chronic.parse("last second", :now => @time_2006_08_16_14_00_00)
565
+
566
+ time = parse_now("last second")
314
567
  assert_equal Time.local(2006, 8, 16, 13, 59, 59), time
315
568
  end
316
-
317
- def test_parse_guess_grr
318
- time = Chronic.parse("yesterday at 4:00", :now => @time_2006_08_16_14_00_00)
569
+
570
+ def test_parse_guess_grr
571
+ time = parse_now("yesterday at 4:00")
319
572
  assert_equal Time.local(2006, 8, 15, 16), time
320
-
321
- time = Chronic.parse("today at 9:00", :now => @time_2006_08_16_14_00_00)
573
+
574
+ time = parse_now("today at 9:00")
322
575
  assert_equal Time.local(2006, 8, 16, 9), time
323
-
324
- time = Chronic.parse("today at 2100", :now => @time_2006_08_16_14_00_00)
576
+
577
+ time = parse_now("today at 2100")
325
578
  assert_equal Time.local(2006, 8, 16, 21), time
326
-
327
- time = Chronic.parse("this day at 0900", :now => @time_2006_08_16_14_00_00)
579
+
580
+ time = parse_now("this day at 0900")
328
581
  assert_equal Time.local(2006, 8, 16, 9), time
329
-
330
- time = Chronic.parse("tomorrow at 0900", :now => @time_2006_08_16_14_00_00)
582
+
583
+ time = parse_now("tomorrow at 0900")
331
584
  assert_equal Time.local(2006, 8, 17, 9), time
332
-
333
- time = Chronic.parse("yesterday at 4:00", :now => @time_2006_08_16_14_00_00, :ambiguous_time_range => :none)
585
+
586
+ time = parse_now("yesterday at 4:00", :ambiguous_time_range => :none)
334
587
  assert_equal Time.local(2006, 8, 15, 4), time
335
-
336
- time = Chronic.parse("last friday at 4:00", :now => @time_2006_08_16_14_00_00)
588
+
589
+ time = parse_now("last friday at 4:00")
337
590
  assert_equal Time.local(2006, 8, 11, 16), time
338
-
339
- time = Chronic.parse("next wed 4:00", :now => @time_2006_08_16_14_00_00)
591
+
592
+ time = parse_now("next wed 4:00")
340
593
  assert_equal Time.local(2006, 8, 23, 16), time
341
-
342
- time = Chronic.parse("yesterday afternoon", :now => @time_2006_08_16_14_00_00)
594
+
595
+ time = parse_now("yesterday afternoon")
343
596
  assert_equal Time.local(2006, 8, 15, 15), time
344
-
345
- time = Chronic.parse("last week tuesday", :now => @time_2006_08_16_14_00_00)
597
+
598
+ time = parse_now("last week tuesday")
346
599
  assert_equal Time.local(2006, 8, 8, 12), time
600
+
601
+ time = parse_now("tonight at 7")
602
+ assert_equal Time.local(2006, 8, 16, 19), time
603
+
604
+ time = parse_now("tonight 7")
605
+ assert_equal Time.local(2006, 8, 16, 19), time
606
+
607
+ time = parse_now("7 tonight")
608
+ assert_equal Time.local(2006, 8, 16, 19), time
347
609
  end
348
-
610
+
349
611
  def test_parse_guess_grrr
350
- time = Chronic.parse("today at 6:00pm", :now => @time_2006_08_16_14_00_00)
612
+ time = parse_now("today at 6:00pm")
351
613
  assert_equal Time.local(2006, 8, 16, 18), time
352
-
353
- time = Chronic.parse("today at 6:00am", :now => @time_2006_08_16_14_00_00)
614
+
615
+ time = parse_now("today at 6:00am")
354
616
  assert_equal Time.local(2006, 8, 16, 6), time
355
-
356
- time = Chronic.parse("this day 1800", :now => @time_2006_08_16_14_00_00)
617
+
618
+ time = parse_now("this day 1800")
357
619
  assert_equal Time.local(2006, 8, 16, 18), time
358
-
359
- time = Chronic.parse("yesterday at 4:00pm", :now => @time_2006_08_16_14_00_00)
620
+
621
+ time = parse_now("yesterday at 4:00pm")
360
622
  assert_equal Time.local(2006, 8, 15, 16), time
623
+
624
+ time = parse_now("tomorrow evening at 7")
625
+ assert_equal Time.local(2006, 8, 17, 19), time
626
+
627
+ time = parse_now("tomorrow morning at 5:30")
628
+ assert_equal Time.local(2006, 8, 17, 5, 30), time
629
+
630
+ time = parse_now("next monday at 12:01 am")
631
+ assert_equal Time.local(2006, 8, 21, 00, 1), time
632
+
633
+ time = parse_now("next monday at 12:01 pm")
634
+ assert_equal Time.local(2006, 8, 21, 12, 1), time
635
+
636
+ # with context
637
+ time = parse_now("sunday at 8:15pm", :context => :past)
638
+ assert_equal Time.local(2006, 8, 13, 20, 15), time
361
639
  end
362
-
640
+
363
641
  def test_parse_guess_rgr
364
- time = Chronic.parse("afternoon yesterday", :now => @time_2006_08_16_14_00_00)
642
+ time = parse_now("afternoon yesterday")
365
643
  assert_equal Time.local(2006, 8, 15, 15), time
366
-
367
- time = Chronic.parse("tuesday last week", :now => @time_2006_08_16_14_00_00)
644
+
645
+ time = parse_now("tuesday last week")
368
646
  assert_equal Time.local(2006, 8, 8, 12), time
369
647
  end
370
-
648
+
371
649
  def test_parse_guess_s_r_p
372
650
  # past
373
-
374
- time = Chronic.parse("3 years ago", :now => @time_2006_08_16_14_00_00)
375
- assert_equal Time.local(2003, 8, 16, 14, 30, 30), time
376
-
377
- time = Chronic.parse("1 month ago", :now => @time_2006_08_16_14_00_00)
378
- assert_equal Time.local(2006, 7, 16, 14, 30, 30), time
379
-
380
- time = Chronic.parse("1 fortnight ago", :now => @time_2006_08_16_14_00_00)
381
- assert_equal Time.local(2006, 8, 2, 14, 30, 30), time
382
-
383
- time = Chronic.parse("2 fortnights ago", :now => @time_2006_08_16_14_00_00)
384
- assert_equal Time.local(2006, 7, 19, 14, 30, 30), time
385
-
386
- time = Chronic.parse("3 weeks ago", :now => @time_2006_08_16_14_00_00)
387
- assert_equal Time.local(2006, 7, 26, 14, 30, 30), time
388
-
389
- time = Chronic.parse("3 days ago", :now => @time_2006_08_16_14_00_00)
651
+
652
+ time = parse_now("3 years ago")
653
+ assert_equal Time.local(2003, 8, 16, 14), time
654
+
655
+ time = parse_now("1 month ago")
656
+ assert_equal Time.local(2006, 7, 16, 14), time
657
+
658
+ time = parse_now("1 fortnight ago")
659
+ assert_equal Time.local(2006, 8, 2, 14), time
660
+
661
+ time = parse_now("2 fortnights ago")
662
+ assert_equal Time.local(2006, 7, 19, 14), time
663
+
664
+ time = parse_now("3 weeks ago")
665
+ assert_equal Time.local(2006, 7, 26, 14), time
666
+
667
+ time = parse_now("2 weekends ago")
668
+ assert_equal Time.local(2006, 8, 5), time
669
+
670
+ time = parse_now("3 days ago")
390
671
  assert_equal Time.local(2006, 8, 13, 14), time
391
-
392
- #time = Chronic.parse("1 monday ago", :now => @time_2006_08_16_14_00_00)
672
+
673
+ #time = parse_now("1 monday ago")
393
674
  #assert_equal Time.local(2006, 8, 14, 12), time
394
-
395
- time = Chronic.parse("5 mornings ago", :now => @time_2006_08_16_14_00_00)
675
+
676
+ time = parse_now("5 mornings ago")
396
677
  assert_equal Time.local(2006, 8, 12, 9), time
397
-
398
- time = Chronic.parse("7 hours ago", :now => @time_2006_08_16_14_00_00)
678
+
679
+ time = parse_now("7 hours ago")
399
680
  assert_equal Time.local(2006, 8, 16, 7), time
400
-
401
- time = Chronic.parse("3 minutes ago", :now => @time_2006_08_16_14_00_00)
681
+
682
+ time = parse_now("3 minutes ago")
402
683
  assert_equal Time.local(2006, 8, 16, 13, 57), time
403
-
404
- time = Chronic.parse("20 seconds before now", :now => @time_2006_08_16_14_00_00)
684
+
685
+ time = parse_now("20 seconds before now")
405
686
  assert_equal Time.local(2006, 8, 16, 13, 59, 40), time
406
687
 
407
688
  # future
408
-
409
- time = Chronic.parse("3 years from now", :now => @time_2006_08_16_14_00_00)
689
+
690
+ time = parse_now("3 years from now")
410
691
  assert_equal Time.local(2009, 8, 16, 14, 0, 0), time
411
-
412
- time = Chronic.parse("6 months hence", :now => @time_2006_08_16_14_00_00)
413
- assert_equal Time.local(2007, 2, 16, 14, 30, 30), time
414
-
415
- time = Chronic.parse("3 fortnights hence", :now => @time_2006_08_16_14_00_00)
416
- assert_equal Time.local(2006, 9, 27, 14, 30, 30), time
417
-
418
- time = Chronic.parse("1 week from now", :now => @time_2006_08_16_14_00_00)
692
+
693
+ time = parse_now("6 months hence")
694
+ assert_equal Time.local(2007, 2, 16, 14), time
695
+
696
+ time = parse_now("3 fortnights hence")
697
+ assert_equal Time.local(2006, 9, 27, 14), time
698
+
699
+ time = parse_now("1 week from now")
419
700
  assert_equal Time.local(2006, 8, 23, 14, 0, 0), time
420
-
421
- time = Chronic.parse("1 day hence", :now => @time_2006_08_16_14_00_00)
701
+
702
+ time = parse_now("1 weekend from now")
703
+ assert_equal Time.local(2006, 8, 19), time
704
+
705
+ time = parse_now("2 weekends from now")
706
+ assert_equal Time.local(2006, 8, 26), time
707
+
708
+ time = parse_now("1 day hence")
422
709
  assert_equal Time.local(2006, 8, 17, 14), time
423
-
424
- time = Chronic.parse("5 mornings hence", :now => @time_2006_08_16_14_00_00)
710
+
711
+ time = parse_now("5 mornings hence")
425
712
  assert_equal Time.local(2006, 8, 21, 9), time
426
-
427
- time = Chronic.parse("1 hour from now", :now => @time_2006_08_16_14_00_00)
713
+
714
+ time = parse_now("1 hour from now")
428
715
  assert_equal Time.local(2006, 8, 16, 15), time
429
-
430
- time = Chronic.parse("20 minutes hence", :now => @time_2006_08_16_14_00_00)
716
+
717
+ time = parse_now("20 minutes hence")
431
718
  assert_equal Time.local(2006, 8, 16, 14, 20), time
432
-
433
- time = Chronic.parse("20 seconds from now", :now => @time_2006_08_16_14_00_00)
719
+
720
+ time = parse_now("20 seconds from now")
434
721
  assert_equal Time.local(2006, 8, 16, 14, 0, 20), time
722
+
723
+ time = Chronic.parse("2 months ago", :now => Time.parse("2007-03-07 23:30"))
724
+ assert_equal Time.local(2007, 1, 7, 23, 30), time
435
725
  end
436
-
726
+
437
727
  def test_parse_guess_p_s_r
438
- time = Chronic.parse("in 3 hours", :now => @time_2006_08_16_14_00_00)
728
+ time = parse_now("in 3 hours")
439
729
  assert_equal Time.local(2006, 8, 16, 17), time
440
730
  end
441
-
731
+
442
732
  def test_parse_guess_s_r_p_a
443
733
  # past
444
-
445
- time = Chronic.parse("3 years ago tomorrow", :now => @time_2006_08_16_14_00_00)
734
+
735
+ time = parse_now("3 years ago tomorrow")
446
736
  assert_equal Time.local(2003, 8, 17, 12), time
447
-
448
- time = Chronic.parse("3 years ago this friday", :now => @time_2006_08_16_14_00_00)
737
+
738
+ time = parse_now("3 years ago this friday")
449
739
  assert_equal Time.local(2003, 8, 18, 12), time
450
-
451
- time = Chronic.parse("3 months ago saturday at 5:00 pm", :now => @time_2006_08_16_14_00_00)
740
+
741
+ time = parse_now("3 months ago saturday at 5:00 pm")
452
742
  assert_equal Time.local(2006, 5, 19, 17), time
453
-
454
- time = Chronic.parse("2 days from this second", :now => @time_2006_08_16_14_00_00)
743
+
744
+ time = parse_now("2 days from this second")
455
745
  assert_equal Time.local(2006, 8, 18, 14), time
456
-
457
- time = Chronic.parse("7 hours before tomorrow at midnight", :now => @time_2006_08_16_14_00_00)
746
+
747
+ time = parse_now("7 hours before tomorrow at midnight")
458
748
  assert_equal Time.local(2006, 8, 17, 17), time
459
-
749
+
460
750
  # future
461
751
  end
462
-
463
- def test_parse_guess_o_r_s_r
464
- time = Chronic.parse("3rd wednesday in november", :now => @time_2006_08_16_14_00_00)
465
- assert_equal Time.local(2006, 11, 15, 12), time
466
-
467
- time = Chronic.parse("10th wednesday in november", :now => @time_2006_08_16_14_00_00)
468
- assert_equal nil, time
469
- end
470
-
752
+
471
753
  def test_parse_guess_o_r_g_r
472
- time = Chronic.parse("3rd month next year", :now => @time_2006_08_16_14_00_00)
473
- assert_equal Time.local(2007, 3, 16, 12, 30), time
474
-
475
- time = Chronic.parse("3rd thursday this september", :now => @time_2006_08_16_14_00_00)
754
+ time = parse_now("3rd month next year", :guess => false)
755
+ assert_equal Time.local(2007, 3), time.begin
756
+
757
+ time = parse_now("3rd month next year", :guess => false)
758
+ assert_equal Time.local(2007, 3, 1), time.begin
759
+
760
+ time = parse_now("3rd thursday this september")
476
761
  assert_equal Time.local(2006, 9, 21, 12), time
477
-
478
- time = Chronic.parse("4th day last week", :now => @time_2006_08_16_14_00_00)
762
+
763
+ now = Time.parse("1/10/2010")
764
+ time = parse_now("3rd thursday this november", :now => now)
765
+ assert_equal Time.local(2010, 11, 18, 12), time
766
+
767
+ time = parse_now("4th day last week")
479
768
  assert_equal Time.local(2006, 8, 9, 12), time
480
769
  end
481
-
770
+
482
771
  def test_parse_guess_nonsense
483
- time = Chronic.parse("some stupid nonsense", :now => @time_2006_08_16_14_00_00)
772
+ time = parse_now("some stupid nonsense")
773
+ assert_equal nil, time
774
+
775
+ time = parse_now("Ham Sandwich")
484
776
  assert_equal nil, time
485
777
  end
486
-
778
+
487
779
  def test_parse_span
488
- span = Chronic.parse("friday", :now => @time_2006_08_16_14_00_00, :guess => false)
780
+ span = parse_now("friday", :guess => false)
489
781
  assert_equal Time.local(2006, 8, 18), span.begin
490
782
  assert_equal Time.local(2006, 8, 19), span.end
491
-
492
- span = Chronic.parse("november", :now => @time_2006_08_16_14_00_00, :guess => false)
783
+
784
+ span = parse_now("november", :guess => false)
493
785
  assert_equal Time.local(2006, 11), span.begin
494
786
  assert_equal Time.local(2006, 12), span.end
787
+
788
+ span = Chronic.parse("weekend" , :now => @time_2006_08_16_14_00_00, :guess => false)
789
+ assert_equal Time.local(2006, 8, 19), span.begin
790
+ assert_equal Time.local(2006, 8, 21), span.end
495
791
  end
496
-
792
+
793
+ def test_parse_with_endian_precedence
794
+ date = '11/02/2007'
795
+
796
+ expect_for_middle_endian = Time.local(2007, 11, 2, 12)
797
+ expect_for_little_endian = Time.local(2007, 2, 11, 12)
798
+
799
+ # default precedence should be toward middle endianness
800
+ assert_equal expect_for_middle_endian, Chronic.parse(date)
801
+
802
+ assert_equal expect_for_middle_endian, Chronic.parse(date, :endian_precedence => [:middle, :little])
803
+
804
+ assert_equal expect_for_little_endian, Chronic.parse(date, :endian_precedence => [:little, :middle])
805
+ end
806
+
807
+ def test_parse_words
808
+ assert_equal parse_now("33 days from now"), parse_now("thirty-three days from now")
809
+ 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")
810
+ assert_equal parse_now("may 10th"), parse_now("may tenth")
811
+ end
812
+
813
+ def test_parse_only_complete_pointers
814
+ assert_equal parse_now("eat pasty buns today at 2pm"), @time_2006_08_16_14_00_00
815
+ assert_equal parse_now("futuristically speaking today at 2pm"), @time_2006_08_16_14_00_00
816
+ assert_equal parse_now("meeting today at 2pm"), @time_2006_08_16_14_00_00
817
+ end
818
+
819
+ def test_am_pm
820
+ assert_equal Time.local(2006, 8, 16), parse_now("8/16/2006 at 12am")
821
+ assert_equal Time.local(2006, 8, 16, 12), parse_now("8/16/2006 at 12pm")
822
+ end
823
+
824
+ def test_a_p
825
+ assert_equal Time.local(2006, 8, 16, 0, 15), parse_now("8/16/2006 at 12:15a")
826
+ assert_equal Time.local(2006, 8, 16, 18, 30), parse_now("8/16/2006 at 6:30p")
827
+ end
828
+
497
829
  def test_argument_validation
498
- assert_raise(Chronic::InvalidArgumentException) do
830
+ assert_raise(ArgumentError) do
499
831
  time = Chronic.parse("may 27", :foo => :bar)
500
832
  end
501
-
502
- assert_raise(Chronic::InvalidArgumentException) do
833
+
834
+ assert_raise(ArgumentError) do
503
835
  time = Chronic.parse("may 27", :context => :bar)
504
836
  end
505
837
  end
506
-
507
- end
838
+
839
+ def test_seasons
840
+ t = parse_now("this spring", :guess => false)
841
+ assert_equal Time.local(2007, 3, 20), t.begin
842
+ assert_equal Time.local(2007, 6, 20), t.end
843
+
844
+ t = parse_now("this winter", :guess => false)
845
+ assert_equal Time.local(2006, 12, 22), t.begin
846
+ assert_equal Time.local(2007, 3, 19), t.end
847
+
848
+ t = parse_now("last spring", :guess => false)
849
+ assert_equal Time.local(2006, 3, 20), t.begin
850
+ assert_equal Time.local(2006, 6, 20), t.end
851
+
852
+ t = parse_now("last winter", :guess => false)
853
+ assert_equal Time.local(2005, 12, 22), t.begin
854
+ assert_equal Time.local(2006, 3, 19), t.end
855
+
856
+ t = parse_now("next spring", :guess => false)
857
+ assert_equal Time.local(2007, 3, 20), t.begin
858
+ assert_equal Time.local(2007, 6, 20), t.end
859
+ end
860
+
861
+ # regression
862
+
863
+ # def test_partial
864
+ # assert_equal '', parse_now("2 hours")
865
+ # end
866
+
867
+ def test_days_in_november
868
+ t1 = Chronic.parse('1st thursday in november', :now => Time.local(2007))
869
+ assert_equal Time.local(2007, 11, 1, 12), t1
870
+
871
+ t1 = Chronic.parse('1st friday in november', :now => Time.local(2007))
872
+ assert_equal Time.local(2007, 11, 2, 12), t1
873
+
874
+ t1 = Chronic.parse('1st saturday in november', :now => Time.local(2007))
875
+ assert_equal Time.local(2007, 11, 3, 12), t1
876
+
877
+ # t1 = Chronic.parse('1st sunday in november', :now => Time.local(2007))
878
+ # assert_equal Time.local(2007, 11, 4, 12), t1
879
+
880
+ # Chronic.debug = true
881
+ #
882
+ # t1 = Chronic.parse('1st monday in november', :now => Time.local(2007))
883
+ # assert_equal Time.local(2007, 11, 5, 11), t1
884
+ end
885
+
886
+ def test_now_changes
887
+ t1 = Chronic.parse("now")
888
+ sleep 0.1
889
+ t2 = Chronic.parse("now")
890
+ assert_not_equal t1, t2
891
+ end
892
+
893
+ def test_noon
894
+ t1 = Chronic.parse('2011-01-01 at noon', :ambiguous_time_range => :none)
895
+ assert_equal Time.local(2011, 1, 1, 12, 0), t1
896
+ end
897
+
898
+ def test_handle_rdn_rmn_sd
899
+ time = parse_now("Thu Aug 10")
900
+ assert_equal Time.local(2006, 8, 10, 12), time
901
+ end
902
+
903
+ def test_handle_rdn_rmn_od
904
+ time = parse_now("Thu Aug 10th")
905
+ assert_equal Time.local(2006, 8, 10, 12), time
906
+ end
907
+
908
+ private
909
+ def parse_now(string, options={})
910
+ Chronic.parse(string, {:now => TIME_2006_08_16_14_00_00 }.merge(options))
911
+ end
912
+ end