123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- # -*- coding: utf-8 -*-
- from __future__ import unicode_literals
- from django.contrib.auth import get_user_model
- from django.test import TestCase
- from ..parser import parse
- class MockRequest(object):
- scheme = 'http'
- def __init__(self, user=None):
- self.user = user
- def get_host(self):
- return 'test.com'
- class MockPoster(object):
- pass
- class BBCodeTests(TestCase):
- def test_inline_text(self):
- """inline elements are correctly parsed"""
- test_text = """
- Lorem **ipsum**, dolor met.
- Lorem [b]ipsum[/b], [i]dolor[/i] [u]met[/u].
- Lorem [b]**ipsum**[/b] [i]dolor[/i] [u]met[/u].
- Lorem [b]**ipsum[/b]** [i]dolor[/i] [u]met[/u].
- Lorem [b]__ipsum[/b]__ [i]dolor[/i] [u]met[/u].
- Lorem [b][i]ipsum[/i][/b].
- Lorem [b][i]ipsum[/b][/i].
- Lorem [b]ipsum[/B].
- """.strip()
- expected_result = """
- <p>Lorem <strong>ipsum</strong>, dolor met.</p>
- <p>Lorem <b>ipsum</b>, <i>dolor</i> <u>met</u>.</p>
- <p>Lorem <b><strong>ipsum</strong></b> <i>dolor</i> <u>met</u>.</p>
- <p>Lorem <b>**ipsum</b>** <i>dolor</i> <u>met</u>.</p>
- <p>Lorem <b>__ipsum</b>__ <i>dolor</i> <u>met</u>.</p>
- <p>Lorem <b><i>ipsum</i></b>.</p>
- <p>Lorem <b>[i]ipsum</b>[/i].</p>
- <p>Lorem <b>ipsum</b>.</p>
- """.strip()
- result = parse(test_text, MockRequest(), MockPoster(), minify=False)
- self.assertEqual(expected_result, result['parsed_text'])
- def test_blocks(self):
- """block elements are correctly parsed"""
- test_text = """
- Lorem ipsum.
- [hR]
- Dolor met.
- """.strip()
- expected_result = """
- <p>Lorem ipsum.</p>
- <hr/>
- <p>Dolor met.</p>
- """.strip()
- result = parse(test_text, MockRequest(), MockPoster(), minify=False)
- self.assertEqual(expected_result, result['parsed_text'])
- class MinifyTests(TestCase):
- def test_minified_text(self):
- """parser minifies text successfully"""
- test_text = """
- Lorem ipsum.
- Lorem ipsum.
- """.strip()
- expected_result = """
- <p>Lorem ipsum.</p><p>Lorem ipsum.</p>
- """.strip()
- result = parse(test_text, MockRequest(), MockPoster(), minify=True)
- self.assertEqual(expected_result, result['parsed_text'])
- def test_minified_unicode_text(self):
- """parser minifies unicode text successfully"""
- test_text = """
- Bżęczyszczykiewłicz ipsum.
- Lorem ipsum.
- """.strip()
- expected_result = """
- <p>Bżęczyszczykiewłicz ipsum.</p><p>Lorem ipsum.</p>
- """.strip()
- result = parse(test_text, MockRequest(), MockPoster(), minify=True)
- self.assertEqual(expected_result, result['parsed_text'])
- def test_complex_paragraph(self):
- """parser minifies complex paragraph"""
- User = get_user_model()
- user = User.objects.create_user('Bob', 'bob@test.com', 'Pass123')
- test_text = """
- Hey there @{}, how's going?
- """.strip().format(user)
- expected_result = """
- <p>Hey there <a href="{}">@{}</a>, how's going?</p>
- """.strip().format(user.get_absolute_url(), user)
- result = parse(test_text, MockRequest(user), user, minify=True)
- self.assertEqual(expected_result, result['parsed_text'])
- class CleanLinksTests(TestCase):
- def test_clean_current_link(self):
- """clean_links step leaves http://test.com alone"""
- test_text = """
- Lorem ipsum: http://test.com
- """.strip()
- expected_result = """
- <p>Lorem ipsum: <a href="/" rel="nofollow">test.com</a></p>
- """.strip()
- result = parse(test_text, MockRequest(), MockPoster(), minify=True)
- self.assertEqual(expected_result, result['parsed_text'])
- def test_trim_current_path(self):
- """clean_links step leaves http://test.com path"""
- test_text = """
- Lorem ipsum: http://test.com/somewhere-something/
- """.strip()
- expected_result = """
- <p>Lorem ipsum: <a href="/somewhere-something/" rel="nofollow">test.com/somewhere-something/</a></p>
- """.strip()
- result = parse(test_text, MockRequest(), MockPoster(), minify=True)
- self.assertEqual(expected_result, result['parsed_text'])
- def test_clean_outgoing_link_domain(self):
- """clean_links step leaves outgoing domain link"""
- test_text = """
- Lorem ipsum: http://somewhere.com
- """.strip()
- expected_result = """
- <p>Lorem ipsum: <a href="http://somewhere.com" rel="nofollow">somewhere.com</a></p>
- """.strip()
- result = parse(test_text, MockRequest(), MockPoster(), minify=True)
- self.assertEqual(expected_result, result['parsed_text'])
- def test_trim_outgoing_path(self):
- """clean_links step leaves outgoing link domain and path"""
- test_text = """
- Lorem ipsum: http://somewhere.com/somewhere-something/
- """.strip()
- expected_result = """
- <p>Lorem ipsum: <a href="http://somewhere.com/somewhere-something/" rel="nofollow">somewhere.com/somewhere-something/</a></p>
- """.strip()
- result = parse(test_text, MockRequest(), MockPoster(), minify=True)
- self.assertEqual(expected_result, result['parsed_text'])
- def test_clean_local_image_src(self):
- """clean_links step cleans local image src"""
- test_text = """
- !(http://test.com/image.jpg)
- """.strip()
- expected_result = """
- <p><img alt="test.com/image.jpg" src="/image.jpg"/></p>
- """.strip()
- result = parse(test_text, MockRequest(), MockPoster(), minify=True)
- self.assertEqual(expected_result, result['parsed_text'])
- def test_clean_remote_image_src(self):
- """clean_links step cleans remote image src"""
- test_text = """
- !(http://somewhere.com/image.jpg)
- """.strip()
- expected_result = """
- <p><img alt="somewhere.com/image.jpg" src="http://somewhere.com/image.jpg"/></p>
- """.strip()
- result = parse(test_text, MockRequest(), MockPoster(), minify=True)
- self.assertEqual(expected_result, result['parsed_text'])
|