/django/contrib/markup/tests.py

https://code.google.com/p/mango-py/ · Python · 91 lines · 69 code · 18 blank · 4 comment · 9 complexity · 7ce0a6c0feff727e0652befcafb7c79c MD5 · raw file

  1. # Quick tests for the markup templatetags (django.contrib.markup)
  2. import re
  3. from django.template import Template, Context, add_to_builtins
  4. from django.utils import unittest
  5. from django.utils.html import escape
  6. add_to_builtins('django.contrib.markup.templatetags.markup')
  7. try:
  8. import textile
  9. except ImportError:
  10. textile = None
  11. try:
  12. import markdown
  13. except ImportError:
  14. markdown = None
  15. try:
  16. import docutils
  17. except ImportError:
  18. docutils = None
  19. class Templates(unittest.TestCase):
  20. textile_content = """Paragraph 1
  21. Paragraph 2 with "quotes" and @code@"""
  22. markdown_content = """Paragraph 1
  23. ## An h2"""
  24. rest_content = """Paragraph 1
  25. Paragraph 2 with a link_
  26. .. _link: http://www.example.com/"""
  27. @unittest.skipUnless(textile, 'texttile not installed')
  28. def test_textile(self):
  29. t = Template("{{ textile_content|textile }}")
  30. rendered = t.render(Context({'textile_content':self.textile_content})).strip()
  31. self.assertEqual(rendered.replace('\t', ''), """<p>Paragraph 1</p>
  32. <p>Paragraph 2 with &#8220;quotes&#8221; and <code>code</code></p>""")
  33. @unittest.skipIf(textile, 'texttile is installed')
  34. def test_no_textile(self):
  35. t = Template("{{ textile_content|textile }}")
  36. rendered = t.render(Context({'textile_content':self.textile_content})).strip()
  37. self.assertEqual(rendered, escape(self.textile_content))
  38. @unittest.skipUnless(markdown, 'markdown not installed')
  39. def test_markdown(self):
  40. t = Template("{{ markdown_content|markdown }}")
  41. rendered = t.render(Context({'markdown_content':self.markdown_content})).strip()
  42. pattern = re.compile("""<p>Paragraph 1\s*</p>\s*<h2>\s*An h2</h2>""")
  43. self.assertTrue(pattern.match(rendered))
  44. @unittest.skipIf(markdown, 'markdown is installed')
  45. def test_no_markdown(self):
  46. t = Template("{{ markdown_content|markdown }}")
  47. rendered = t.render(Context({'markdown_content':self.markdown_content})).strip()
  48. self.assertEqual(rendered, self.markdown_content)
  49. @unittest.skipUnless(docutils, 'docutils not installed')
  50. def test_docutils(self):
  51. t = Template("{{ rest_content|restructuredtext }}")
  52. rendered = t.render(Context({'rest_content':self.rest_content})).strip()
  53. # Different versions of docutils return slightly different HTML
  54. try:
  55. # Docutils v0.4 and earlier
  56. self.assertEqual(rendered, """<p>Paragraph 1</p>
  57. <p>Paragraph 2 with a <a class="reference" href="http://www.example.com/">link</a></p>""")
  58. except AssertionError, e:
  59. # Docutils from SVN (which will become 0.5)
  60. self.assertEqual(rendered, """<p>Paragraph 1</p>
  61. <p>Paragraph 2 with a <a class="reference external" href="http://www.example.com/">link</a></p>""")
  62. @unittest.skipIf(docutils, 'docutils is installed')
  63. def test_no_docutils(self):
  64. t = Template("{{ rest_content|restructuredtext }}")
  65. rendered = t.render(Context({'rest_content':self.rest_content})).strip()
  66. self.assertEqual(rendered, self.rest_content)
  67. if __name__ == '__main__':
  68. unittest.main()