test_parser.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. from django.test import TestCase
  4. from ..parser import parse
  5. class MockRequest(object):
  6. scheme = 'http'
  7. def get_host(self):
  8. return 'test.com'
  9. class MockPoster(object):
  10. pass
  11. class BBCodeTests(TestCase):
  12. def test_inline_text(self):
  13. """inline elements are correctly parsed"""
  14. test_text = """
  15. Lorem **ipsum** dolor met.
  16. Lorem [b]ipsum[/b] [i]dolor[/i] [u]met[/u].
  17. Lorem [b]**ipsum**[/b] [i]dolor[/i] [u]met[/u].
  18. Lorem [b]**ipsum[/b]** [i]dolor[/i] [u]met[/u].
  19. Lorem [b]__ipsum[/b]__ [i]dolor[/i] [u]met[/u].
  20. Lorem [b][i]ipsum[/i][/b].
  21. Lorem [b][i]ipsum[/b][/i].
  22. Lorem [b]ipsum[/B].
  23. """.strip()
  24. expected_result = """
  25. <p>Lorem <strong>ipsum</strong> dolor met.</p>
  26. <p>Lorem <b>ipsum</b> <i>dolor</i> <u>met</u>.</p>
  27. <p>Lorem <b><strong>ipsum</strong></b> <i>dolor</i> <u>met</u>.</p>
  28. <p>Lorem <b>**ipsum</b>** <i>dolor</i> <u>met</u>.</p>
  29. <p>Lorem <b>__ipsum</b>__ <i>dolor</i> <u>met</u>.</p>
  30. <p>Lorem <b><i>ipsum</i></b>.</p>
  31. <p>Lorem <b>[i]ipsum</b>[/i].</p>
  32. <p>Lorem <b>ipsum</b>.</p>
  33. """.strip()
  34. result = parse(test_text, MockRequest(), MockPoster(), minify=False)
  35. self.assertEqual(expected_result, result['parsed_text'])
  36. def test_blocks(self):
  37. """block elements are correctly parsed"""
  38. test_text = """
  39. Lorem ipsum.
  40. [hR]
  41. Dolor met.
  42. """.strip()
  43. expected_result = """
  44. <p>Lorem ipsum.</p>
  45. <hr/>
  46. <p>Dolor met.</p>
  47. """.strip()
  48. result = parse(test_text, MockRequest(), MockPoster(), minify=False)
  49. self.assertEqual(expected_result, result['parsed_text'])
  50. class MinifyTests(TestCase):
  51. def test_minified_text(self):
  52. """parser minifies text successfully"""
  53. test_text = """
  54. Lorem ipsum.
  55. Lorem ipsum.
  56. """.strip()
  57. expected_result = """
  58. <p>Lorem ipsum.</p><p>Lorem ipsum.</p>
  59. """.strip()
  60. result = parse(test_text, MockRequest(), MockPoster(), minify=True)
  61. self.assertEqual(expected_result, result['parsed_text'])
  62. def test_minified_unicode_text(self):
  63. """parser minifies unicode text successfully"""
  64. test_text = """
  65. Bżęczyszczykiewłicz ipsum.
  66. Lorem ipsum.
  67. """.strip()
  68. expected_result = """
  69. <p>Bżęczyszczykiewłicz ipsum.</p><p>Lorem ipsum.</p>
  70. """.strip()
  71. result = parse(test_text, MockRequest(), MockPoster(), minify=True)
  72. self.assertEqual(expected_result, result['parsed_text'])
  73. class CleanLinksTests(TestCase):
  74. def test_clean_current_link(self):
  75. """clean_links step leaves http://test.com alone"""
  76. test_text = """
  77. Lorem ipsum: http://test.com
  78. """.strip()
  79. expected_result = """
  80. <p>Lorem ipsum: <a href="/" rel="nofollow">test.com</a></p>
  81. """.strip()
  82. result = parse(test_text, MockRequest(), MockPoster(), minify=True)
  83. self.assertEqual(expected_result, result['parsed_text'])
  84. def test_trim_current_path(self):
  85. """clean_links step leaves http://test.com path"""
  86. test_text = """
  87. Lorem ipsum: http://test.com/somewhere-something/
  88. """.strip()
  89. expected_result = """
  90. <p>Lorem ipsum: <a href="/somewhere-something/" rel="nofollow">test.com/somewhere-something/</a></p>
  91. """.strip()
  92. result = parse(test_text, MockRequest(), MockPoster(), minify=True)
  93. self.assertEqual(expected_result, result['parsed_text'])
  94. def test_clean_outgoing_link_domain(self):
  95. """clean_links step leaves outgoing domain link"""
  96. test_text = """
  97. Lorem ipsum: http://somewhere.com
  98. """.strip()
  99. expected_result = """
  100. <p>Lorem ipsum: <a href="http://somewhere.com" rel="nofollow">somewhere.com</a></p>
  101. """.strip()
  102. result = parse(test_text, MockRequest(), MockPoster(), minify=True)
  103. self.assertEqual(expected_result, result['parsed_text'])
  104. def test_trim_outgoing_path(self):
  105. """clean_links step leaves outgoing link domain and path"""
  106. test_text = """
  107. Lorem ipsum: http://somewhere.com/somewhere-something/
  108. """.strip()
  109. expected_result = """
  110. <p>Lorem ipsum: <a href="http://somewhere.com/somewhere-something/" rel="nofollow">somewhere.com/somewhere-something/</a></p>
  111. """.strip()
  112. result = parse(test_text, MockRequest(), MockPoster(), minify=True)
  113. self.assertEqual(expected_result, result['parsed_text'])
  114. def test_clean_local_image_src(self):
  115. """clean_links step cleans local image src"""
  116. test_text = """
  117. !(http://test.com/image.jpg)
  118. """.strip()
  119. expected_result = """
  120. <p><img alt="test.com/image.jpg" src="/image.jpg"/></p>
  121. """.strip()
  122. result = parse(test_text, MockRequest(), MockPoster(), minify=True)
  123. self.assertEqual(expected_result, result['parsed_text'])
  124. def test_clean_remote_image_src(self):
  125. """clean_links step cleans remote image src"""
  126. test_text = """
  127. !(http://somewhere.com/image.jpg)
  128. """.strip()
  129. expected_result = """
  130. <p><img alt="somewhere.com/image.jpg" src="http://somewhere.com/image.jpg"/></p>
  131. """.strip()
  132. result = parse(test_text, MockRequest(), MockPoster(), minify=True)
  133. self.assertEqual(expected_result, result['parsed_text'])