diff options
| author | aa-turner <aa-turner@929543f6-e4f2-0310-98a6-ba3bd3dd1d04> | 2022-11-08 14:34:18 +0000 |
|---|---|---|
| committer | aa-turner <aa-turner@929543f6-e4f2-0310-98a6-ba3bd3dd1d04> | 2022-11-08 14:34:18 +0000 |
| commit | 460528d185dca5b4b2bbdac3123e9306ab18afab (patch) | |
| tree | 1f2e0a2a55b89830efadd486adc323746b91eaae /docutils/test/test_parsers | |
| parent | 5e7c6c3ce5835b59f058b12205ab9e1c1e63da78 (diff) | |
| download | docutils-460528d185dca5b4b2bbdac3123e9306ab18afab.tar.gz | |
Inline ``RecommonmarkParserTestSuite``
- Move all usages of ``RecommonmarkParserTestSuite.generateTests``
to using subtests.
- Move the conditional test skipping logic to ``__init__.py`` in
``test_recommonmark``, and move the missing module test from
``test_recommonmark.test_misc`` to ``test_get_parser_class``, as
otherwise the test would never run.
git-svn-id: https://svn.code.sf.net/p/docutils/code/trunk@9222 929543f6-e4f2-0310-98a6-ba3bd3dd1d04
Diffstat (limited to 'docutils/test/test_parsers')
15 files changed, 274 insertions, 98 deletions
diff --git a/docutils/test/test_parsers/test_get_parser_class.py b/docutils/test/test_parsers/test_get_parser_class.py index 264121352..6b6275622 100644 --- a/docutils/test/test_parsers/test_get_parser_class.py +++ b/docutils/test/test_parsers/test_get_parser_class.py @@ -11,7 +11,12 @@ test get_parser_class import unittest +from docutils.core import publish_string from docutils.parsers import get_parser_class +try: + md_parser_class = get_parser_class('recommonmark') +except ImportError: + md_parser_class = None class GetParserClassTestCase(unittest.TestCase): @@ -30,6 +35,16 @@ class GetParserClassTestCase(unittest.TestCase): # raises ImportError on failure +@unittest.skipIf(md_parser_class is not None, + 'Optional "recommonmark" module found.') +class RecommonmarkMissingTests(unittest.TestCase): + + def test_missing_parser_message(self): + with self.assertRaisesRegex(ImportError, + 'requires the package .*recommonmark'): + publish_string('test data', parser_name='recommonmark') + + if __name__ == '__main__': import unittest unittest.main() diff --git a/docutils/test/test_parsers/test_recommonmark/__init__.py b/docutils/test/test_parsers/test_recommonmark/__init__.py index e69de29bb..9cb71807f 100644 --- a/docutils/test/test_parsers/test_recommonmark/__init__.py +++ b/docutils/test/test_parsers/test_recommonmark/__init__.py @@ -0,0 +1,21 @@ +"""Optional tests with 3rd party CommonMark parser""" + +import unittest + +from test import DocutilsTestSupport # NoQA: F401 # before importing docutils! + +import docutils.parsers + +# TODO: test with alternative CommonMark parsers? +md_parser = 'recommonmark' +# md_parser = 'pycmark' +# md_parser = 'myst' +try: + import recommonmark + docutils.parsers.get_parser_class(md_parser) +except ImportError: + raise unittest.SkipTest(f'Cannot test "{md_parser}". ' + 'Parser not found.') +else: + if md_parser == 'recommonmark' and recommonmark.__version__ < '0.6.0': + raise unittest.SkipTest('"recommonmark" parser too old, skip tests') diff --git a/docutils/test/test_parsers/test_recommonmark/test_block_quotes.py b/docutils/test/test_parsers/test_recommonmark/test_block_quotes.py index 7f5118ff9..43ebf4163 100755 --- a/docutils/test/test_parsers/test_recommonmark/test_block_quotes.py +++ b/docutils/test/test_parsers/test_recommonmark/test_block_quotes.py @@ -14,13 +14,26 @@ Test for block quotes in CommonMark parsers Cf. the `CommonMark Specification <https://spec.commonmark.org/>`__ """ -from test import DocutilsTestSupport +import unittest +from test import DocutilsTestSupport # NoQA: F401 -def suite(): - s = DocutilsTestSupport.RecommonmarkParserTestSuite() - s.generateTests(totest) - return s +from docutils.frontend import get_default_settings +from docutils.parsers.recommonmark_wrapper import Parser +from docutils.utils import new_document + + +class RecommonmarkParserTestCase(unittest.TestCase): + def test_parser(self): + parser = Parser() + settings = get_default_settings(Parser) + for name, cases in totest.items(): + for casenum, (case_input, case_expected) in enumerate(cases): + with self.subTest(id=f'totest[{name!r}][{casenum}]'): + document = new_document('test data', settings.copy()) + parser.parse(case_input, document) + output = document.pformat() + self.assertEqual(output, case_expected) totest = {} @@ -104,4 +117,4 @@ Here is a paragraph. if __name__ == '__main__': import unittest - unittest.main(defaultTest='suite') + unittest.main() diff --git a/docutils/test/test_parsers/test_recommonmark/test_bullet_lists.py b/docutils/test/test_parsers/test_recommonmark/test_bullet_lists.py index b42f14e7b..7b45dfa9d 100755 --- a/docutils/test/test_parsers/test_recommonmark/test_bullet_lists.py +++ b/docutils/test/test_parsers/test_recommonmark/test_bullet_lists.py @@ -14,13 +14,26 @@ Test for bullet lists in CommonMark parsers. Cf. the `CommonMark Specification <https://spec.commonmark.org/>`__ """ -from test import DocutilsTestSupport +import unittest +from test import DocutilsTestSupport # NoQA: F401 -def suite(): - s = DocutilsTestSupport.RecommonmarkParserTestSuite() - s.generateTests(totest) - return s +from docutils.frontend import get_default_settings +from docutils.parsers.recommonmark_wrapper import Parser +from docutils.utils import new_document + + +class RecommonmarkParserTestCase(unittest.TestCase): + def test_parser(self): + parser = Parser() + settings = get_default_settings(Parser) + for name, cases in totest.items(): + for casenum, (case_input, case_expected) in enumerate(cases): + with self.subTest(id=f'totest[{name!r}][{casenum}]'): + document = new_document('test data', settings.copy()) + parser.parse(case_input, document) + output = document.pformat() + self.assertEqual(output, case_expected) totest = {} @@ -194,4 +207,4 @@ Unicode bullets are not supported by CommonMark. if __name__ == '__main__': import unittest - unittest.main(defaultTest='suite') + unittest.main() diff --git a/docutils/test/test_parsers/test_recommonmark/test_enumerated_lists.py b/docutils/test/test_parsers/test_recommonmark/test_enumerated_lists.py index 8218b0aaa..e0d7b21b8 100755 --- a/docutils/test/test_parsers/test_recommonmark/test_enumerated_lists.py +++ b/docutils/test/test_parsers/test_recommonmark/test_enumerated_lists.py @@ -13,13 +13,26 @@ Test for enumerated lists in CommonMark parsers Cf. the `CommonMark Specification <https://spec.commonmark.org/>`__ """ -from test import DocutilsTestSupport +import unittest +from test import DocutilsTestSupport # NoQA: F401 -def suite(): - s = DocutilsTestSupport.RecommonmarkParserTestSuite() - s.generateTests(totest) - return s +from docutils.frontend import get_default_settings +from docutils.parsers.recommonmark_wrapper import Parser +from docutils.utils import new_document + + +class RecommonmarkParserTestCase(unittest.TestCase): + def test_parser(self): + parser = Parser() + settings = get_default_settings(Parser) + for name, cases in totest.items(): + for casenum, (case_input, case_expected) in enumerate(cases): + with self.subTest(id=f'totest[{name!r}][{casenum}]'): + document = new_document('test data', settings.copy()) + parser.parse(case_input, document) + output = document.pformat() + self.assertEqual(output, case_expected) totest = {} @@ -380,4 +393,4 @@ No item content: if __name__ == '__main__': import unittest - unittest.main(defaultTest='suite') + unittest.main() diff --git a/docutils/test/test_parsers/test_recommonmark/test_html_blocks.py b/docutils/test/test_parsers/test_recommonmark/test_html_blocks.py index da1155f24..c63a8f68b 100644 --- a/docutils/test/test_parsers/test_recommonmark/test_html_blocks.py +++ b/docutils/test/test_parsers/test_recommonmark/test_html_blocks.py @@ -14,13 +14,26 @@ Tests for HTML blocks in CommonMark parsers Cf. the `CommonMark Specification <https://spec.commonmark.org/>`__ """ -from test import DocutilsTestSupport +import unittest +from test import DocutilsTestSupport # NoQA: F401 -def suite(): - s = DocutilsTestSupport.RecommonmarkParserTestSuite() - s.generateTests(totest) - return s +from docutils.frontend import get_default_settings +from docutils.parsers.recommonmark_wrapper import Parser +from docutils.utils import new_document + + +class RecommonmarkParserTestCase(unittest.TestCase): + def test_parser(self): + parser = Parser() + settings = get_default_settings(Parser) + for name, cases in totest.items(): + for casenum, (case_input, case_expected) in enumerate(cases): + with self.subTest(id=f'totest[{name!r}][{casenum}]'): + document = new_document('test data', settings.copy()) + parser.parse(case_input, document) + output = document.pformat() + self.assertEqual(output, case_expected) totest = {} @@ -89,4 +102,4 @@ A paragraph: if __name__ == '__main__': import unittest - unittest.main(defaultTest='suite') + unittest.main() diff --git a/docutils/test/test_parsers/test_recommonmark/test_inline_markup.py b/docutils/test/test_parsers/test_recommonmark/test_inline_markup.py index 7f5370647..a9e018dfd 100755 --- a/docutils/test/test_parsers/test_recommonmark/test_inline_markup.py +++ b/docutils/test/test_parsers/test_recommonmark/test_inline_markup.py @@ -13,13 +13,26 @@ Tests for inline markup in CommonMark parsers Cf. the `CommonMark Specification <https://spec.commonmark.org/>`__ """ -from test import DocutilsTestSupport +import unittest +from test import DocutilsTestSupport # NoQA: F401 -def suite(): - s = DocutilsTestSupport.RecommonmarkParserTestSuite() - s.generateTests(totest) - return s +from docutils.frontend import get_default_settings +from docutils.parsers.recommonmark_wrapper import Parser +from docutils.utils import new_document + + +class RecommonmarkParserTestCase(unittest.TestCase): + def test_parser(self): + parser = Parser() + settings = get_default_settings(Parser) + for name, cases in totest.items(): + for casenum, (case_input, case_expected) in enumerate(cases): + with self.subTest(id=f'totest[{name!r}][{casenum}]'): + document = new_document('test data', settings.copy()) + parser.parse(case_input, document) + output = document.pformat() + self.assertEqual(output, case_expected) totest = {} @@ -520,4 +533,4 @@ works except for underline. if __name__ == '__main__': import unittest - unittest.main(defaultTest='suite') + unittest.main() diff --git a/docutils/test/test_parsers/test_recommonmark/test_line_length_limit.py b/docutils/test/test_parsers/test_recommonmark/test_line_length_limit.py index bf9c5087f..9ef2acc56 100755 --- a/docutils/test/test_parsers/test_recommonmark/test_line_length_limit.py +++ b/docutils/test/test_parsers/test_recommonmark/test_line_length_limit.py @@ -14,14 +14,28 @@ Tests for inline markup in docutils/parsers/rst/states.py. Interpreted text tests are in a separate module, test_interpreted.py. """ -from test import DocutilsTestSupport +import unittest +from test import DocutilsTestSupport # NoQA: F401 -def suite(): - s = DocutilsTestSupport.RecommonmarkParserTestSuite( - suite_settings={'line_length_limit': 80}) - s.generateTests(totest) - return s +from docutils.frontend import get_default_settings +from docutils.parsers.recommonmark_wrapper import Parser +from docutils.utils import new_document + + +class RecommonmarkParserTestCase(unittest.TestCase): + def test_parser(self): + parser = Parser() + settings = get_default_settings(Parser) + settings.warning_stream = '' + settings.line_length_limit = 80 + for name, cases in totest.items(): + for casenum, (case_input, case_expected) in enumerate(cases): + with self.subTest(id=f'totest[{name!r}][{casenum}]'): + document = new_document('test data', settings.copy()) + parser.parse(case_input, document) + output = document.pformat() + self.assertEqual(output, case_expected) totest = {} @@ -52,4 +66,4 @@ above the limit if __name__ == '__main__': import unittest - unittest.main(defaultTest='suite') + unittest.main() diff --git a/docutils/test/test_parsers/test_recommonmark/test_line_length_limit_default.py b/docutils/test/test_parsers/test_recommonmark/test_line_length_limit_default.py index 574311ca1..9c833cc8f 100755 --- a/docutils/test/test_parsers/test_recommonmark/test_line_length_limit_default.py +++ b/docutils/test/test_parsers/test_recommonmark/test_line_length_limit_default.py @@ -15,13 +15,27 @@ Tests for inline markup in docutils/parsers/rst/states.py. Interpreted text tests are in a separate module, test_interpreted.py. """ -from test import DocutilsTestSupport +import unittest +from test import DocutilsTestSupport # NoQA: F401 -def suite(): - s = DocutilsTestSupport.RecommonmarkParserTestSuite() - s.generateTests(totest) - return s +from docutils.frontend import get_default_settings +from docutils.parsers.recommonmark_wrapper import Parser +from docutils.utils import new_document + + +class RecommonmarkParserTestCase(unittest.TestCase): + def test_parser(self): + parser = Parser() + settings = get_default_settings(Parser) + settings.warning_stream = '' + for name, cases in totest.items(): + for casenum, (case_input, case_expected) in enumerate(cases): + with self.subTest(id=f'totest[{name!r}][{casenum}]'): + document = new_document('test data', settings.copy()) + parser.parse(case_input, document) + output = document.pformat() + self.assertEqual(output, case_expected) totest = {} @@ -52,4 +66,4 @@ above the limit if __name__ == '__main__': import unittest - unittest.main(defaultTest='suite') + unittest.main() diff --git a/docutils/test/test_parsers/test_recommonmark/test_literal_blocks.py b/docutils/test/test_parsers/test_recommonmark/test_literal_blocks.py index c128b9898..7d45159e9 100755 --- a/docutils/test/test_parsers/test_recommonmark/test_literal_blocks.py +++ b/docutils/test/test_parsers/test_recommonmark/test_literal_blocks.py @@ -14,13 +14,26 @@ Tests for literal blocks in CommonMark parsers Cf. the `CommonMark Specification <https://spec.commonmark.org/>`__ """ -from test import DocutilsTestSupport +import unittest +from test import DocutilsTestSupport # NoQA: F401 -def suite(): - s = DocutilsTestSupport.RecommonmarkParserTestSuite() - s.generateTests(totest) - return s +from docutils.frontend import get_default_settings +from docutils.parsers.recommonmark_wrapper import Parser +from docutils.utils import new_document + + +class RecommonmarkParserTestCase(unittest.TestCase): + def test_parser(self): + parser = Parser() + settings = get_default_settings(Parser) + for name, cases in totest.items(): + for casenum, (case_input, case_expected) in enumerate(cases): + with self.subTest(id=f'totest[{name!r}][{casenum}]'): + document = new_document('test data', settings.copy()) + parser.parse(case_input, document) + output = document.pformat() + self.assertEqual(output, case_expected) totest = {} @@ -205,4 +218,4 @@ with class ``eval_rst``. if __name__ == '__main__': import unittest - unittest.main(defaultTest='suite') + unittest.main() diff --git a/docutils/test/test_parsers/test_recommonmark/test_misc.py b/docutils/test/test_parsers/test_recommonmark/test_misc.py index 962d05004..442c4b2d4 100644 --- a/docutils/test/test_parsers/test_recommonmark/test_misc.py +++ b/docutils/test/test_parsers/test_recommonmark/test_misc.py @@ -15,16 +15,10 @@ Various tests for the recommonmark parser. import unittest -from docutils import parsers -from docutils.parsers import rst from docutils.core import publish_string +from docutils.parsers.rst import directives as rst_directives +from docutils.parsers.recommonmark_wrapper import Parser -# Import `docutils.parsers.recommonmark_wrapper` and -# the optional `recommonmark.parser`. Create parser instance. -try: - parser = parsers.get_parser_class('recommonmark')() -except ImportError: - parser = None sample_with_html = """\ A paragraph: @@ -40,17 +34,15 @@ Final paragraph. """ -@unittest.skipUnless(parser, 'Optional "recommonmark" module not found.') class RecommonmarkParserTests(unittest.TestCase): def test_parser_name(self): # cf. ../test_rst/test_directives/test__init__.py # this is used in the "include" directive's :parser: option. - self.assertEqual(rst.directives.parser_name('recommonmark'), - parsers.recommonmark_wrapper.Parser) + self.assertIs(rst_directives.parser_name('recommonmark'), Parser) def test_raw_disabled(self): - output = publish_string(sample_with_html, parser=parser, + output = publish_string(sample_with_html, parser=Parser(), settings_overrides={ 'warning_stream': '', 'raw_enabled': False, @@ -61,7 +53,7 @@ class RecommonmarkParserTests(unittest.TestCase): self.assertIn('Raw content disabled.', output) def test_raw_disabled_inline(self): - output = publish_string('foo <a href="uri">', parser=parser, + output = publish_string('foo <a href="uri">', parser=Parser(), settings_overrides={ 'warning_stream': '', 'raw_enabled': False, @@ -72,15 +64,5 @@ class RecommonmarkParserTests(unittest.TestCase): self.assertIn('Raw content disabled.', output) -@unittest.skipIf(parser, 'Optional "recommonmark" module found.') -class RecommonmarkMissingTests(unittest.TestCase): - - def test_missing_parser_message(self): - with self.assertRaisesRegex(ImportError, - 'requires the package .*recommonmark'): - publish_string(sample_with_html, parser_name='recommonmark', - settings_overrides={'output_encoding': 'unicode'}) - - if __name__ == '__main__': unittest.main() diff --git a/docutils/test/test_parsers/test_recommonmark/test_paragraphs.py b/docutils/test/test_parsers/test_recommonmark/test_paragraphs.py index e07e9eda3..dfe1d9c03 100755 --- a/docutils/test/test_parsers/test_recommonmark/test_paragraphs.py +++ b/docutils/test/test_parsers/test_recommonmark/test_paragraphs.py @@ -8,13 +8,26 @@ Tests for states.py. """ -from test import DocutilsTestSupport +import unittest +from test import DocutilsTestSupport # NoQA: F401 -def suite(): - s = DocutilsTestSupport.RecommonmarkParserTestSuite() - s.generateTests(totest) - return s +from docutils.frontend import get_default_settings +from docutils.parsers.recommonmark_wrapper import Parser +from docutils.utils import new_document + + +class RecommonmarkParserTestCase(unittest.TestCase): + def test_parser(self): + parser = Parser() + settings = get_default_settings(Parser) + for name, cases in totest.items(): + for casenum, (case_input, case_expected) in enumerate(cases): + with self.subTest(id=f'totest[{name!r}][{casenum}]'): + document = new_document('test data', settings.copy()) + parser.parse(case_input, document) + output = document.pformat() + self.assertEqual(output, case_expected) totest = {} @@ -76,4 +89,4 @@ Line 3. if __name__ == '__main__': import unittest - unittest.main(defaultTest='suite') + unittest.main() diff --git a/docutils/test/test_parsers/test_recommonmark/test_section_headers.py b/docutils/test/test_parsers/test_recommonmark/test_section_headers.py index 419682ac3..ca4d39b6f 100755 --- a/docutils/test/test_parsers/test_recommonmark/test_section_headers.py +++ b/docutils/test/test_parsers/test_recommonmark/test_section_headers.py @@ -13,13 +13,26 @@ Test for section headings in CommonMark parsers. Cf. the `CommonMark Specification <https://spec.commonmark.org/>`__ """ -from test import DocutilsTestSupport +import unittest +from test import DocutilsTestSupport # NoQA: F401 -def suite(): - s = DocutilsTestSupport.RecommonmarkParserTestSuite() - s.generateTests(totest) - return s +from docutils.frontend import get_default_settings +from docutils.parsers.recommonmark_wrapper import Parser +from docutils.utils import new_document + + +class RecommonmarkParserTestCase(unittest.TestCase): + def test_parser(self): + parser = Parser() + settings = get_default_settings(Parser) + for name, cases in totest.items(): + for casenum, (case_input, case_expected) in enumerate(cases): + with self.subTest(id=f'totest[{name!r}][{casenum}]'): + document = new_document('test data', settings.copy()) + parser.parse(case_input, document) + output = document.pformat() + self.assertEqual(output, case_expected) totest = {} @@ -237,4 +250,4 @@ Empty Section if __name__ == '__main__': import unittest - unittest.main(defaultTest='suite') + unittest.main() diff --git a/docutils/test/test_parsers/test_recommonmark/test_targets.py b/docutils/test/test_parsers/test_recommonmark/test_targets.py index 796b4f676..09306db34 100755 --- a/docutils/test/test_parsers/test_recommonmark/test_targets.py +++ b/docutils/test/test_parsers/test_recommonmark/test_targets.py @@ -13,13 +13,26 @@ Test for targets in CommonMark parsers. Cf. the `CommonMark Specification <https://spec.commonmark.org/>`__ """ -from test import DocutilsTestSupport +import unittest +from test import DocutilsTestSupport # NoQA: F401 -def suite(): - s = DocutilsTestSupport.RecommonmarkParserTestSuite() - s.generateTests(totest) - return s +from docutils.frontend import get_default_settings +from docutils.parsers.recommonmark_wrapper import Parser +from docutils.utils import new_document + + +class RecommonmarkParserTestCase(unittest.TestCase): + def test_parser(self): + parser = Parser() + settings = get_default_settings(Parser) + for name, cases in totest.items(): + for casenum, (case_input, case_expected) in enumerate(cases): + with self.subTest(id=f'totest[{name!r}][{casenum}]'): + document = new_document('test data', settings.copy()) + parser.parse(case_input, document) + output = document.pformat() + self.assertEqual(output, case_expected) totest = {} @@ -140,4 +153,4 @@ Paragraph with link to [title]. if __name__ == '__main__': import unittest - unittest.main(defaultTest='suite') + unittest.main() diff --git a/docutils/test/test_parsers/test_recommonmark/test_transitions.py b/docutils/test/test_parsers/test_recommonmark/test_transitions.py index a6a0b848d..25621bf7a 100755 --- a/docutils/test/test_parsers/test_recommonmark/test_transitions.py +++ b/docutils/test/test_parsers/test_recommonmark/test_transitions.py @@ -8,19 +8,32 @@ Tests for transitions (`thematic breaks`). """ -from test import DocutilsTestSupport +import unittest +from test import DocutilsTestSupport # NoQA: F401 -def suite(): - s = DocutilsTestSupport.RecommonmarkParserTestSuite() - s.generateTests(totest) - return s +from docutils.frontend import get_default_settings +from docutils.parsers.recommonmark_wrapper import Parser +from docutils.utils import new_document + + +class RecommonmarkParserTestCase(unittest.TestCase): + def test_parser(self): + parser = Parser() + settings = get_default_settings(Parser) + for name, cases in totest.items(): + for casenum, (case_input, case_expected) in enumerate(cases): + with self.subTest(id=f'totest[{name!r}][{casenum}]'): + document = new_document('test data', settings.copy()) + parser.parse(case_input, document) + output = document.pformat() + self.assertEqual(output, case_expected) totest = {} -# See DocutilsTestSupport.RecommonmarkParserTestSuite.generateTests for a -# description of the 'totest' data structure. +# Each dictionary key (test type name) maps to a list of tests. Each +# test is a list: input, expected output. totest['transitions'] = [ ["""\ Test transition markers. @@ -313,4 +326,4 @@ A paragraph. if __name__ == '__main__': import unittest - unittest.main(defaultTest='suite') + unittest.main() |
