test_parser.py 4.6 KB

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