1
2 """
3 Test parsing of strings that are phrases
4 """
5
6 import unittest, time, datetime
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
21
22
23
24
25
26
27
28 start = datetime.datetime(self.yr, self.mth, self.dy, self.hr, self.mn, self.sec).timetuple()
29 target = datetime.datetime(self.yr, self.mth, self.dy, 16, 0, 0).timetuple()
30
31 self.assertExpectedResult(self.cal.parse('flight from SFO at 4pm', start), (target, 2))
32
33 target = datetime.datetime(self.yr, self.mth, self.dy, 17, 0, 0).timetuple()
34
35 self.assertExpectedResult(self.cal.parse('eod', start), (target, 2))
36 self.assertExpectedResult(self.cal.parse('meeting eod', start), (target, 2))
37 self.assertExpectedResult(self.cal.parse('eod meeting', start), (target, 2))
38
39 target = datetime.datetime(self.yr, self.mth, self.dy, 17, 0, 0) + datetime.timedelta(days=1)
40 target = target.timetuple()
41
42 self.assertExpectedResult(self.cal.parse('tomorrow eod', start), (target, 3))
43 self.assertExpectedResult(self.cal.parse('eod tomorrow', start), (target, 3))
44
46 s = datetime.datetime.now()
47
48
49
50 t = s + datetime.timedelta(days=1)
51 start = s.timetuple()
52
53 (yr, mth, dy, _, _, _, wd, yd, isdst) = t.timetuple()
54
55 target = (yr, mth, dy, 17, 0, 0, wd, yd, isdst)
56
57 d = self.wd + 1
58 if d > 6:
59 d = 0
60
61 day = self.cal.ptc.Weekdays[d]
62
63 self.assertExpectedResult(self.cal.parse('eod %s' % day, start), (target, 3))
64
65
66
67 t = s + datetime.timedelta(days=6)
68
69 (yr, mth, dy, hr, mn, sec, wd, yd, isdst) = t.timetuple()
70
71 target = (yr, mth, dy, 17, 0, 0, wd, yd, isdst)
72
73 d = self.wd - 1
74 if d < 0:
75 d = 6
76
77 day = self.cal.ptc.Weekdays[d]
78
79 self.assertExpectedResult(self.cal.parse('eod %s' % day, start), (target, 3))
80
82 s = datetime.datetime.now()
83
84
85
86
87 (yr, mth, _, hr, mn, sec, _, _, _) = s.timetuple()
88
89 mth += 1
90 if mth > 12:
91 mth = 1
92 yr += 1
93
94 t = datetime.datetime(yr, mth, 1, 9, 0, 0) + datetime.timedelta(days=-1)
95
96 start = s.timetuple()
97 target = t.timetuple()
98
99 self.assertExpectedResult(self.cal.parse('eom', start), (target, 2))
100 self.assertExpectedResult(self.cal.parse('meeting eom', start), (target, 2))
101
102 s = datetime.datetime.now()
103
104 (yr, mth, dy, hr, mn, sec, wd, yd, isdst) = s.timetuple()
105
106 t = datetime.datetime(yr, 12, 31, 9, 0, 0)
107
108 start = s.timetuple()
109 target = t.timetuple()
110
111 self.assertExpectedResult(self.cal.parse('eoy', start), (target, 2))
112 self.assertExpectedResult(self.cal.parse('meeting eoy', start), (target, 2))
113
115 for day in (11, 12, 13, 14, 15, 16, 17):
116 start = datetime.datetime(2012, 11, day, 9, 0, 0)
117
118 (yr, mth, dy, _, _, _, wd, yd, isdst) = start.timetuple()
119
120 n = 4 - wd
121 if n >= 0:
122 n -= 7
123
124 target = start + datetime.timedelta(days=n)
125
126
127
128 self.assertExpectedResult(self.cal.parse('last friday', start.timetuple()), (target.timetuple(), 1), dateOnly=True)
129