1
2 """
3 Test parsing of 'simple' offsets
4 """
5
6 import time
7 import datetime
8 import calendar
9 import unittest
10 import parsedatetime as pdt
13 try:
14 dt, flag = result
15 except ValueError:
16
17 return result
18 if trunc_seconds:
19 dt = dt[:5] + (0,) * 4
20 if trunc_hours:
21 dt = dt[:3] + (0,) * 6
22 return dt, flag
23
24 _tr = _truncateResult
25
26 -class test(unittest.TestCase):
27
28 @pdt.tests.assertEqualWithComparator
31
33 self.cal = pdt.Calendar()
34 self.yr, self.mth, self.dy, self.hr, self.mn, self.sec, self.wd, self.yd, self.isdst = time.localtime()
35
37 s = datetime.datetime.now()
38
39 start = s.timetuple()
40 target = s.timetuple()
41
42 self.assertExpectedResult(self.cal.parse('now', start), (target, 2))
43
45 s = datetime.datetime.now()
46 t = s + datetime.timedelta(minutes=5)
47
48 start = s.timetuple()
49 target = t.timetuple()
50
51 self.assertExpectedResult(self.cal.parse('5 minutes from now', start), (target, 2))
52 self.assertExpectedResult(self.cal.parse('5 min from now', start), (target, 2))
53 self.assertExpectedResult(self.cal.parse('5m from now', start), (target, 2))
54 self.assertExpectedResult(self.cal.parse('in 5 minutes', start), (target, 2))
55 self.assertExpectedResult(self.cal.parse('in 5 min', start), (target, 2))
56 self.assertExpectedResult(self.cal.parse('5 minutes', start), (target, 2))
57 self.assertExpectedResult(self.cal.parse('5 min', start), (target, 2))
58 self.assertExpectedResult(self.cal.parse('5m', start), (target, 2))
59
60 self.assertExpectedResult(self.cal.parse('five minutes from now', start), (target, 2))
61 self.assertExpectedResult(self.cal.parse('five min from now', start), (target, 2))
62 self.assertExpectedResult(self.cal.parse('in five minutes', start), (target, 2))
63 self.assertExpectedResult(self.cal.parse('in five min', start), (target, 2))
64 self.assertExpectedResult(self.cal.parse('five minutes', start), (target, 2))
65 self.assertExpectedResult(self.cal.parse('five min', start), (target, 2))
66
68 s = datetime.datetime.now()
69 t = s + datetime.timedelta(minutes=-5)
70
71 start = s.timetuple()
72 target = t.timetuple()
73
74 self.assertExpectedResult(self.cal.parse('5 minutes before now', start), (target, 2))
75 self.assertExpectedResult(self.cal.parse('5 min before now', start), (target, 2))
76 self.assertExpectedResult(self.cal.parse('5m before now', start), (target, 2))
77 self.assertExpectedResult(self.cal.parse('5 minutes ago', start), (target, 2))
78
79 self.assertExpectedResult(self.cal.parse('five minutes before now', start), (target, 2))
80 self.assertExpectedResult(self.cal.parse('five min before now', start), (target, 2))
81
83 s = datetime.datetime.now()
84 t = s + datetime.timedelta(weeks=1)
85
86 start = s.timetuple()
87 target = t.timetuple()
88
89 self.assertExpectedResult(self.cal.parse('in 1 week', start), (target, 1))
90 self.assertExpectedResult(self.cal.parse('1 week from now', start), (target, 3))
91 self.assertExpectedResult(self.cal.parse('in one week', start), (target, 1))
92 self.assertExpectedResult(self.cal.parse('one week from now', start), (target, 3))
93 self.assertExpectedResult(self.cal.parse('in a week', start), (target, 1))
94 self.assertExpectedResult(self.cal.parse('a week from now', start), (target, 3))
95 self.assertExpectedResult(self.cal.parse('in 7 days', start), (target, 1))
96 self.assertExpectedResult(self.cal.parse('7 days from now', start), (target, 3))
97 self.assertExpectedResult(self.cal.parse('in seven days', start), (target, 1))
98 self.assertExpectedResult(self.cal.parse('seven days from now', start), (target, 3))
99 self.assertEqual(_tr(self.cal.parse('next week', start),
100 trunc_hours=True),
101 _tr((target, 1), trunc_hours=True))
102
104 start = datetime.datetime.now()
105 target = start + datetime.timedelta(days=4 + 7 - start.weekday())
106 start = start.timetuple()
107 target = target.timetuple()
108
109 self.assertExpectedResult(self.cal.parse('next friday', start),
110 (target, 1), dateOnly=True)
111 self.assertExpectedResult(self.cal.parse('next friday?', start),
112 (target, 1), dateOnly=True)
113 self.cal.ptc.StartTimeFromSourceTime = True
114 self.assertExpectedResult(self.cal.parse('next friday', start),
115 (target, 1))
116
118 s = datetime.datetime.now()
119 t = s + datetime.timedelta(weeks=-1)
120
121 start = s.timetuple()
122 target = t.timetuple()
123
124 self.assertEqual(_tr(self.cal.parse('1 week before now', start)),
125 _tr((target, 3)))
126 self.assertEqual(_tr(self.cal.parse('one week before now', start)),
127 _tr((target, 3)))
128 self.assertEqual(_tr(self.cal.parse('a week before now', start)),
129 _tr((target, 3)))
130 self.assertEqual(_tr(self.cal.parse('7 days before now', start)),
131 _tr((target, 3)))
132 self.assertEqual(_tr(self.cal.parse('seven days before now', start)),
133 _tr((target, 3)))
134 self.assertEqual(_tr(self.cal.parse('1 week ago', start)),
135 _tr((target, 1)))
136 self.assertEqual(_tr(self.cal.parse('a week ago', start)),
137 _tr((target, 1)))
138 self.assertEqual(_tr(self.cal.parse('last week', start), trunc_hours=True),
139 _tr((target, 1), trunc_hours=True))
140
142 s = datetime.datetime(self.yr, self.mth, self.dy, self.hr, self.mn, self.sec) + datetime.timedelta(days=1)
143 t = self.cal.inc(s, year=1)
144
145 start = s.timetuple()
146 target = t.timetuple()
147
148 phrase = 'next %s %s' % (calendar.month_name[t.month], t.day)
149
150 self.assertEqual(_tr(self.cal.parse(phrase, start)),
151 _tr((target, 1)))
152
154 s = datetime.datetime.now()
155 t = datetime.datetime(self.yr, self.mth, self.dy, 9, 0, 0) + datetime.timedelta(days=1)
156
157 start = s.timetuple()
158 target = t.timetuple()
159
160 self.assertExpectedResult(self.cal.parse('tomorrow', start), (target, 1))
161 self.assertExpectedResult(self.cal.parse('next day', start), (target, 1))
162
163 t = datetime.datetime(self.yr, self.mth, self.dy, 9, 0, 0) + datetime.timedelta(days=-1)
164 target = t.timetuple()
165
166 self.assertExpectedResult(self.cal.parse('yesterday', start), (target, 1))
167
168 t = datetime.datetime(self.yr, self.mth, self.dy, 9, 0, 0)
169 target = t.timetuple()
170
171 self.assertExpectedResult(self.cal.parse('today', start), (target, 1))
172
173
174 if __name__ == "__main__":
175 unittest.main()
176