PageRenderTime 27ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/tests/regressiontests/defaultfilters/tests.py

https://github.com/Tippr/django
Python | 538 lines | 495 code | 34 blank | 9 comment | 0 complexity | d78f8904a03b7681969ec2e692fa62cf MD5 | raw file
  1. # -*- coding: utf-8 -*-
  2. from __future__ import with_statement
  3. import datetime
  4. from django.test import TestCase
  5. from django.utils import unittest, translation
  6. from django.template.defaultfilters import *
  7. class DefaultFiltersTests(TestCase):
  8. def test_floatformat(self):
  9. self.assertEqual(floatformat(7.7), u'7.7')
  10. self.assertEqual(floatformat(7.0), u'7')
  11. self.assertEqual(floatformat(0.7), u'0.7')
  12. self.assertEqual(floatformat(0.07), u'0.1')
  13. self.assertEqual(floatformat(0.007), u'0.0')
  14. self.assertEqual(floatformat(0.0), u'0')
  15. self.assertEqual(floatformat(7.7, 3), u'7.700')
  16. self.assertEqual(floatformat(6.000000, 3), u'6.000')
  17. self.assertEqual(floatformat(6.200000, 3), u'6.200')
  18. self.assertEqual(floatformat(6.200000, -3), u'6.200')
  19. self.assertEqual(floatformat(13.1031, -3), u'13.103')
  20. self.assertEqual(floatformat(11.1197, -2), u'11.12')
  21. self.assertEqual(floatformat(11.0000, -2), u'11')
  22. self.assertEqual(floatformat(11.000001, -2), u'11.00')
  23. self.assertEqual(floatformat(8.2798, 3), u'8.280')
  24. self.assertEqual(floatformat(u'foo'), u'')
  25. self.assertEqual(floatformat(13.1031, u'bar'), u'13.1031')
  26. self.assertEqual(floatformat(18.125, 2), u'18.13')
  27. self.assertEqual(floatformat(u'foo', u'bar'), u'')
  28. self.assertEqual(floatformat(u'¿Cómo esta usted?'), u'')
  29. self.assertEqual(floatformat(None), u'')
  30. # Check that we're not converting to scientific notation.
  31. self.assertEqual(floatformat(0, 6), u'0.000000')
  32. self.assertEqual(floatformat(0, 7), u'0.0000000')
  33. self.assertEqual(floatformat(0, 10), u'0.0000000000')
  34. self.assertEqual(floatformat(0.000000000000000000015, 20),
  35. u'0.00000000000000000002')
  36. pos_inf = float(1e30000)
  37. self.assertEqual(floatformat(pos_inf), unicode(pos_inf))
  38. neg_inf = float(-1e30000)
  39. self.assertEqual(floatformat(neg_inf), unicode(neg_inf))
  40. nan = pos_inf / pos_inf
  41. self.assertEqual(floatformat(nan), unicode(nan))
  42. class FloatWrapper(object):
  43. def __init__(self, value):
  44. self.value = value
  45. def __float__(self):
  46. return self.value
  47. self.assertEqual(floatformat(FloatWrapper(11.000001), -2), u'11.00')
  48. # This fails because of Python's float handling. Floats with many zeroes
  49. # after the decimal point should be passed in as another type such as
  50. # unicode or Decimal.
  51. @unittest.expectedFailure
  52. def test_floatformat_fail(self):
  53. self.assertEqual(floatformat(1.00000000000000015, 16), u'1.0000000000000002')
  54. def test_addslashes(self):
  55. self.assertEqual(addslashes(u'"double quotes" and \'single quotes\''),
  56. u'\\"double quotes\\" and \\\'single quotes\\\'')
  57. self.assertEqual(addslashes(ur'\ : backslashes, too'),
  58. u'\\\\ : backslashes, too')
  59. def test_capfirst(self):
  60. self.assertEqual(capfirst(u'hello world'), u'Hello world')
  61. def test_escapejs(self):
  62. self.assertEqual(escapejs(u'"double quotes" and \'single quotes\''),
  63. u'\\u0022double quotes\\u0022 and \\u0027single quotes\\u0027')
  64. self.assertEqual(escapejs(ur'\ : backslashes, too'),
  65. u'\\u005C : backslashes, too')
  66. self.assertEqual(escapejs(u'and lots of whitespace: \r\n\t\v\f\b'),
  67. u'and lots of whitespace: \\u000D\\u000A\\u0009\\u000B\\u000C\\u0008')
  68. self.assertEqual(escapejs(ur'<script>and this</script>'),
  69. u'\\u003Cscript\\u003Eand this\\u003C/script\\u003E')
  70. self.assertEqual(
  71. escapejs(u'paragraph separator:\u2029and line separator:\u2028'),
  72. u'paragraph separator:\\u2029and line separator:\\u2028')
  73. def test_fix_ampersands(self):
  74. self.assertEqual(fix_ampersands(u'Jack & Jill & Jeroboam'),
  75. u'Jack &amp; Jill &amp; Jeroboam')
  76. def test_linenumbers(self):
  77. self.assertEqual(linenumbers(u'line 1\nline 2'),
  78. u'1. line 1\n2. line 2')
  79. self.assertEqual(linenumbers(u'\n'.join([u'x'] * 10)),
  80. u'01. x\n02. x\n03. x\n04. x\n05. x\n06. x\n07. '\
  81. u'x\n08. x\n09. x\n10. x')
  82. def test_lower(self):
  83. self.assertEqual(lower('TEST'), u'test')
  84. # uppercase E umlaut
  85. self.assertEqual(lower(u'\xcb'), u'\xeb')
  86. def test_make_list(self):
  87. self.assertEqual(make_list('abc'), [u'a', u'b', u'c'])
  88. self.assertEqual(make_list(1234), [u'1', u'2', u'3', u'4'])
  89. def test_slugify(self):
  90. self.assertEqual(slugify(' Jack & Jill like numbers 1,2,3 and 4 and'\
  91. ' silly characters ?%.$!/'),
  92. u'jack-jill-like-numbers-123-and-4-and-silly-characters')
  93. self.assertEqual(slugify(u"Un \xe9l\xe9phant \xe0 l'or\xe9e du bois"),
  94. u'un-elephant-a-loree-du-bois')
  95. def test_stringformat(self):
  96. self.assertEqual(stringformat(1, u'03d'), u'001')
  97. self.assertEqual(stringformat(1, u'z'), u'')
  98. def test_title(self):
  99. self.assertEqual(title('a nice title, isn\'t it?'),
  100. u"A Nice Title, Isn't It?")
  101. self.assertEqual(title(u'discoth\xe8que'), u'Discoth\xe8que')
  102. def test_truncatewords(self):
  103. self.assertEqual(
  104. truncatewords(u'A sentence with a few words in it', 1), u'A ...')
  105. self.assertEqual(
  106. truncatewords(u'A sentence with a few words in it', 5),
  107. u'A sentence with a few ...')
  108. self.assertEqual(
  109. truncatewords(u'A sentence with a few words in it', 100),
  110. u'A sentence with a few words in it')
  111. self.assertEqual(
  112. truncatewords(u'A sentence with a few words in it',
  113. 'not a number'), u'A sentence with a few words in it')
  114. def test_truncatewords_html(self):
  115. self.assertEqual(truncatewords_html(
  116. u'<p>one <a href="#">two - three <br>four</a> five</p>', 0), u'')
  117. self.assertEqual(truncatewords_html(u'<p>one <a href="#">two - '\
  118. u'three <br>four</a> five</p>', 2),
  119. u'<p>one <a href="#">two ...</a></p>')
  120. self.assertEqual(truncatewords_html(
  121. u'<p>one <a href="#">two - three <br>four</a> five</p>', 4),
  122. u'<p>one <a href="#">two - three <br>four ...</a></p>')
  123. self.assertEqual(truncatewords_html(
  124. u'<p>one <a href="#">two - three <br>four</a> five</p>', 5),
  125. u'<p>one <a href="#">two - three <br>four</a> five</p>')
  126. self.assertEqual(truncatewords_html(
  127. u'<p>one <a href="#">two - three <br>four</a> five</p>', 100),
  128. u'<p>one <a href="#">two - three <br>four</a> five</p>')
  129. self.assertEqual(truncatewords_html(
  130. u'\xc5ngstr\xf6m was here', 1), u'\xc5ngstr\xf6m ...')
  131. def test_upper(self):
  132. self.assertEqual(upper(u'Mixed case input'), u'MIXED CASE INPUT')
  133. # lowercase e umlaut
  134. self.assertEqual(upper(u'\xeb'), u'\xcb')
  135. def test_urlencode(self):
  136. self.assertEqual(urlencode(u'fran\xe7ois & jill'),
  137. u'fran%C3%A7ois%20%26%20jill')
  138. self.assertEqual(urlencode(1), u'1')
  139. def test_iriencode(self):
  140. self.assertEqual(iriencode(u'S\xf8r-Tr\xf8ndelag'),
  141. u'S%C3%B8r-Tr%C3%B8ndelag')
  142. self.assertEqual(iriencode(urlencode(u'fran\xe7ois & jill')),
  143. u'fran%C3%A7ois%20%26%20jill')
  144. def test_urlizetrunc(self):
  145. self.assertEqual(urlizetrunc(u'http://short.com/', 20), u'<a href='\
  146. u'"http://short.com/" rel="nofollow">http://short.com/</a>')
  147. self.assertEqual(urlizetrunc(u'http://www.google.co.uk/search?hl=en'\
  148. u'&q=some+long+url&btnG=Search&meta=', 20), u'<a href="http://'\
  149. u'www.google.co.uk/search?hl=en&q=some+long+url&btnG=Search&'\
  150. u'meta=" rel="nofollow">http://www.google...</a>')
  151. self.assertEqual(urlizetrunc('http://www.google.co.uk/search?hl=en'\
  152. u'&q=some+long+url&btnG=Search&meta=', 20), u'<a href="http://'\
  153. u'www.google.co.uk/search?hl=en&q=some+long+url&btnG=Search'\
  154. u'&meta=" rel="nofollow">http://www.google...</a>')
  155. # Check truncating of URIs which are the exact length
  156. uri = 'http://31characteruri.com/test/'
  157. self.assertEqual(len(uri), 31)
  158. self.assertEqual(urlizetrunc(uri, 31),
  159. u'<a href="http://31characteruri.com/test/" rel="nofollow">'\
  160. u'http://31characteruri.com/test/</a>')
  161. self.assertEqual(urlizetrunc(uri, 30),
  162. u'<a href="http://31characteruri.com/test/" rel="nofollow">'\
  163. u'http://31characteruri.com/t...</a>')
  164. self.assertEqual(urlizetrunc(uri, 2),
  165. u'<a href="http://31characteruri.com/test/"'\
  166. u' rel="nofollow">...</a>')
  167. def test_urlize(self):
  168. # Check normal urlize
  169. self.assertEqual(urlize('http://google.com'),
  170. u'<a href="http://google.com" rel="nofollow">http://google.com</a>')
  171. self.assertEqual(urlize('http://google.com/'),
  172. u'<a href="http://google.com/" rel="nofollow">http://google.com/</a>')
  173. self.assertEqual(urlize('www.google.com'),
  174. u'<a href="http://www.google.com" rel="nofollow">www.google.com</a>')
  175. self.assertEqual(urlize('djangoproject.org'),
  176. u'<a href="http://djangoproject.org" rel="nofollow">djangoproject.org</a>')
  177. self.assertEqual(urlize('info@djangoproject.org'),
  178. u'<a href="mailto:info@djangoproject.org">info@djangoproject.org</a>')
  179. # Check urlize with https addresses
  180. self.assertEqual(urlize('https://google.com'),
  181. u'<a href="https://google.com" rel="nofollow">https://google.com</a>')
  182. def test_wordcount(self):
  183. self.assertEqual(wordcount(''), 0)
  184. self.assertEqual(wordcount(u'oneword'), 1)
  185. self.assertEqual(wordcount(u'lots of words'), 3)
  186. self.assertEqual(wordwrap(u'this is a long paragraph of text that '\
  187. u'really needs to be wrapped I\'m afraid', 14),
  188. u"this is a long\nparagraph of\ntext that\nreally needs\nto be "\
  189. u"wrapped\nI'm afraid")
  190. self.assertEqual(wordwrap(u'this is a short paragraph of text.\n '\
  191. u'But this line should be indented', 14),
  192. u'this is a\nshort\nparagraph of\ntext.\n But this\nline '\
  193. u'should be\nindented')
  194. self.assertEqual(wordwrap(u'this is a short paragraph of text.\n '\
  195. u'But this line should be indented',15), u'this is a short\n'\
  196. u'paragraph of\ntext.\n But this line\nshould be\nindented')
  197. def test_rjust(self):
  198. self.assertEqual(ljust(u'test', 10), u'test ')
  199. self.assertEqual(ljust(u'test', 3), u'test')
  200. self.assertEqual(rjust(u'test', 10), u' test')
  201. self.assertEqual(rjust(u'test', 3), u'test')
  202. def test_center(self):
  203. self.assertEqual(center(u'test', 6), u' test ')
  204. def test_cut(self):
  205. self.assertEqual(cut(u'a string to be mangled', 'a'),
  206. u' string to be mngled')
  207. self.assertEqual(cut(u'a string to be mangled', 'ng'),
  208. u'a stri to be maled')
  209. self.assertEqual(cut(u'a string to be mangled', 'strings'),
  210. u'a string to be mangled')
  211. def test_force_escape(self):
  212. self.assertEqual(
  213. force_escape(u'<some html & special characters > here'),
  214. u'&lt;some html &amp; special characters &gt; here')
  215. self.assertEqual(
  216. force_escape(u'<some html & special characters > here ĐÅ€£'),
  217. u'&lt;some html &amp; special characters &gt; here'\
  218. u' \u0110\xc5\u20ac\xa3')
  219. def test_linebreaks(self):
  220. self.assertEqual(linebreaks(u'line 1'), u'<p>line 1</p>')
  221. self.assertEqual(linebreaks(u'line 1\nline 2'),
  222. u'<p>line 1<br />line 2</p>')
  223. self.assertEqual(linebreaks(u'line 1\rline 2'),
  224. u'<p>line 1<br />line 2</p>')
  225. self.assertEqual(linebreaks(u'line 1\r\nline 2'),
  226. u'<p>line 1<br />line 2</p>')
  227. def test_linebreaksbr(self):
  228. self.assertEqual(linebreaksbr(u'line 1\nline 2'),
  229. u'line 1<br />line 2')
  230. self.assertEqual(linebreaksbr(u'line 1\rline 2'),
  231. u'line 1<br />line 2')
  232. self.assertEqual(linebreaksbr(u'line 1\r\nline 2'),
  233. u'line 1<br />line 2')
  234. def test_removetags(self):
  235. self.assertEqual(removetags(u'some <b>html</b> with <script>alert'\
  236. u'("You smell")</script> disallowed <img /> tags', 'script img'),
  237. u'some <b>html</b> with alert("You smell") disallowed tags')
  238. self.assertEqual(striptags(u'some <b>html</b> with <script>alert'\
  239. u'("You smell")</script> disallowed <img /> tags'),
  240. u'some html with alert("You smell") disallowed tags')
  241. def test_dictsort(self):
  242. sorted_dicts = dictsort([{'age': 23, 'name': 'Barbara-Ann'},
  243. {'age': 63, 'name': 'Ra Ra Rasputin'},
  244. {'name': 'Jonny B Goode', 'age': 18}], 'age')
  245. self.assertEqual([sorted(dict.items()) for dict in sorted_dicts],
  246. [[('age', 18), ('name', 'Jonny B Goode')],
  247. [('age', 23), ('name', 'Barbara-Ann')],
  248. [('age', 63), ('name', 'Ra Ra Rasputin')]])
  249. def test_dictsortreversed(self):
  250. sorted_dicts = dictsortreversed([{'age': 23, 'name': 'Barbara-Ann'},
  251. {'age': 63, 'name': 'Ra Ra Rasputin'},
  252. {'name': 'Jonny B Goode', 'age': 18}],
  253. 'age')
  254. self.assertEqual([sorted(dict.items()) for dict in sorted_dicts],
  255. [[('age', 63), ('name', 'Ra Ra Rasputin')],
  256. [('age', 23), ('name', 'Barbara-Ann')],
  257. [('age', 18), ('name', 'Jonny B Goode')]])
  258. def test_first(self):
  259. self.assertEqual(first([0,1,2]), 0)
  260. self.assertEqual(first(u''), u'')
  261. self.assertEqual(first(u'test'), u't')
  262. def test_join(self):
  263. self.assertEqual(join([0,1,2], u'glue'), u'0glue1glue2')
  264. def test_length(self):
  265. self.assertEqual(length(u'1234'), 4)
  266. self.assertEqual(length([1,2,3,4]), 4)
  267. self.assertEqual(length_is([], 0), True)
  268. self.assertEqual(length_is([], 1), False)
  269. self.assertEqual(length_is('a', 1), True)
  270. self.assertEqual(length_is(u'a', 10), False)
  271. def test_slice(self):
  272. self.assertEqual(slice_(u'abcdefg', u'0'), u'')
  273. self.assertEqual(slice_(u'abcdefg', u'1'), u'a')
  274. self.assertEqual(slice_(u'abcdefg', u'-1'), u'abcdef')
  275. self.assertEqual(slice_(u'abcdefg', u'1:2'), u'b')
  276. self.assertEqual(slice_(u'abcdefg', u'1:3'), u'bc')
  277. self.assertEqual(slice_(u'abcdefg', u'0::2'), u'aceg')
  278. def test_unordered_list(self):
  279. self.assertEqual(unordered_list([u'item 1', u'item 2']),
  280. u'\t<li>item 1</li>\n\t<li>item 2</li>')
  281. self.assertEqual(unordered_list([u'item 1', [u'item 1.1']]),
  282. u'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1</li>\n\t</ul>\n\t</li>')
  283. self.assertEqual(
  284. unordered_list([u'item 1', [u'item 1.1', u'item1.2'], u'item 2']),
  285. u'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1</li>\n\t\t<li>item1.2'\
  286. u'</li>\n\t</ul>\n\t</li>\n\t<li>item 2</li>')
  287. self.assertEqual(
  288. unordered_list([u'item 1', [u'item 1.1', [u'item 1.1.1',
  289. [u'item 1.1.1.1']]]]),
  290. u'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1\n\t\t<ul>\n\t\t\t<li>'\
  291. u'item 1.1.1\n\t\t\t<ul>\n\t\t\t\t<li>item 1.1.1.1</li>\n\t\t\t'\
  292. u'</ul>\n\t\t\t</li>\n\t\t</ul>\n\t\t</li>\n\t</ul>\n\t</li>')
  293. self.assertEqual(unordered_list(
  294. ['States', ['Kansas', ['Lawrence', 'Topeka'], 'Illinois']]),
  295. u'\t<li>States\n\t<ul>\n\t\t<li>Kansas\n\t\t<ul>\n\t\t\t<li>'\
  296. u'Lawrence</li>\n\t\t\t<li>Topeka</li>\n\t\t</ul>\n\t\t</li>'\
  297. u'\n\t\t<li>Illinois</li>\n\t</ul>\n\t</li>')
  298. class ULItem(object):
  299. def __init__(self, title):
  300. self.title = title
  301. def __unicode__(self):
  302. return u'ulitem-%s' % str(self.title)
  303. a = ULItem('a')
  304. b = ULItem('b')
  305. self.assertEqual(unordered_list([a,b]),
  306. u'\t<li>ulitem-a</li>\n\t<li>ulitem-b</li>')
  307. # Old format for unordered lists should still work
  308. self.assertEqual(unordered_list([u'item 1', []]), u'\t<li>item 1</li>')
  309. self.assertEqual(unordered_list([u'item 1', [[u'item 1.1', []]]]),
  310. u'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1</li>\n\t</ul>\n\t</li>')
  311. self.assertEqual(unordered_list([u'item 1', [[u'item 1.1', []],
  312. [u'item 1.2', []]]]), u'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1'\
  313. u'</li>\n\t\t<li>item 1.2</li>\n\t</ul>\n\t</li>')
  314. self.assertEqual(unordered_list(['States', [['Kansas', [['Lawrence',
  315. []], ['Topeka', []]]], ['Illinois', []]]]), u'\t<li>States\n\t'\
  316. u'<ul>\n\t\t<li>Kansas\n\t\t<ul>\n\t\t\t<li>Lawrence</li>'\
  317. u'\n\t\t\t<li>Topeka</li>\n\t\t</ul>\n\t\t</li>\n\t\t<li>'\
  318. u'Illinois</li>\n\t</ul>\n\t</li>')
  319. def test_add(self):
  320. self.assertEqual(add(u'1', u'2'), 3)
  321. def test_get_digit(self):
  322. self.assertEqual(get_digit(123, 1), 3)
  323. self.assertEqual(get_digit(123, 2), 2)
  324. self.assertEqual(get_digit(123, 3), 1)
  325. self.assertEqual(get_digit(123, 4), 0)
  326. self.assertEqual(get_digit(123, 0), 123)
  327. self.assertEqual(get_digit(u'xyz', 0), u'xyz')
  328. def test_date(self):
  329. # real testing of date() is in dateformat.py
  330. self.assertEqual(date(datetime.datetime(2005, 12, 29), u"d F Y"),
  331. u'29 December 2005')
  332. self.assertEqual(date(datetime.datetime(2005, 12, 29), ur'jS o\f F'),
  333. u'29th of December')
  334. def test_time(self):
  335. # real testing of time() is done in dateformat.py
  336. self.assertEqual(time(datetime.time(13), u"h"), u'01')
  337. self.assertEqual(time(datetime.time(0), u"h"), u'12')
  338. def test_timesince(self):
  339. # real testing is done in timesince.py, where we can provide our own 'now'
  340. self.assertEqual(
  341. timesince(datetime.datetime.now() - datetime.timedelta(1)),
  342. u'1 day')
  343. self.assertEqual(
  344. timesince(datetime.datetime(2005, 12, 29),
  345. datetime.datetime(2005, 12, 30)),
  346. u'1 day')
  347. def test_timeuntil(self):
  348. self.assertEqual(
  349. timeuntil(datetime.datetime.now() + datetime.timedelta(1)),
  350. u'1 day')
  351. self.assertEqual(timeuntil(datetime.datetime(2005, 12, 30),
  352. datetime.datetime(2005, 12, 29)),
  353. u'1 day')
  354. def test_default(self):
  355. self.assertEqual(default(u"val", u"default"), u'val')
  356. self.assertEqual(default(None, u"default"), u'default')
  357. self.assertEqual(default(u'', u"default"), u'default')
  358. def test_if_none(self):
  359. self.assertEqual(default_if_none(u"val", u"default"), u'val')
  360. self.assertEqual(default_if_none(None, u"default"), u'default')
  361. self.assertEqual(default_if_none(u'', u"default"), u'')
  362. def test_divisibleby(self):
  363. self.assertEqual(divisibleby(4, 2), True)
  364. self.assertEqual(divisibleby(4, 3), False)
  365. def test_yesno(self):
  366. self.assertEqual(yesno(True), u'yes')
  367. self.assertEqual(yesno(False), u'no')
  368. self.assertEqual(yesno(None), u'maybe')
  369. self.assertEqual(yesno(True, u'certainly,get out of town,perhaps'),
  370. u'certainly')
  371. self.assertEqual(yesno(False, u'certainly,get out of town,perhaps'),
  372. u'get out of town')
  373. self.assertEqual(yesno(None, u'certainly,get out of town,perhaps'),
  374. u'perhaps')
  375. self.assertEqual(yesno(None, u'certainly,get out of town'),
  376. u'get out of town')
  377. def test_filesizeformat(self):
  378. self.assertEqual(filesizeformat(1023), u'1023 bytes')
  379. self.assertEqual(filesizeformat(1024), u'1.0 KB')
  380. self.assertEqual(filesizeformat(10*1024), u'10.0 KB')
  381. self.assertEqual(filesizeformat(1024*1024-1), u'1024.0 KB')
  382. self.assertEqual(filesizeformat(1024*1024), u'1.0 MB')
  383. self.assertEqual(filesizeformat(1024*1024*50), u'50.0 MB')
  384. self.assertEqual(filesizeformat(1024*1024*1024-1), u'1024.0 MB')
  385. self.assertEqual(filesizeformat(1024*1024*1024), u'1.0 GB')
  386. self.assertEqual(filesizeformat(1024*1024*1024*1024), u'1.0 TB')
  387. self.assertEqual(filesizeformat(1024*1024*1024*1024*1024), u'1.0 PB')
  388. self.assertEqual(filesizeformat(1024*1024*1024*1024*1024*2000),
  389. u'2000.0 PB')
  390. self.assertEqual(filesizeformat(complex(1,-1)), u'0 bytes')
  391. self.assertEqual(filesizeformat(""), u'0 bytes')
  392. self.assertEqual(filesizeformat(u"\N{GREEK SMALL LETTER ALPHA}"),
  393. u'0 bytes')
  394. def test_localized_filesizeformat(self):
  395. with self.settings(USE_L10N=True):
  396. with translation.override('de', deactivate=True):
  397. self.assertEqual(filesizeformat(1023), u'1023 Bytes')
  398. self.assertEqual(filesizeformat(1024), u'1,0 KB')
  399. self.assertEqual(filesizeformat(10*1024), u'10,0 KB')
  400. self.assertEqual(filesizeformat(1024*1024-1), u'1024,0 KB')
  401. self.assertEqual(filesizeformat(1024*1024), u'1,0 MB')
  402. self.assertEqual(filesizeformat(1024*1024*50), u'50,0 MB')
  403. self.assertEqual(filesizeformat(1024*1024*1024-1), u'1024,0 MB')
  404. self.assertEqual(filesizeformat(1024*1024*1024), u'1,0 GB')
  405. self.assertEqual(filesizeformat(1024*1024*1024*1024), u'1,0 TB')
  406. self.assertEqual(filesizeformat(1024*1024*1024*1024*1024),
  407. u'1,0 PB')
  408. self.assertEqual(filesizeformat(1024*1024*1024*1024*1024*2000),
  409. u'2000,0 PB')
  410. self.assertEqual(filesizeformat(complex(1,-1)), u'0 Bytes')
  411. self.assertEqual(filesizeformat(""), u'0 Bytes')
  412. self.assertEqual(filesizeformat(u"\N{GREEK SMALL LETTER ALPHA}"),
  413. u'0 Bytes')
  414. def test_pluralize(self):
  415. self.assertEqual(pluralize(1), u'')
  416. self.assertEqual(pluralize(0), u's')
  417. self.assertEqual(pluralize(2), u's')
  418. self.assertEqual(pluralize([1]), u'')
  419. self.assertEqual(pluralize([]), u's')
  420. self.assertEqual(pluralize([1,2,3]), u's')
  421. self.assertEqual(pluralize(1,u'es'), u'')
  422. self.assertEqual(pluralize(0,u'es'), u'es')
  423. self.assertEqual(pluralize(2,u'es'), u'es')
  424. self.assertEqual(pluralize(1,u'y,ies'), u'y')
  425. self.assertEqual(pluralize(0,u'y,ies'), u'ies')
  426. self.assertEqual(pluralize(2,u'y,ies'), u'ies')
  427. self.assertEqual(pluralize(0,u'y,ies,error'), u'')
  428. def test_phone2numeric(self):
  429. self.assertEqual(phone2numeric(u'0800 flowers'), u'0800 3569377')
  430. def test_non_string_input(self):
  431. # Filters shouldn't break if passed non-strings
  432. self.assertEqual(addslashes(123), u'123')
  433. self.assertEqual(linenumbers(123), u'1. 123')
  434. self.assertEqual(lower(123), u'123')
  435. self.assertEqual(make_list(123), [u'1', u'2', u'3'])
  436. self.assertEqual(slugify(123), u'123')
  437. self.assertEqual(title(123), u'123')
  438. self.assertEqual(truncatewords(123, 2), u'123')
  439. self.assertEqual(upper(123), u'123')
  440. self.assertEqual(urlencode(123), u'123')
  441. self.assertEqual(urlize(123), u'123')
  442. self.assertEqual(urlizetrunc(123, 1), u'123')
  443. self.assertEqual(wordcount(123), 1)
  444. self.assertEqual(wordwrap(123, 2), u'123')
  445. self.assertEqual(ljust('123', 4), u'123 ')
  446. self.assertEqual(rjust('123', 4), u' 123')
  447. self.assertEqual(center('123', 5), u' 123 ')
  448. self.assertEqual(center('123', 6), u' 123 ')
  449. self.assertEqual(cut(123, '2'), u'13')
  450. self.assertEqual(escape(123), u'123')
  451. self.assertEqual(linebreaks(123), u'<p>123</p>')
  452. self.assertEqual(linebreaksbr(123), u'123')
  453. self.assertEqual(removetags(123, 'a'), u'123')
  454. self.assertEqual(striptags(123), u'123')