1
2 """
3 Test parsing of strings that are phrases
4 """
5
6 import unittest, time, datetime
7 import parsedatetime as pdt
8
9
10
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
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
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
53
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
70
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
86 s = datetime.datetime.now()
87
88
89
90
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
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
131
132 self.assertTrue(_compareResults(self.cal.parse('last friday', start.timetuple()), (target.timetuple(), 1), dateOnly=True))
133