aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_legacy.py
diff options
context:
space:
mode:
authorWaylan Limberg <waylan.limberg@icloud.com>2018-01-06 01:04:11 -0500
committerWaylan Limberg <waylan.limberg@icloud.com>2018-01-08 20:41:18 -0500
commit49249b3fb6c458c2cbc34c409ba57cfae6e72320 (patch)
treee5cdbb09bf193f40ccc8735679d93a8c14aa591a /tests/test_legacy.py
parent76e0a63e12dd964311c4350a5735bb7f51ef87a6 (diff)
downloadmarkdown-49249b3fb6c458c2cbc34c409ba57cfae6e72320.tar.gz
markdown-49249b3fb6c458c2cbc34c409ba57cfae6e72320.tar.bz2
markdown-49249b3fb6c458c2cbc34c409ba57cfae6e72320.zip
Switch from nose to unittest
All file-based tests are now defined as unittest test cases via a metaclass which walks a directory and builds a unittest for each pair of test files. To run the tests just run `python -m unittest discover tests`. Or use tox as the tox config has been updated to run the new tests and all nose specific code has been removed. The test generator tools have been removed as well. If any changes or additions need to be made to tests, they should be implemented using the new framework rather than with the file-based tests. Eventually, only the PHP and pl tests should remain as file-based tests.
Diffstat (limited to 'tests/test_legacy.py')
-rw-r--r--tests/test_legacy.py213
1 files changed, 213 insertions, 0 deletions
diff --git a/tests/test_legacy.py b/tests/test_legacy.py
new file mode 100644
index 0000000..17c4282
--- /dev/null
+++ b/tests/test_legacy.py
@@ -0,0 +1,213 @@
+from markdown.test_tools import LegacyTestCase, Kwargs
+import os
+import warnings
+
+# Warnings should cause tests to fail...
+warnings.simplefilter('error')
+# Except for the warnings that shouldn't
+warnings.filterwarnings('default', category=PendingDeprecationWarning)
+warnings.filterwarnings('default', category=DeprecationWarning, module='markdown')
+
+parent_test_dir = os.path.abspath(os.path.dirname(__file__))
+
+
+class TestBasic(LegacyTestCase):
+ location = os.path.join(parent_test_dir, 'basic')
+
+
+class TestMisc(LegacyTestCase):
+ location = os.path.join(parent_test_dir, 'misc')
+
+
+class TestOptions(LegacyTestCase):
+ location = os.path.join(parent_test_dir, 'options')
+
+ lazy_ol_off = Kwargs(lazy_ol=False)
+
+ html4 = Kwargs(output_format='html4')
+
+ no_attributes = Kwargs(enable_attributes=False)
+
+ no_smart_emphasis = Kwargs(smart_emphasis=False)
+
+
+class TestSafeMode(LegacyTestCase):
+ location = os.path.join(parent_test_dir, 'safe_mode')
+ default_kwargs = Kwargs(safe_mode='escape')
+
+ remove = Kwargs(safe_mode='remove')
+
+ replace = Kwargs(safe_mode='replace')
+
+
+class TestPhp(LegacyTestCase):
+ """
+ Notes on "excluded" tests:
+
+ Quotes in attributes: attributes get output in differant order
+
+ Inline HTML (Span): Backtick in raw HTML attribute TODO: fixme
+
+ Backslash escapes: Weird whitespace issue in output
+
+ Ins & del: Our behavior follows markdown.pl I think PHP is wrong here
+
+ Auto Links: TODO: fix raw HTML so is doesn't match <hr@example.com> as a <hr>.
+
+ Empty List Item: We match markdown.pl here. Maybe someday we'll support this
+
+ Headers: TODO: fix headers to not require blank line before
+
+ Mixed OLs and ULs: We match markdown.pl here. I think PHP is wrong here
+
+ Emphasis: We have various minor differances in combined & incorrect em markup.
+ Maybe fix a few of them - but most aren't too important
+
+ Code block in a list item: We match markdown.pl - not sure how php gets that output??
+
+ PHP-Specific Bugs: Not sure what to make of the escaping stuff here.
+ Why is PHP not removing a blackslash?
+ """
+ location = os.path.join(parent_test_dir, 'php')
+ normalize = True
+ input_ext = '.text'
+ output_ext = '.xhtml'
+ exclude = [
+ 'Quotes_in_attributes',
+ 'Inline_HTML_(Span)',
+ 'Backslash_escapes',
+ 'Ins_&_del',
+ 'Auto_Links',
+ 'Empty_List_Item',
+ 'Headers',
+ 'Mixed_OLs_and_ULs',
+ 'Emphasis',
+ 'Code_block_in_a_list_item',
+ 'PHP_Specific_Bugs'
+ ]
+
+
+# class TestPhpExtra(LegacyTestCase):
+# location = os.path.join(parent_test_dir, 'php/extra')
+# normalize = True
+# input_ext = '.text'
+# output_ext = '.xhtml'
+# default_kwargs = Kwargs(extensions=['extra'])
+
+
+class TestPl2004(LegacyTestCase):
+ location = os.path.join(parent_test_dir, 'pl/Tests_2004')
+ normalize = True
+ input_ext = '.text'
+ exclude = ['Yuri_Footnotes']
+
+
+class TestPl2007(LegacyTestCase):
+ """
+ Notes on "excluded" tests:
+
+ Images: the attributes don't get ordered the same so we skip this
+
+ Code Blocks: some weird whitespace issue
+
+ Links, reference style: weird issue with nested brackets TODO: fixme
+
+ Backslash escapes: backticks in raw html attributes TODO: fixme
+
+ Code Spans: more backticks in raw html attributes TODO: fixme
+ """
+ location = os.path.join(parent_test_dir, 'pl/Tests_2007')
+ normalize = True
+ input_ext = '.text'
+ exclude = [
+ 'Images',
+ 'Code_Blocks',
+ 'Links,_reference_style',
+ 'Backslash_escapes',
+ 'Code_Spans'
+ ]
+
+
+class TestExtensions(LegacyTestCase):
+ location = os.path.join(parent_test_dir, 'extensions')
+ exclude = ['codehilite']
+
+ attr_list = Kwargs(
+ extensions=[
+ 'markdown.extensions.attr_list',
+ 'markdown.extensions.def_list',
+ 'markdown.extensions.smarty'
+ ]
+ )
+
+ codehilite = Kwargs(extensions=['markdown.extensions.codehilite'])
+
+ toc = Kwargs(extensions=['markdown.extensions.toc'])
+
+ toc_invalid = Kwargs(extensions=['markdown.extensions.toc'])
+
+ toc_out_of_order = Kwargs(extensions=['markdown.extensions.toc'])
+
+ toc_nested = Kwargs(
+ extensions=['markdown.extensions.toc'],
+ extension_configs={'markdown.extensions.toc': {'permalink': True}}
+ )
+
+ toc_nested2 = Kwargs(
+ extensions=['markdown.extensions.toc'],
+ extension_configs={'markdown.extensions.toc': {'permalink': "[link]"}}
+ )
+
+ toc_nested_list = Kwargs(extensions=['markdown.extensions.toc'])
+
+ wikilinks = Kwargs(extensions=['markdown.extensions.wikilinks'])
+
+ fenced_code = Kwargs(extensions=['markdown.extensions.fenced_code'])
+
+ github_flavored = Kwargs(extensions=['markdown.extensions.fenced_code'])
+
+ sane_lists = Kwargs(extensions=['markdown.extensions.sane_lists'])
+
+ nl2br_w_attr_list = Kwargs(
+ extensions=[
+ 'markdown.extensions.nl2br',
+ 'markdown.extensions.attr_list'
+ ]
+ )
+
+ admonition = Kwargs(extensions=['markdown.extensions.admonition'])
+
+ smarty = Kwargs(
+ extensions=['markdown.extensions.smarty'],
+ extension_configs={'markdown.extensions.smarty': {'smart_angled_quotes': True}}
+ )
+
+
+class TestExtensionsExtra(LegacyTestCase):
+ location = os.path.join(parent_test_dir, 'extensions/extra')
+ default_kwargs = Kwargs(extensions=['markdown.extensions.extra'])
+
+ loose_def_list = Kwargs(extensions=['markdown.extensions.def_list'])
+
+ simple_def_lists = Kwargs(extensions=['markdown.extensions.def_list'])
+
+ abbr = Kwargs(extensions=['markdown.extensions.abbr'])
+
+ footnotes = Kwargs(extensions=['markdown.extensions.footnotes'])
+
+ tables = Kwargs(extensions=['markdown.extensions.tables'])
+
+ tables_and_attr_list = Kwargs(
+ extensions=['markdown.extensions.tables', 'markdown.extensions.attr_list']
+ )
+
+ extra_config = Kwargs(
+ extensions=['markdown.extensions.extra'],
+ extension_configs={
+ 'markdown.extensions.extra': {
+ 'markdown.extensions.footnotes': {
+ 'PLACE_MARKER': '~~~placemarker~~~'
+ }
+ }
+ }
+ )