1
2 """
3 Test parsing of simple date and times
4 """
5
6 import unittest, time, datetime, string
7 import parsedatetime as pdt
8
9 -class test(unittest.TestCase):
10
11 @pdt.tests.assertEqualWithComparator
14
16 self.cal = pdt.Calendar()
17 self.yr, self.mth, self.dy, self.hr, self.mn, self.sec, self.wd, self.yd, self.isdst = time.localtime()
18
20 s = datetime.datetime.now()
21 t = s + datetime.timedelta(days=1)
22
23 start = s.timetuple()
24 target = t.timetuple()
25
26 d = self.wd + 1
27
28 if d > 6:
29 d = 0
30
31 day = self.cal.ptc.Weekdays[d]
32
33 self.assertExpectedResult(self.cal.parse(day, start), (target, 1))
34
35 t = s + datetime.timedelta(days=6)
36
37 target = t.timetuple()
38
39 d = self.wd - 1
40
41 if d < 0:
42 d = 6
43
44 day = self.cal.ptc.Weekdays[d]
45
46 self.assertExpectedResult(self.cal.parse(day, start), (target, 1))
47
49 start = datetime.datetime(self.yr, self.mth, self.dy, self.hr, self.mn, self.sec).timetuple()
50 target = datetime.datetime(self.yr, self.mth, self.dy, 23, 0, 0).timetuple()
51
52 self.assertExpectedResult(self.cal.parse('11:00:00 PM', start), (target, 2))
53 self.assertExpectedResult(self.cal.parse('11:00 PM', start), (target, 2))
54 self.assertExpectedResult(self.cal.parse('11 PM', start), (target, 2))
55 self.assertExpectedResult(self.cal.parse('11PM', start), (target, 2))
56 self.assertExpectedResult(self.cal.parse('2300', start), (target, 2))
57 self.assertExpectedResult(self.cal.parse('23:00', start), (target, 2))
58 self.assertExpectedResult(self.cal.parse('11p', start), (target, 2))
59 self.assertExpectedResult(self.cal.parse('11pm', start), (target, 2))
60 self.assertExpectedResult(self.cal.parse('11:00:00 P.M.', start), (target, 2))
61 self.assertExpectedResult(self.cal.parse('11:00 P.M.', start), (target, 2))
62 self.assertExpectedResult(self.cal.parse('11 P.M.', start), (target, 2))
63 self.assertExpectedResult(self.cal.parse('11P.M.', start), (target, 2))
64 self.assertExpectedResult(self.cal.parse('11p.m.', start), (target, 2))
65 self.assertExpectedResult(self.cal.parse('11 p.m.', start), (target, 2))
66 self.assertExpectedResult(self.cal.parse('"11 p.m."', start), (target, 2))
67
68 target = datetime.datetime(self.yr, self.mth, self.dy, 11, 0, 0).timetuple()
69
70 self.assertExpectedResult(self.cal.parse('11:00:00 AM', start), (target, 2))
71 self.assertExpectedResult(self.cal.parse('11:00 AM', start), (target, 2))
72 self.assertExpectedResult(self.cal.parse('11 AM', start), (target, 2))
73 self.assertExpectedResult(self.cal.parse('11AM', start), (target, 2))
74 self.assertExpectedResult(self.cal.parse('1100', start), (target, 2))
75 self.assertExpectedResult(self.cal.parse('11:00', start), (target, 2))
76 self.assertExpectedResult(self.cal.parse('11a', start), (target, 2))
77 self.assertExpectedResult(self.cal.parse('11am', start), (target, 2))
78 self.assertExpectedResult(self.cal.parse('11:00:00 A.M.', start), (target, 2))
79 self.assertExpectedResult(self.cal.parse('11:00 A.M.', start), (target, 2))
80 self.assertExpectedResult(self.cal.parse('11 A.M.', start), (target, 2))
81 self.assertExpectedResult(self.cal.parse('11A.M.', start), (target, 2))
82 self.assertExpectedResult(self.cal.parse('11a.m.', start), (target, 2))
83 self.assertExpectedResult(self.cal.parse('11 a.m.', start), (target, 2))
84 self.assertExpectedResult(self.cal.parse('(11 a.m.)', start), (target, 2))
85
86 target = datetime.datetime(self.yr, self.mth, self.dy, 7, 30, 0).timetuple()
87
88 self.assertExpectedResult(self.cal.parse('730', start), (target, 2))
89 self.assertExpectedResult(self.cal.parse('0730', start), (target, 2))
90 self.assertExpectedResult(self.cal.parse('0730am', start), (target, 2))
91
92 target = datetime.datetime(self.yr, self.mth, self.dy, 17, 30, 0).timetuple()
93
94 self.assertExpectedResult(self.cal.parse('1730', start), (target, 2))
95 self.assertExpectedResult(self.cal.parse('173000', start), (target, 2))
96
97
98 self.assertExpectedResult(self.cal.parse('$300', start), (start, 0))
99 self.assertExpectedResult(self.cal.parse('300ml', start), (start, 0))
100
102 start = datetime.datetime(self.yr, self.mth, self.dy, self.hr, self.mn, self.sec).timetuple()
103 target = datetime.datetime(2006, 8, 25, self.hr, self.mn, self.sec).timetuple()
104
105 self.assertExpectedResult(self.cal.parse('08/25/2006', start), (target, 1))
106 self.assertExpectedResult(self.cal.parse('08.25.2006', start), (target, 1))
107 self.assertExpectedResult(self.cal.parse('8/25/06', start), (target, 1))
108 self.assertExpectedResult(self.cal.parse('August 25, 2006', start), (target, 1))
109 self.assertExpectedResult(self.cal.parse('Aug 25, 2006', start), (target, 1))
110 self.assertExpectedResult(self.cal.parse('Aug. 25, 2006', start), (target, 1))
111 self.assertExpectedResult(self.cal.parse('August 25 2006', start), (target, 1))
112 self.assertExpectedResult(self.cal.parse('Aug 25 2006', start), (target, 1))
113 self.assertExpectedResult(self.cal.parse('Aug. 25 2006', start), (target, 1))
114 self.assertExpectedResult(self.cal.parse('25 August 2006', start), (target, 1))
115 self.assertExpectedResult(self.cal.parse('25 Aug 2006', start), (target, 1))
116
117 if self.mth > 8 or (self.mth == 8 and self.dy > 25):
118 target = datetime.datetime(self.yr + 1, 8, 25, self.hr, self.mn, self.sec).timetuple()
119 else:
120 target = datetime.datetime(self.yr, 8, 25, self.hr, self.mn, self.sec).timetuple()
121
122 self.assertExpectedResult(self.cal.parse('8/25', start), (target, 1))
123 self.assertExpectedResult(self.cal.parse('8.25', start), (target, 1))
124 self.assertExpectedResult(self.cal.parse('08/25', start), (target, 1))
125 self.assertExpectedResult(self.cal.parse('August 25', start), (target, 1))
126 self.assertExpectedResult(self.cal.parse('Aug 25', start), (target, 1))
127 self.assertExpectedResult(self.cal.parse('Aug. 25', start), (target, 1))
128
129
130 target = datetime.datetime(2013, 8, 1, self.hr, self.mn, self.sec).timetuple()
131 self.assertExpectedResult(self.cal.parse('Aug. 2013', start), (target, 1))
132
134 start = datetime.datetime(self.yr, self.mth, self.dy, self.hr, self.mn, self.sec).timetuple()
135 target = datetime.datetime(2000, 2, 29, self.hr, self.mn, self.sec).timetuple()
136
137 self.assertExpectedResult(self.cal.parse('02/29/2000', start), (target, 1))
138
139 target = datetime.datetime(2004, 2, 29, self.hr, self.mn, self.sec).timetuple()
140
141 self.assertExpectedResult(self.cal.parse('02/29/2004', start), (target, 1))
142
143 target = datetime.datetime(2008, 2, 29, self.hr, self.mn, self.sec).timetuple()
144
145 self.assertExpectedResult(self.cal.parse('02/29/2008', start), (target, 1))
146
147 target = datetime.datetime(2012, 2, 29, self.hr, self.mn, self.sec).timetuple()
148
149 self.assertExpectedResult(self.cal.parse('02/29/2012', start), (target, 1))
150
151 dNormal = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
152 dLeap = (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
153
154 for i in range(1,12):
155 self.assertTrue(self.cal.ptc.daysInMonth(i, 1999), dNormal[i - 1])
156 self.assertTrue(self.cal.ptc.daysInMonth(i, 2000), dLeap[i - 1])
157 self.assertTrue(self.cal.ptc.daysInMonth(i, 2001), dNormal[i - 1])
158 self.assertTrue(self.cal.ptc.daysInMonth(i, 2002), dNormal[i - 1])
159 self.assertTrue(self.cal.ptc.daysInMonth(i, 2003), dNormal[i - 1])
160 self.assertTrue(self.cal.ptc.daysInMonth(i, 2004), dLeap[i - 1])
161 self.assertTrue(self.cal.ptc.daysInMonth(i, 2005), dNormal[i - 1])
162
164 start = datetime.datetime(self.yr, self.mth, self.dy, self.hr, self.mn, self.sec).timetuple()
165 target = datetime.datetime(2008, 8, 22, self.hr, self.mn, self.sec).timetuple()
166
167 self.assertExpectedResult(self.cal.parse('August 22nd, 2008', start), (target, 1))
168 self.assertExpectedResult(self.cal.parse('Aug 22nd, 2008', start), (target, 1))
169 self.assertExpectedResult(self.cal.parse('Aug. 22nd, 2008', start), (target, 1))
170 self.assertExpectedResult(self.cal.parse('August 22nd 2008', start), (target, 1))
171 self.assertExpectedResult(self.cal.parse('Aug 22nd 2008', start), (target, 1))
172 self.assertExpectedResult(self.cal.parse('Aug. 22nd 2008', start), (target, 1))
173 self.assertExpectedResult(self.cal.parse('22nd August 2008', start), (target, 1))
174 self.assertExpectedResult(self.cal.parse('22nd Aug 2008', start), (target, 1))
175
176 target = datetime.datetime(1949, 12, 31, self.hr, self.mn, self.sec).timetuple()
177
178 self.assertExpectedResult(self.cal.parse('December 31st, 1949', start), (target, 1))
179 self.assertExpectedResult(self.cal.parse('Dec 31st, 1949', start), (target, 1))
180 self.assertExpectedResult(self.cal.parse('December 31st 1949', start), (target, 1))
181 self.assertExpectedResult(self.cal.parse('Dec 31st 1949', start), (target, 1))
182 self.assertExpectedResult(self.cal.parse('31st December 1949', start), (target, 1))
183 self.assertExpectedResult(self.cal.parse('31st Dec 1949', start), (target, 1))
184
185 target = datetime.datetime(2008, 8, 23, self.hr, self.mn, self.sec).timetuple()
186
187 self.assertExpectedResult(self.cal.parse('August 23rd, 2008', start), (target, 1))
188 self.assertExpectedResult(self.cal.parse('Aug 23rd, 2008', start), (target, 1))
189 self.assertExpectedResult(self.cal.parse('Aug. 23rd, 2008', start), (target, 1))
190 self.assertExpectedResult(self.cal.parse('August 23rd 2008', start), (target, 1))
191 self.assertExpectedResult(self.cal.parse('Aug 23rd 2008', start), (target, 1))
192 self.assertExpectedResult(self.cal.parse('Aug. 23rd 2008', start), (target, 1))
193
194 target = datetime.datetime(2008, 8, 25, self.hr, self.mn, self.sec).timetuple()
195
196 self.assertExpectedResult(self.cal.parse('August 25th, 2008', start), (target, 1))
197 self.assertExpectedResult(self.cal.parse('Aug 25th, 2008', start), (target, 1))
198 self.assertExpectedResult(self.cal.parse('Aug. 25th, 2008', start), (target, 1))
199 self.assertExpectedResult(self.cal.parse('August 25th 2008', start), (target, 1))
200 self.assertExpectedResult(self.cal.parse('Aug 25th 2008', start), (target, 1))
201 self.assertExpectedResult(self.cal.parse('Aug. 25th 2008', start), (target, 1))
202
204 start = datetime.datetime(self.yr, self.mth, self.dy, self.hr, self.mn, self.sec).timetuple()
205 target = datetime.datetime(self.yr, self.mth, self.dy, 6, 0, 0).timetuple()
206
207 self.assertExpectedResult(self.cal.parse('morning', start), (target, 2))
208
209 target = datetime.datetime(self.yr, self.mth, self.dy, 8, 0, 0).timetuple()
210
211 self.assertExpectedResult(self.cal.parse('breakfast', start), (target, 2))
212
213 target = datetime.datetime(self.yr, self.mth, self.dy, 12, 0, 0).timetuple()
214
215 self.assertExpectedResult(self.cal.parse('lunch', start), (target, 2))
216
217 target = datetime.datetime(self.yr, self.mth, self.dy, 13, 0, 0).timetuple()
218
219 self.assertExpectedResult(self.cal.parse('afternoon', start), (target, 2))
220
221 target = datetime.datetime(self.yr, self.mth, self.dy, 18, 0, 0).timetuple()
222
223 self.assertExpectedResult(self.cal.parse('evening', start), (target, 2))
224
225 target = datetime.datetime(self.yr, self.mth, self.dy, 19,0, 0).timetuple()
226
227 self.assertExpectedResult(self.cal.parse('dinner', start), (target, 2))
228
229 target = datetime.datetime(self.yr, self.mth, self.dy, 21, 0, 0).timetuple()
230
231 self.assertExpectedResult(self.cal.parse('night', start), (target, 2))
232 self.assertExpectedResult(self.cal.parse('tonight', start), (target, 2))
233
235 start = datetime.datetime(self.yr, self.mth, self.dy, self.hr, self.mn, self.sec).timetuple()
236 target = datetime.datetime(self.yr, self.mth, self.dy, 0, 0, 0).timetuple()
237
238 self.assertExpectedResult(self.cal.parse('midnight', start), (target, 2))
239 self.assertExpectedResult(self.cal.parse('12:00:00 AM', start), (target, 2))
240 self.assertExpectedResult(self.cal.parse('12:00 AM', start), (target, 2))
241 self.assertExpectedResult(self.cal.parse('12 AM', start), (target, 2))
242 self.assertExpectedResult(self.cal.parse('12AM', start), (target, 2))
243 self.assertExpectedResult(self.cal.parse('12am', start), (target, 2))
244 self.assertExpectedResult(self.cal.parse('12a', start), (target, 2))
245 self.assertExpectedResult(self.cal.parse('0000', start), (target, 2))
246 self.assertExpectedResult(self.cal.parse('00:00', start), (target, 2))
247 self.assertExpectedResult(self.cal.parse('12:00:00 A.M.', start), (target, 2))
248 self.assertExpectedResult(self.cal.parse('12:00 A.M.', start), (target, 2))
249 self.assertExpectedResult(self.cal.parse('12 A.M.', start), (target, 2))
250 self.assertExpectedResult(self.cal.parse('12A.M.', start), (target, 2))
251 self.assertExpectedResult(self.cal.parse('12a.m.', start), (target, 2))
252
254 start = datetime.datetime(self.yr, self.mth, self.dy, self.hr, self.mn, self.sec).timetuple()
255 target = datetime.datetime(self.yr, self.mth, self.dy, 12, 0, 0).timetuple()
256
257 self.assertExpectedResult(self.cal.parse('noon', start), (target, 2))
258 self.assertExpectedResult(self.cal.parse('12:00:00 PM', start), (target, 2))
259 self.assertExpectedResult(self.cal.parse('12:00 PM', start), (target, 2))
260 self.assertExpectedResult(self.cal.parse('12 PM', start), (target, 2))
261 self.assertExpectedResult(self.cal.parse('12PM', start), (target, 2))
262 self.assertExpectedResult(self.cal.parse('12pm', start), (target, 2))
263 self.assertExpectedResult(self.cal.parse('12p', start), (target, 2))
264 self.assertExpectedResult(self.cal.parse('1200', start), (target, 2))
265 self.assertExpectedResult(self.cal.parse('12:00', start), (target, 2))
266 self.assertExpectedResult(self.cal.parse('12:00:00 P.M.', start), (target, 2))
267 self.assertExpectedResult(self.cal.parse('12:00 P.M.', start), (target, 2))
268 self.assertExpectedResult(self.cal.parse('12 P.M.', start), (target, 2))
269 self.assertExpectedResult(self.cal.parse('12P.M.', start), (target, 2))
270 self.assertExpectedResult(self.cal.parse('12p.m.', start), (target, 2))
271
272
274 start = datetime.datetime(2014, 10, 25, self.hr, self.mn, self.sec).timetuple()
275
276 target = datetime.datetime(2014, 10, 26, self.hr, self.mn, self.sec).timetuple()
277 self.assertExpectedResult(self.cal.parse('sunday', start), (target, 1))
278 self.assertExpectedResult(self.cal.parse('sun', start), (target, 1))
279
280 target = datetime.datetime(2014, 10, 27, self.hr, self.mn, self.sec).timetuple()
281 self.assertExpectedResult(self.cal.parse('Monday', start), (target, 1))
282 self.assertExpectedResult(self.cal.parse('mon', start), (target, 1))
283
284 target = datetime.datetime(2014, 10, 28, self.hr, self.mn, self.sec).timetuple()
285 self.assertExpectedResult(self.cal.parse('tuesday', start), (target, 1))
286 self.assertExpectedResult(self.cal.parse('tues', start), (target, 1))
287
288 target = datetime.datetime(2014, 10, 29, self.hr, self.mn, self.sec).timetuple()
289 self.assertExpectedResult(self.cal.parse('wednesday', start), (target, 1))
290 self.assertExpectedResult(self.cal.parse('wed', start), (target, 1))
291
292 target = datetime.datetime(2014, 10, 30, self.hr, self.mn, self.sec).timetuple()
293 self.assertExpectedResult(self.cal.parse('thursday', start), (target, 1))
294 self.assertExpectedResult(self.cal.parse('thu', start), (target, 1))
295
296 target = datetime.datetime(2014, 10, 31, self.hr, self.mn, self.sec).timetuple()
297 self.assertExpectedResult(self.cal.parse('friday', start), (target, 1))
298 self.assertExpectedResult(self.cal.parse('fri', start), (target, 1))
299
300 target = datetime.datetime(2014, 11, 1, self.hr, self.mn, self.sec).timetuple()
301 self.assertExpectedResult(self.cal.parse('saturday', start), (target, 1))
302 self.assertExpectedResult(self.cal.parse('sat', start), (target, 1))
303
305
306
307
308 start = datetime.datetime(self.yr, self.mth, self.dy, self.hr, self.mn, self.sec).timetuple()
309 target = datetime.datetime.now().timetuple()
310
311 keywords = []
312 loc = self.cal.ptc.locale
313
314
315 keywords.extend(loc.meridian)
316 keywords.extend(loc.Weekdays)
317 keywords.extend(loc.shortWeekdays)
318 keywords.extend(loc.Months)
319 keywords.extend(loc.shortMonths)
320 keywords.extend(loc.numbers.keys())
321 keywords.extend(loc.Modifiers.keys())
322 keywords.extend(loc.dayOffsets.keys())
323 keywords.extend(loc.re_sources.keys())
324 keywords.extend(loc.small.keys())
325 keywords.extend(loc.magnitude.keys())
326
327 for units in loc.units.values():
328 keywords.extend(units)
329
330
331
332 keywords.extend(list(string.ascii_lowercase))
333
334 for keyword in keywords:
335 phrase = '1 %sfoo' % keyword
336 self.assertExpectedResult(self.cal.parse(phrase, start), (target, 0))
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355 if __name__ == "__main__":
356 unittest.main()
357