Spaces:
Running
Running
"""Tests for distutils.command.check.""" | |
import os | |
import textwrap | |
import unittest | |
from test.support import run_unittest | |
from distutils.command.check import check, HAS_DOCUTILS | |
from distutils.tests import support | |
from distutils.errors import DistutilsSetupError | |
try: | |
import pygments | |
except ImportError: | |
pygments = None | |
HERE = os.path.dirname(__file__) | |
class CheckTestCase(support.LoggingSilencer, | |
support.TempdirManager, | |
unittest.TestCase): | |
def _run(self, metadata=None, cwd=None, **options): | |
if metadata is None: | |
metadata = {} | |
if cwd is not None: | |
old_dir = os.getcwd() | |
os.chdir(cwd) | |
pkg_info, dist = self.create_dist(**metadata) | |
cmd = check(dist) | |
cmd.initialize_options() | |
for name, value in options.items(): | |
setattr(cmd, name, value) | |
cmd.ensure_finalized() | |
cmd.run() | |
if cwd is not None: | |
os.chdir(old_dir) | |
return cmd | |
def test_check_metadata(self): | |
# let's run the command with no metadata at all | |
# by default, check is checking the metadata | |
# should have some warnings | |
cmd = self._run() | |
self.assertEqual(cmd._warnings, 2) | |
# now let's add the required fields | |
# and run it again, to make sure we don't get | |
# any warning anymore | |
metadata = {'url': 'xxx', 'author': 'xxx', | |
'author_email': 'xxx', | |
'name': 'xxx', 'version': 'xxx'} | |
cmd = self._run(metadata) | |
self.assertEqual(cmd._warnings, 0) | |
# now with the strict mode, we should | |
# get an error if there are missing metadata | |
self.assertRaises(DistutilsSetupError, self._run, {}, **{'strict': 1}) | |
# and of course, no error when all metadata are present | |
cmd = self._run(metadata, strict=1) | |
self.assertEqual(cmd._warnings, 0) | |
# now a test with non-ASCII characters | |
metadata = {'url': 'xxx', 'author': '\u00c9ric', | |
'author_email': 'xxx', 'name': 'xxx', | |
'version': 'xxx', | |
'description': 'Something about esszet \u00df', | |
'long_description': 'More things about esszet \u00df'} | |
cmd = self._run(metadata) | |
self.assertEqual(cmd._warnings, 0) | |
def test_check_document(self): | |
pkg_info, dist = self.create_dist() | |
cmd = check(dist) | |
# let's see if it detects broken rest | |
broken_rest = 'title\n===\n\ntest' | |
msgs = cmd._check_rst_data(broken_rest) | |
self.assertEqual(len(msgs), 1) | |
# and non-broken rest | |
rest = 'title\n=====\n\ntest' | |
msgs = cmd._check_rst_data(rest) | |
self.assertEqual(len(msgs), 0) | |
def test_check_restructuredtext(self): | |
# let's see if it detects broken rest in long_description | |
broken_rest = 'title\n===\n\ntest' | |
pkg_info, dist = self.create_dist(long_description=broken_rest) | |
cmd = check(dist) | |
cmd.check_restructuredtext() | |
self.assertEqual(cmd._warnings, 1) | |
# let's see if we have an error with strict=1 | |
metadata = {'url': 'xxx', 'author': 'xxx', | |
'author_email': 'xxx', | |
'name': 'xxx', 'version': 'xxx', | |
'long_description': broken_rest} | |
self.assertRaises(DistutilsSetupError, self._run, metadata, | |
**{'strict': 1, 'restructuredtext': 1}) | |
# and non-broken rest, including a non-ASCII character to test #12114 | |
metadata['long_description'] = 'title\n=====\n\ntest \u00df' | |
cmd = self._run(metadata, strict=1, restructuredtext=1) | |
self.assertEqual(cmd._warnings, 0) | |
# check that includes work to test #31292 | |
metadata['long_description'] = 'title\n=====\n\n.. include:: includetest.rst' | |
cmd = self._run(metadata, cwd=HERE, strict=1, restructuredtext=1) | |
self.assertEqual(cmd._warnings, 0) | |
def test_check_restructuredtext_with_syntax_highlight(self): | |
# Don't fail if there is a `code` or `code-block` directive | |
example_rst_docs = [] | |
example_rst_docs.append(textwrap.dedent("""\ | |
Here's some code: | |
.. code:: python | |
def foo(): | |
pass | |
""")) | |
example_rst_docs.append(textwrap.dedent("""\ | |
Here's some code: | |
.. code-block:: python | |
def foo(): | |
pass | |
""")) | |
for rest_with_code in example_rst_docs: | |
pkg_info, dist = self.create_dist(long_description=rest_with_code) | |
cmd = check(dist) | |
cmd.check_restructuredtext() | |
msgs = cmd._check_rst_data(rest_with_code) | |
if pygments is not None: | |
self.assertEqual(len(msgs), 0) | |
else: | |
self.assertEqual(len(msgs), 1) | |
self.assertEqual( | |
str(msgs[0][1]), | |
'Cannot analyze code. Pygments package not found.' | |
) | |
def test_check_all(self): | |
metadata = {'url': 'xxx', 'author': 'xxx'} | |
self.assertRaises(DistutilsSetupError, self._run, | |
{}, **{'strict': 1, | |
'restructuredtext': 1}) | |
def test_suite(): | |
return unittest.makeSuite(CheckTestCase) | |
if __name__ == "__main__": | |
run_unittest(test_suite()) | |