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

Source Code for Module parsedatetime.tests.TestFrenchLocale

  1   
  2  """ 
  3  Test parsing of simple date and times using the French locale 
  4   
  5  Note: requires PyICU 
  6  """ 
  7  from __future__ import unicode_literals 
  8  import unittest, time, datetime 
  9  import parsedatetime as pdt 
10 11 -class test(unittest.TestCase):
12 13 @pdt.tests.assertEqualWithComparator
14 - def assertExpectedResult(self, result, check, **kwargs):
15 return pdt.tests.compareResultByTimeTuplesAndFlags(result, check, **kwargs)
16
17 - def setUp(self):
18 self.ptc = pdt.Constants('fr_FR', usePyICU=True) 19 self.cal = pdt.Calendar(self.ptc) 20 21 self.yr, self.mth, self.dy, self.hr, self.mn, self.sec, self.wd, self.yd, self.isdst = time.localtime() 22 23 if self.ptc.localeID != 'fr_FR': 24 raise unittest.SkipTest('Locale not set to fr_FR - check if PyICU is installed')
25
26 - def testTimes(self):
27 if self.ptc.localeID == 'fr_FR': 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, 23, 0, 0).timetuple() 30 31 self.assertExpectedResult(self.cal.parse('2300', start), (target, 2)) 32 self.assertExpectedResult(self.cal.parse('23:00', start), (target, 2)) 33 34 target = datetime.datetime(self.yr, self.mth, self.dy, 11, 0, 0).timetuple() 35 36 self.assertExpectedResult(self.cal.parse('1100', start), (target, 2)) 37 self.assertExpectedResult(self.cal.parse('11:00', start), (target, 2)) 38 39 target = datetime.datetime(self.yr, self.mth, self.dy, 7, 30, 0).timetuple() 40 41 self.assertExpectedResult(self.cal.parse('730', start), (target, 2)) 42 self.assertExpectedResult(self.cal.parse('0730', start), (target, 2)) 43 44 target = datetime.datetime(self.yr, self.mth, self.dy, 17, 30, 0).timetuple() 45 46 self.assertExpectedResult(self.cal.parse('1730', start), (target, 2)) 47 self.assertExpectedResult(self.cal.parse('173000', start), (target, 2))
48
49 - def testDates(self):
50 if self.ptc.localeID == 'fr_FR': 51 start = datetime.datetime(self.yr, self.mth, self.dy, self.hr, self.mn, self.sec).timetuple() 52 target = datetime.datetime(2006, 8, 25, self.hr, self.mn, self.sec).timetuple() 53 54 self.assertExpectedResult(self.cal.parse('25/08/2006', start), (target, 1)) 55 self.assertExpectedResult(self.cal.parse('25/8/06', start), (target, 1)) 56 self.assertExpectedResult(self.cal.parse('ao\xfbt 25, 2006', start), (target, 1)) 57 self.assertExpectedResult(self.cal.parse('ao\xfbt 25 2006', start), (target, 1)) 58 59 if self.mth > 8 or (self.mth == 8 and self.dy > 25): 60 target = datetime.datetime(self.yr+1, 8, 25, self.hr, self.mn, self.sec).timetuple() 61 else: 62 target = datetime.datetime(self.yr, 8, 25, self.hr, self.mn, self.sec).timetuple() 63 64 self.assertExpectedResult(self.cal.parse('25/8', start), (target, 1)) 65 self.assertExpectedResult(self.cal.parse('25/08', start), (target, 1))
66
67 - def testWeekDays(self):
68 if self.ptc.localeID == 'fr_FR': 69 start = datetime.datetime(self.yr, self.mth, self.dy, self.hr, self.mn, self.sec).timetuple() 70 71 o1 = self.ptc.CurrentDOWParseStyle 72 o2 = self.ptc.DOWParseStyle 73 74 # set it up so the current dow returns current day 75 self.ptc.CurrentDOWParseStyle = True 76 self.ptc.DOWParseStyle = 1 77 78 for i in range(0,7): 79 dow = self.ptc.shortWeekdays[i] 80 81 result = self.cal.parse(dow, start) 82 83 yr, mth, dy, hr, mn, sec, wd, yd, isdst = result[0] 84 85 self.assertEqual(wd, i) 86 87 self.ptc.CurrentDOWParseStyle = o1 88 self.ptc.DOWParseStyle = o2
89
90 -class pdtLocale_fr(pdt.pdt_locales.pdtLocale_icu):
91 """French locale with french today/tomorrow/yesterday"""
92 - def __init__(self):
93 super(pdtLocale_fr, self).__init__(localeID='fr_FR') 94 self.dayOffsets.update({"aujourd'hui": 0, 'demain': 1, 'hier': -1})
95
96 -class TestDayOffsets(test):
97 # test how Aujourd'hui/Demain/Hier are parsed
98 - def setUp(self):
99 super(TestDayOffsets, self).setUp() 100 self.__old_pdtlocale_fr = pdt.pdtLocales.get('fr_FR') # save for later 101 pdt.pdtLocales['fr_FR'] = pdtLocale_fr # override for the test 102 self.ptc = pdt.Constants('fr_FR', usePyICU=False) 103 self.cal = pdt.Calendar(self.ptc)
104
105 - def test_dayoffsets(self):
106 start = datetime.datetime(self.yr, self.mth, self.dy, 9) 107 for date_string, expected_day_offset in [ 108 ("Aujourd'hui", 0), 109 ("aujourd'hui", 0), 110 ("Demain", 1), 111 ("demain", 1), 112 ("Hier", -1), 113 ("hier", -1), 114 ("today", 0), # assume default names exist 115 ("tomorrow", 1), 116 ("yesterday", -1), 117 ("au jour de hui", None)]: 118 got_dt, rc = self.cal.parseDT(date_string, start) 119 if expected_day_offset is not None: 120 self.assertEqual(rc, 1) 121 target = (start + datetime.timedelta(days=expected_day_offset)) 122 self.assertEqual(got_dt, target) 123 else: 124 self.assertEqual(rc, 0)
125
126 - def tearDown(self):
127 if self.__old_pdtlocale_fr is not None: # restore the locale 128 pdt.pdtLocales['fr_FR'] = self.__old_pdtlocale_fr 129 super(TestDayOffsets, self).tearDown()
130 131 132 if __name__ == "__main__": 133 unittest.main() 134