Package parsedatetime :: Package tests :: Module TestSimpleDateTimes
[hide private]
[frames] | no frames]

Source Code for Module parsedatetime.tests.TestSimpleDateTimes

  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
12 - def assertExpectedResult(self, result, check, **kwargs):
13 return pdt.tests.compareResultByTimeTuplesAndFlags(result, check, **kwargs)
14
15 - def setUp(self):
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
19 - def testDays(self):
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
48 - def testTimes(self):
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 # Should not parse as a time due to prefix 98 self.assertExpectedResult(self.cal.parse('$300', start), (start, 0)) 99 self.assertExpectedResult(self.cal.parse('300ml', start), (start, 0))
100
101 - def testDates(self):
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 # added test to ensure 4-digit year is recognized in the absence of day 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
133 - def testLeapDays(self):
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
163 - def testDaySuffixes(self):
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
203 - def testSpecialTimes(self):
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
234 - def testMidnight(self):
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
253 - def testNoon(self):
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
273 - def testDaysOfWeek(self):
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
304 - def testWordBoundaries(self):
305 # Ensure that keywords appearing at the start of a word are not parsed 306 # as if they were standalone keywords. For example, "10 dogs" should 307 # not be interpreted the same as "10 d" 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 # Test all known keywords for the locale 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 # Finally, test all lowercase letters to be particularly thorough - it 331 # would be very difficult to track down bugs due to single letters. 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 # def testMonths(self): 340 # 341 # start = datetime.datetime(self.yr, self.mth, self.dy, self.hr, self.mn, self.sec).timetuple() 342 # 343 # target = datetime.datetime(self.yr, self.mth, self.dy, 12, 0, 0).timetuple() 344 # 345 # self.assertExpectedResult(self.cal.parse('jun', start), (target, 2)) 346 # self.assertExpectedResult(self.cal.parse('12:00:00 PM', start), (target, 2)) 347 # self.assertExpectedResult(self.cal.parse('12:00 PM', start), (target, 2)) 348 # self.assertExpectedResult(self.cal.parse('12 PM', start), (target, 2)) 349 # self.assertExpectedResult(self.cal.parse('12PM', start), (target, 2)) 350 # self.assertExpectedResult(self.cal.parse('12pm', start), (target, 2)) 351 # self.assertExpectedResult(self.cal.parse('12p', start), (target, 2)) 352 # self.assertExpectedResult(self.cal.parse('1200', start), (target, 2)) 353 # self.assertExpectedResult(self.cal.parse('12:00', start), (target, 2)) 354 355 if __name__ == "__main__": 356 unittest.main() 357