14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm"""Tests for distutils.cmd.""" 24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport unittest 34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport os 44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom test.test_support import captured_stdout, run_unittest 54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom distutils.cmd import Command 74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom distutils.dist import Distribution 84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom distutils.errors import DistutilsOptionError 94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom distutils import debug 104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass MyCmd(Command): 124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def initialize_options(self): 134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass CommandTestCase(unittest.TestCase): 164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def setUp(self): 184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm dist = Distribution() 194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.cmd = MyCmd(dist) 204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_ensure_string_list(self): 224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd = self.cmd 244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.not_string_list = ['one', 2, 'three'] 254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.yes_string_list = ['one', 'two', 'three'] 264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.not_string_list2 = object() 274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.yes_string_list2 = 'ok' 284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.ensure_string_list('yes_string_list') 294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.ensure_string_list('yes_string_list2') 304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(DistutilsOptionError, 324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.ensure_string_list, 'not_string_list') 334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(DistutilsOptionError, 354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.ensure_string_list, 'not_string_list2') 364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_make_file(self): 384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd = self.cmd 404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # making sure it raises when infiles is not a string or a list/tuple 424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(TypeError, cmd.make_file, 434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm infiles=1, outfile='', func='func', args=()) 444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # making sure execute gets called properly 464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def _execute(func, args, exec_msg, level): 474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(exec_msg, 'generating out from in') 484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.force = True 494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.execute = _execute 504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.make_file(infiles='in', outfile='out', func='func', args=()) 514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_dump_options(self): 534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm msgs = [] 554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def _announce(msg, level): 564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm msgs.append(msg) 574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd = self.cmd 584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.announce = _announce 594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.option1 = 1 604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.option2 = 1 614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.user_options = [('option1', '', ''), ('option2', '', '')] 624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.dump_options() 634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm wanted = ["command options for 'MyCmd':", ' option1 = 1', 654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ' option2 = 1'] 664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(msgs, wanted) 674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_ensure_string(self): 694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd = self.cmd 704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.option1 = 'ok' 714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.ensure_string('option1') 724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.option2 = None 744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.ensure_string('option2', 'xxx') 754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue(hasattr(cmd, 'option2')) 764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.option3 = 1 784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(DistutilsOptionError, cmd.ensure_string, 'option3') 794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_ensure_string_list(self): 814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd = self.cmd 824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.option1 = 'ok,dok' 834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.ensure_string_list('option1') 844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(cmd.option1, ['ok', 'dok']) 854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.option2 = ['xxx', 'www'] 874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.ensure_string_list('option2') 884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.option3 = ['ok', 2] 904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(DistutilsOptionError, cmd.ensure_string_list, 914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 'option3') 924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_ensure_filename(self): 944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd = self.cmd 954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.option1 = __file__ 964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.ensure_filename('option1') 974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.option2 = 'xxx' 984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(DistutilsOptionError, cmd.ensure_filename, 'option2') 994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_ensure_dirname(self): 1014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd = self.cmd 1024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.option1 = os.path.dirname(__file__) or os.curdir 1034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.ensure_dirname('option1') 1044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.option2 = 'xxx' 1054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(DistutilsOptionError, cmd.ensure_dirname, 'option2') 1064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_debug_print(self): 1084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd = self.cmd 1094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm with captured_stdout() as stdout: 1104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.debug_print('xxx') 1114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm stdout.seek(0) 1124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(stdout.read(), '') 1134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm debug.DEBUG = True 1154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 1164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm with captured_stdout() as stdout: 1174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm cmd.debug_print('xxx') 1184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm stdout.seek(0) 1194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(stdout.read(), 'xxx\n') 1204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm finally: 1214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm debug.DEBUG = False 1224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef test_suite(): 1244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return unittest.makeSuite(CommandTestCase) 1254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmif __name__ == '__main__': 1274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm run_unittest(test_suite()) 128