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

Source Code for Module parsedatetime.tests.TestPhrases

  1   
  2  """ 
  3  Test parsing of strings that are phrases 
  4  """ 
  5   
  6  import unittest, time, datetime 
  7  import parsedatetime as pdt 
  8   
  9    # a special compare function is used to allow us to ignore the seconds as 
 10    # the running of the test could cross a minute boundary 
11 -def _compareResults(result, check, dateOnly=False, debug=False):
12 target, t_flag = result 13 value, v_flag = check 14 15 t_yr, t_mth, t_dy, t_hr, t_min, _, _, _, _ = target 16 v_yr, v_mth, v_dy, v_hr, v_min, _, _, _, _ = value 17 18 if dateOnly: 19 return ((t_yr == v_yr) and (t_mth == v_mth) and (t_dy == v_dy)) and (t_flag == v_flag) 20 else: 21 return ((t_yr == v_yr) and (t_mth == v_mth) and (t_dy == v_dy) and 22 (t_hr == v_hr) and (t_min == v_min)) and (t_flag == v_flag)
23 24
25 -class test(unittest.TestCase):
26
27 - def setUp(self):
28 self.cal = pdt.Calendar() 29 self.yr, self.mth, self.dy, self.hr, self.mn, self.sec, self.wd, self.yd, self.isdst = time.localtime()
30
31 - def testPhrases(self):
32 start = datetime.datetime(self.yr, self.mth, self.dy, self.hr, self.mn, self.sec).timetuple() 33 target = datetime.datetime(self.yr, self.mth, self.dy, 16, 0, 0).timetuple() 34 35 self.assertTrue(_compareResults(self.cal.parse('flight from SFO at 4pm', start), (target, 2))) 36 37 target = datetime.datetime(self.yr, self.mth, self.dy, 17, 0, 0).timetuple() 38 39 self.assertTrue(_compareResults(self.cal.parse('eod', start), (target, 2))) 40 self.assertTrue(_compareResults(self.cal.parse('meeting eod', start), (target, 2))) 41 self.assertTrue(_compareResults(self.cal.parse('eod meeting', start), (target, 2))) 42 43 target = datetime.datetime(self.yr, self.mth, self.dy, 17, 0, 0) + datetime.timedelta(days=1) 44 target = target.timetuple() 45 46 self.assertTrue(_compareResults(self.cal.parse('tomorrow eod', start), (target, 3))) 47 self.assertTrue(_compareResults(self.cal.parse('eod tomorrow', start), (target, 3)))
48
50 s = datetime.datetime.now() 51 52 # find out what day we are currently on 53 # and determine what the next day of week is 54 t = s + datetime.timedelta(days=1) 55 start = s.timetuple() 56 57 (yr, mth, dy, _, _, _, wd, yd, isdst) = t.timetuple() 58 59 target = (yr, mth, dy, 17, 0, 0, wd, yd, isdst) 60 61 d = self.wd + 1 62 if d > 6: 63 d = 0 64 65 day = self.cal.ptc.Weekdays[d] 66 67 self.assertTrue(_compareResults(self.cal.parse('eod %s' % day, start), (target, 3))) 68 69 # find out what day we are currently on 70 # and determine what the previous day of week is 71 t = s + datetime.timedelta(days=6) 72 73 (yr, mth, dy, hr, mn, sec, wd, yd, isdst) = t.timetuple() 74 75 target = (yr, mth, dy, 17, 0, 0, wd, yd, isdst) 76 77 d = self.wd - 1 78 if d < 0: 79 d = 6 80 81 day = self.cal.ptc.Weekdays[d] 82 83 self.assertTrue(_compareResults(self.cal.parse('eod %s' % day, start), (target, 3)))
84
85 - def testEndOfPhrases(self):
86 s = datetime.datetime.now() 87 88 # find out what month we are currently on 89 # set the day to 1 and then go back a day 90 # to get the end of the current month 91 (yr, mth, _, hr, mn, sec, _, _, _) = s.timetuple() 92 93 mth += 1 94 if mth > 12: 95 mth = 1 96 yr += 1 97 98 t = datetime.datetime(yr, mth, 1, 9, 0, 0) + datetime.timedelta(days=-1) 99 100 start = s.timetuple() 101 target = t.timetuple() 102 103 self.assertTrue(_compareResults(self.cal.parse('eom', start), (target, 2))) 104 self.assertTrue(_compareResults(self.cal.parse('meeting eom', start), (target, 2))) 105 106 s = datetime.datetime.now() 107 108 (yr, mth, dy, hr, mn, sec, wd, yd, isdst) = s.timetuple() 109 110 t = datetime.datetime(yr, 12, 31, 9, 0, 0) 111 112 start = s.timetuple() 113 target = t.timetuple() 114 115 self.assertTrue(_compareResults(self.cal.parse('eoy', start), (target, 2))) 116 self.assertTrue(_compareResults(self.cal.parse('meeting eoy', start), (target, 2)))
117
118 - def testLastPhrases(self):
119 for day in (11, 12, 13, 14, 15, 16, 17): 120 start = datetime.datetime(2012, 11, day, 9, 0, 0) 121 122 (yr, mth, dy, _, _, _, wd, yd, isdst) = start.timetuple() 123 124 n = 4 - wd 125 if n >= 0: 126 n -= 7 127 128 target = start + datetime.timedelta(days=n) 129 130 #print '*********', start, target, n, self.cal.parse('last friday', start.timetuple()) 131 132 self.assertTrue(_compareResults(self.cal.parse('last friday', start.timetuple()), (target.timetuple(), 1), dateOnly=True))
133