14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm"""Tests for distutils.command.check.""" 24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport unittest 34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom test.test_support import run_unittest 44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom distutils.command.check import check, HAS_DOCUTILS 64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom distutils.tests import support 74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom distutils.errors import DistutilsSetupError 84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass CheckTestCase(support.LoggingSilencer, 104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm support.TempdirManager, 114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm unittest.TestCase): 124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def _run(self, metadata=None, **options): 144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if metadata is None: 154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm metadata = {} 164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pkg_info, dist = self.create_dist(**metadata) 174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd = check(dist) 184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.initialize_options() 194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for name, value in options.items(): 204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm setattr(cmd, name, value) 214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.ensure_finalized() 224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.run() 234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return cmd 244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_check_metadata(self): 264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # let's run the command with no metadata at all 274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # by default, check is checking the metadata 284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # should have some warnings 294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd = self._run() 304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(cmd._warnings, 2) 314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # now let's add the required fields 334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # and run it again, to make sure we don't get 344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # any warning anymore 354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm metadata = {'url': 'xxx', 'author': 'xxx', 364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'author_email': 'xxx', 374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'name': 'xxx', 'version': 'xxx'} 384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd = self._run(metadata) 394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(cmd._warnings, 0) 404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # now with the strict mode, we should 424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # get an error if there are missing metadata 434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(DistutilsSetupError, self._run, {}, **{'strict': 1}) 444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # and of course, no error when all metadata are present 464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd = self._run(metadata, strict=1) 474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(cmd._warnings, 0) 484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_check_document(self): 504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if not HAS_DOCUTILS: # won't test without docutils 514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return 524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pkg_info, dist = self.create_dist() 534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd = check(dist) 544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # let's see if it detects broken rest 564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm broken_rest = 'title\n===\n\ntest' 574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm msgs = cmd._check_rst_data(broken_rest) 584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(msgs), 1) 594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # and non-broken rest 614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm rest = 'title\n=====\n\ntest' 624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm msgs = cmd._check_rst_data(rest) 634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(msgs), 0) 644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_check_restructuredtext(self): 664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if not HAS_DOCUTILS: # won't test without docutils 674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return 684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # let's see if it detects broken rest in long_description 694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm broken_rest = 'title\n===\n\ntest' 704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pkg_info, dist = self.create_dist(long_description=broken_rest) 714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd = check(dist) 724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.check_restructuredtext() 734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(cmd._warnings, 1) 744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # let's see if we have an error with strict=1 764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm metadata = {'url': 'xxx', 'author': 'xxx', 774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'author_email': 'xxx', 784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'name': 'xxx', 'version': 'xxx', 794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'long_description': broken_rest} 804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(DistutilsSetupError, self._run, metadata, 814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm **{'strict': 1, 'restructuredtext': 1}) 824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # and non-broken rest 844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm metadata['long_description'] = 'title\n=====\n\ntest' 854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd = self._run(metadata, strict=1, restructuredtext=1) 864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(cmd._warnings, 0) 874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_check_all(self): 894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm metadata = {'url': 'xxx', 'author': 'xxx'} 914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(DistutilsSetupError, self._run, 924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm {}, **{'strict': 1, 934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'restructuredtext': 1}) 944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef test_suite(): 964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return unittest.makeSuite(CheckTestCase) 974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmif __name__ == "__main__": 994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm run_unittest(test_suite()) 100