1 | # -*- encoding: utf8 -*-
|
---|
2 | """Tests for distutils.command.check."""
|
---|
3 | import unittest
|
---|
4 | from test.test_support import run_unittest
|
---|
5 |
|
---|
6 | from distutils.command.check import check, HAS_DOCUTILS
|
---|
7 | from distutils.tests import support
|
---|
8 | from distutils.errors import DistutilsSetupError
|
---|
9 |
|
---|
10 | class CheckTestCase(support.LoggingSilencer,
|
---|
11 | support.TempdirManager,
|
---|
12 | unittest.TestCase):
|
---|
13 |
|
---|
14 | def _run(self, metadata=None, **options):
|
---|
15 | if metadata is None:
|
---|
16 | metadata = {}
|
---|
17 | pkg_info, dist = self.create_dist(**metadata)
|
---|
18 | cmd = check(dist)
|
---|
19 | cmd.initialize_options()
|
---|
20 | for name, value in options.items():
|
---|
21 | setattr(cmd, name, value)
|
---|
22 | cmd.ensure_finalized()
|
---|
23 | cmd.run()
|
---|
24 | return cmd
|
---|
25 |
|
---|
26 | def test_check_metadata(self):
|
---|
27 | # let's run the command with no metadata at all
|
---|
28 | # by default, check is checking the metadata
|
---|
29 | # should have some warnings
|
---|
30 | cmd = self._run()
|
---|
31 | self.assertEqual(cmd._warnings, 2)
|
---|
32 |
|
---|
33 | # now let's add the required fields
|
---|
34 | # and run it again, to make sure we don't get
|
---|
35 | # any warning anymore
|
---|
36 | metadata = {'url': 'xxx', 'author': 'xxx',
|
---|
37 | 'author_email': 'xxx',
|
---|
38 | 'name': 'xxx', 'version': 'xxx'}
|
---|
39 | cmd = self._run(metadata)
|
---|
40 | self.assertEqual(cmd._warnings, 0)
|
---|
41 |
|
---|
42 | # now with the strict mode, we should
|
---|
43 | # get an error if there are missing metadata
|
---|
44 | self.assertRaises(DistutilsSetupError, self._run, {}, **{'strict': 1})
|
---|
45 |
|
---|
46 | # and of course, no error when all metadata are present
|
---|
47 | cmd = self._run(metadata, strict=1)
|
---|
48 | self.assertEqual(cmd._warnings, 0)
|
---|
49 |
|
---|
50 | # now a test with Unicode entries
|
---|
51 | metadata = {'url': u'xxx', 'author': u'\u00c9ric',
|
---|
52 | 'author_email': u'xxx', u'name': 'xxx',
|
---|
53 | 'version': u'xxx',
|
---|
54 | 'description': u'Something about esszet \u00df',
|
---|
55 | 'long_description': u'More things about esszet \u00df'}
|
---|
56 | cmd = self._run(metadata)
|
---|
57 | self.assertEqual(cmd._warnings, 0)
|
---|
58 |
|
---|
59 | def test_check_document(self):
|
---|
60 | if not HAS_DOCUTILS: # won't test without docutils
|
---|
61 | return
|
---|
62 | pkg_info, dist = self.create_dist()
|
---|
63 | cmd = check(dist)
|
---|
64 |
|
---|
65 | # let's see if it detects broken rest
|
---|
66 | broken_rest = 'title\n===\n\ntest'
|
---|
67 | msgs = cmd._check_rst_data(broken_rest)
|
---|
68 | self.assertEqual(len(msgs), 1)
|
---|
69 |
|
---|
70 | # and non-broken rest
|
---|
71 | rest = 'title\n=====\n\ntest'
|
---|
72 | msgs = cmd._check_rst_data(rest)
|
---|
73 | self.assertEqual(len(msgs), 0)
|
---|
74 |
|
---|
75 | def test_check_restructuredtext(self):
|
---|
76 | if not HAS_DOCUTILS: # won't test without docutils
|
---|
77 | return
|
---|
78 | # let's see if it detects broken rest in long_description
|
---|
79 | broken_rest = 'title\n===\n\ntest'
|
---|
80 | pkg_info, dist = self.create_dist(long_description=broken_rest)
|
---|
81 | cmd = check(dist)
|
---|
82 | cmd.check_restructuredtext()
|
---|
83 | self.assertEqual(cmd._warnings, 1)
|
---|
84 |
|
---|
85 | # let's see if we have an error with strict=1
|
---|
86 | metadata = {'url': 'xxx', 'author': 'xxx',
|
---|
87 | 'author_email': 'xxx',
|
---|
88 | 'name': 'xxx', 'version': 'xxx',
|
---|
89 | 'long_description': broken_rest}
|
---|
90 | self.assertRaises(DistutilsSetupError, self._run, metadata,
|
---|
91 | **{'strict': 1, 'restructuredtext': 1})
|
---|
92 |
|
---|
93 | # and non-broken rest, including a non-ASCII character to test #12114
|
---|
94 | metadata['long_description'] = u'title\n=====\n\ntest \u00df'
|
---|
95 | cmd = self._run(metadata, strict=1, restructuredtext=1)
|
---|
96 | self.assertEqual(cmd._warnings, 0)
|
---|
97 |
|
---|
98 | def test_check_all(self):
|
---|
99 |
|
---|
100 | metadata = {'url': 'xxx', 'author': 'xxx'}
|
---|
101 | self.assertRaises(DistutilsSetupError, self._run,
|
---|
102 | {}, **{'strict': 1,
|
---|
103 | 'restructuredtext': 1})
|
---|
104 |
|
---|
105 | def test_suite():
|
---|
106 | return unittest.makeSuite(CheckTestCase)
|
---|
107 |
|
---|
108 | if __name__ == "__main__":
|
---|
109 | run_unittest(test_suite())
|
---|