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://gorod-omsk.ru/blog/pythy/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 63 2007-01-02 09:22:16Z the.pythy $" 
 21  __url__ = "$URL: https://pythy.googlecode.com/svn/trunk/pytils/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 -class RuStrftimeTestCase(unittest.TestCase):
211 """ 212 Test case for pytils.dt.ru_strftime 213 """ 214
215 - def setUp(self):
216 """ 217 Setting up environment for tests 218 """ 219 self.date = datetime.date(2006, 8, 25)
220
221 - def ck(self, format, estimates):
222 """ 223 Checks w/o inflected 224 """ 225 res = pytils.dt.ru_strftime(format, self.date) 226 self.assertEquals(res, estimates)
227
228 - def ckInflected(self, format, estimates):
229 """ 230 Checks with inflected 231 """ 232 res = pytils.dt.ru_strftime(format, self.date, True) 233 self.assertEquals(res, estimates)
234
235 - def ckInflectedDay(self, format, estimates):
236 """ 237 Checks with inflected day 238 """ 239 res = pytils.dt.ru_strftime(format, self.date, inflected_day=True) 240 self.assertEquals(res, estimates)
241
242 - def testRuStrftime(self):
243 """ 244 Unit-tests for pytils.dt.ru_strftime 245 """ 246 self.ck(u"тест %a", u"тест пт") 247 self.ck(u"тест %A", u"тест пятница") 248 self.ck(u"тест %b", u"тест авг") 249 self.ck(u"тест %B", u"тест август") 250 self.ckInflected(u"тест %B", u"тест августа") 251 self.ckInflected(u"тест выполнен %d %B %Y года", 252 u"тест выполнен 25 августа 2006 года") 253 self.ckInflectedDay(u"тест выполнен в %A", u"тест выполнен в пятницу")
254
255 - def testRuStrftimeExceptions(self):
256 """ 257 Unit-tests for testing pytils.dt.ru_strftime's exceptions 258 """ 259 self.assertRaises(TypeError, pytils.dt.ru_strftime, time.time()) 260 self.assertRaises(TypeError, pytils.dt.ru_strftime, u"%Y.%m.%d%", time.time())
261 262 263 if __name__ == '__main__': 264 unittest.main() 265