Package pytils :: Package test :: Module test_dt
[hide private]

Source Code for Module pytils.test.test_dt

  1  # -*- coding: utf-8 -*- 
  2  # pytils - simple processing for russian strings 
  3  # Copyright (C) 2006-2007  Yury Yurevich 
  4  # 
  5  # http://www.pyobject.ru/projects/pytils/ 
  6  # 
  7  # This program is free software; you can redistribute it and/or 
  8  # modify it under the terms of the GNU General Public License 
  9  # as published by the Free Software Foundation, version 2 
 10  # of the License. 
 11  # 
 12  # This program is distributed in the hope that it will be useful, 
 13  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
 14  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 15  # GNU General Public License for more details. 
 16  """ 
 17  Unit-tests for pytils.dt 
 18  """ 
 19   
 20  __id__ = __revision__ = "$Id: test_dt.py 102 2007-07-12 12:33:36Z the.pythy $" 
 21  __url__ = "$URL: https://pythy.googlecode.com/svn/tags/pytils/0_2_2/pytils/test/test_dt.py $" 
 22   
 23  import datetime 
 24  import time 
 25  import unittest 
 26   
 27  import pytils  
 28   
29 -class DistanceOfTimeInWordsTestCase(unittest.TestCase):
30 """ 31 Test case for pytils.dt.distance_of_time_in_words 32 """ 33
34 - def setUp(self):
35 """ 36 Setting up environment for tests 37 """ 38 self.time = 1156862275.7711999 39 self.dtime = {} 40 self.updateTime(self.time)
41
42 - def updateTime(self, _time):
43 """Update all time-related values for current time """ 44 self.dtime['10sec_ago'] = _time - 10 45 self.dtime['1min_ago'] = _time - 60 46 self.dtime['10min_ago'] = _time - 600 47 self.dtime['1hr_ago'] = _time - 3720 48 self.dtime['10hr_ago'] = _time - 36600 49 self.dtime['1day_ago'] = _time - 87600 50 self.dtime['1day1hr_ago'] = _time - 90600 51 self.dtime['2day_ago'] = _time - 87600*2 52 53 self.dtime['in_10sec'] = _time + 10 54 self.dtime['in_1min'] = _time + 61 55 self.dtime['in_10min'] = _time + 601 56 self.dtime['in_1hr'] = _time + 3721 57 self.dtime['in_10hr'] = _time + 36601 58 self.dtime['in_1day'] = _time + 87601 59 self.dtime['in_1day1hr'] = _time + 90601 60 self.dtime['in_2day'] = _time + 87600*2 + 1
61
62 - def ckDefaultAccuracy(self, typ, estimated):
63 """ 64 Checks with default value for accuracy 65 """ 66 t0 = time.time() 67 # --- change state !!! attention 68 self.updateTime(t0) 69 # --- 70 t1 = self.dtime[typ] 71 res = pytils.dt.distance_of_time_in_words(from_time=t1, to_time=t0) 72 # --- revert state to original value 73 self.updateTime(self.time) 74 # --- 75 self.assertEquals(res, estimated)
76
77 - def ckDefaultToTime(self, typ, accuracy, estimated):
78 """ 79 Checks with default value of time 80 """ 81 t0 = time.time() 82 # --- change state !!! attention 83 self.updateTime(t0) 84 # --- 85 t1 = self.dtime[typ] 86 res = pytils.dt.distance_of_time_in_words(t1, accuracy) 87 # --- revert state to original value 88 self.updateTime(self.time) 89 # --- 90 self.assertEquals(res, estimated)
91
92 - def testDOTIWDefaultAccuracy(self):
93 """ 94 Unit-test for distance_of_time_in_words with default accuracy 95 """ 96 self.ckDefaultAccuracy("10sec_ago", u"менее минуты назад") 97 self.ckDefaultAccuracy("1min_ago", u"1 минуту назад") 98 self.ckDefaultAccuracy("10min_ago", u"10 минут назад") 99 self.ckDefaultAccuracy("1hr_ago", u"1 час назад") 100 self.ckDefaultAccuracy("10hr_ago", u"10 часов назад") 101 self.ckDefaultAccuracy("1day_ago", u"1 день назад") 102 self.ckDefaultAccuracy("1day1hr_ago", u"1 день назад") 103 self.ckDefaultAccuracy("2day_ago", u"2 дня назад") 104 105 self.ckDefaultAccuracy("in_10sec", u"менее чем через минуту") 106 self.ckDefaultAccuracy("in_1min", u"через 1 минуту") 107 self.ckDefaultAccuracy("in_10min", u"через 10 минут") 108 self.ckDefaultAccuracy("in_1hr", u"через 1 час") 109 self.ckDefaultAccuracy("in_10hr", u"через 10 часов") 110 self.ckDefaultAccuracy("in_1day", u"через 1 день") 111 self.ckDefaultAccuracy("in_1day1hr", u"через 1 день") 112 self.ckDefaultAccuracy("in_2day", u"через 2 дня")
113
115 """ 116 Unit-tests for distance_of_time_in_words with default to_time and accuracy=1 117 """ 118 # accuracy = 1 119 self.ckDefaultToTime("10sec_ago", 1, u"менее минуты назад") 120 self.ckDefaultToTime("1min_ago", 1, u"минуту назад") 121 self.ckDefaultToTime("10min_ago", 1, u"10 минут назад") 122 self.ckDefaultToTime("1hr_ago", 1, u"час назад") 123 self.ckDefaultToTime("10hr_ago", 1, u"10 часов назад") 124 self.ckDefaultToTime("1day_ago", 1, u"вчера") 125 self.ckDefaultToTime("1day1hr_ago", 1, u"вчера") 126 self.ckDefaultToTime("2day_ago", 1, u"позавчера") 127 128 self.ckDefaultToTime("in_10sec", 1, u"менее чем через минуту") 129 self.ckDefaultToTime("in_1min", 1, u"через минуту") 130 self.ckDefaultToTime("in_10min", 1, u"через 10 минут") 131 self.ckDefaultToTime("in_1hr", 1, u"через час") 132 self.ckDefaultToTime("in_10hr", 1, u"через 10 часов") 133 self.ckDefaultToTime("in_1day", 1, u"завтра") 134 self.ckDefaultToTime("in_1day1hr", 1, u"завтра") 135 self.ckDefaultToTime("in_2day", 1, u"послезавтра")
136
138 """ 139 Unit-tests for distance_of_time_in_words with default to_time and accuracy=2 140 """ 141 # accuracy = 2 142 self.ckDefaultToTime("10sec_ago", 2, u"менее минуты назад") 143 self.ckDefaultToTime("1min_ago", 2, u"минуту назад") 144 self.ckDefaultToTime("10min_ago", 2, u"10 минут назад") 145 self.ckDefaultToTime("1hr_ago", 2, u"1 час 2 минуты назад") 146 self.ckDefaultToTime("10hr_ago", 2, u"10 часов 10 минут назад") 147 self.ckDefaultToTime("1day_ago", 2, u"вчера") 148 self.ckDefaultToTime("1day1hr_ago", 2, u"1 день 1 час назад") 149 self.ckDefaultToTime("2day_ago", 2, u"позавчера") 150 151 self.ckDefaultToTime("in_10sec", 2, u"менее чем через минуту") 152 self.ckDefaultToTime("in_1min", 2, u"через минуту") 153 self.ckDefaultToTime("in_10min", 2, u"через 10 минут") 154 self.ckDefaultToTime("in_1hr", 2, u"через 1 час 2 минуты") 155 self.ckDefaultToTime("in_10hr", 2, u"через 10 часов 10 минут") 156 self.ckDefaultToTime("in_1day", 2, u"завтра") 157 self.ckDefaultToTime("in_1day1hr", 2, u"через 1 день 1 час") 158 self.ckDefaultToTime("in_2day", 2, u"послезавтра")
159
161 """ 162 Unit-tests for distance_of_time_in_words with default to_time and accuracy=3 163 """ 164 # accuracy = 3 165 self.ckDefaultToTime("10sec_ago", 3, u"менее минуты назад") 166 self.ckDefaultToTime("1min_ago", 3, u"минуту назад") 167 self.ckDefaultToTime("10min_ago", 3, u"10 минут назад") 168 self.ckDefaultToTime("1hr_ago", 3, u"1 час 2 минуты назад") 169 self.ckDefaultToTime("10hr_ago", 3, u"10 часов 10 минут назад") 170 self.ckDefaultToTime("1day_ago", 3, 171 u"1 день 0 часов 20 минут назад") 172 self.ckDefaultToTime("1day1hr_ago", 3, 173 u"1 день 1 час 10 минут назад") 174 self.ckDefaultToTime("2day_ago", 3, 175 u"2 дня 0 часов 40 минут назад") 176 177 self.ckDefaultToTime("in_10sec", 3, u"менее чем через минуту") 178 self.ckDefaultToTime("in_1min", 3, u"через минуту") 179 self.ckDefaultToTime("in_10min", 3, u"через 10 минут") 180 self.ckDefaultToTime("in_1hr", 3, u"через 1 час 2 минуты") 181 self.ckDefaultToTime("in_10hr", 3, u"через 10 часов 10 минут") 182 self.ckDefaultToTime("in_1day", 3, 183 u"через 1 день 0 часов 20 минут") 184 self.ckDefaultToTime("in_1day1hr", 3, 185 u"через 1 день 1 час 10 минут") 186 self.ckDefaultToTime("in_2day", 3, 187 u"через 2 дня 0 часов 40 минут")
188
189 - def testDOTWDatetimeType(self):
190 """ 191 Unit-tests for testing datetime.datetime as input values 192 """ 193 first_time = datetime.datetime.now() 194 second_time = first_time + datetime.timedelta(0, 1000) 195 self.assertEquals(pytils.dt.distance_of_time_in_words( 196 from_time=first_time, 197 accuracy=1, 198 to_time=second_time), 199 u"16 минут назад")
200
201 - def testDOTIWExceptions(self):
202 """ 203 Unit-tests for testings distance_of_time_in_words' exceptions 204 """ 205 self.assertRaises(TypeError, pytils.dt.distance_of_time_in_words, "test") 206 self.assertRaises(TypeError, pytils.dt.distance_of_time_in_words, time.time(), "test") 207 self.assertRaises(TypeError, pytils.dt.distance_of_time_in_words, time.time(), 2, "test") 208 self.assertRaises(ValueError, pytils.dt.distance_of_time_in_words, time.time(), 0)
209
210 - def testIssue25DaysFixed(self):
211 """ 212 Unit-test for testing that Issue#25 is fixed (err when accuracy==1, days<>0, hours==1) 213 """ 214 d_days = datetime.datetime.now() - datetime.timedelta(13, 3620) 215 self.assertEquals(pytils.dt.distance_of_time_in_words(d_days), 216 u"13 дней назад")
217
218 - def testIssue25HoursFixed(self):
219 """ 220 Unit-test for testing that Issue#25 is fixed (err when accuracy==1, hours<>0, minutes==1) 221 """ 222 d_hours = datetime.datetime.now() - datetime.timedelta(0, 46865) 223 self.assertEquals(pytils.dt.distance_of_time_in_words(d_hours), 224 u"13 часов назад")
225 226
227 -class RuStrftimeTestCase(unittest.TestCase):
228 """ 229 Test case for pytils.dt.ru_strftime 230 """ 231
232 - def setUp(self):
233 """ 234 Setting up environment for tests 235 """ 236 self.date = datetime.date(2006, 8, 25)
237
238 - def ck(self, format, estimates, date=None):
239 """ 240 Checks w/o inflected 241 """ 242 if date is None: 243 date = self.date 244 res = pytils.dt.ru_strftime(format, date) 245 self.assertEquals(res, estimates)
246
247 - def ckInflected(self, format, estimates, date=None):
248 """ 249 Checks with inflected 250 """ 251 if date is None: 252 date = self.date 253 res = pytils.dt.ru_strftime(format, date, True) 254 self.assertEquals(res, estimates)
255
256 - def ckInflectedDay(self, format, estimates, date=None):
257 """ 258 Checks with inflected day 259 """ 260 if date is None: 261 date = self.date 262 res = pytils.dt.ru_strftime(format, date, inflected_day=True) 263 self.assertEquals(res, estimates)
264
265 - def ckPreposition(self, format, estimates, date=None):
266 """ 267 Checks with inflected day 268 """ 269 if date is None: 270 date = self.date 271 res = pytils.dt.ru_strftime(format, date, preposition=True) 272 self.assertEquals(res, estimates)
273
274 - def testRuStrftime(self):
275 """ 276 Unit-tests for pytils.dt.ru_strftime 277 """ 278 self.ck(u"тест %a", u"тест пт") 279 self.ck(u"тест %A", u"тест пятница") 280 self.ck(u"тест %b", u"тест авг") 281 self.ck(u"тест %B", u"тест август") 282 self.ckInflected(u"тест %B", u"тест августа") 283 self.ckInflected(u"тест выполнен %d %B %Y года", 284 u"тест выполнен 25 августа 2006 года") 285 self.ckInflectedDay(u"тест выполнен в %A", u"тест выполнен в пятницу")
286
288 """ 289 Unit-tests for pytils.dt.ru_strftime with preposition option 290 """ 291 self.ckPreposition(u"тест %a", u"тест в\xa0пт") 292 self.ckPreposition(u"тест %A", u"тест в\xa0пятницу") 293 self.ckPreposition(u"тест %A", u"тест во\xa0вторник", datetime.date(2007, 6, 5))
294
295 - def testRuStrftimeZeros(self):
296 """ 297 Unit-test for testing that Issue#24 is correctly implemented 298 299 It means, 1 April 2007, but 01.04.2007 300 """ 301 self.ck(u"%d.%m.%Y", u"01.04.2007", datetime.date(2007, 4, 1)) 302 self.ckInflected(u"%d %B %Y", u"1 апреля 2007", datetime.date(2007, 4, 1))
303
304 - def testRuStrftimeExceptions(self):
305 """ 306 Unit-tests for testing pytils.dt.ru_strftime's exceptions 307 """ 308 self.assertRaises(TypeError, pytils.dt.ru_strftime, time.time()) 309 self.assertRaises(TypeError, pytils.dt.ru_strftime, u"%Y.%m.%d%", time.time())
310
311 - def testIssue20Fixed(self):
312 """ 313 Unit-test for testing that Issue#20 is fixed (typo) 314 """ 315 self.assertEquals(u"воскресенье", 316 pytils.dt.ru_strftime( 317 u"%A", 318 datetime.date(2007,3,18), 319 inflected_day=True) 320 )
321 322 323 if __name__ == '__main__': 324 unittest.main() 325