1"""Tests for distutils.cmd.""" 2import unittest 3import os 4from test.support import captured_stdout, run_unittest 5 6from distutils.cmd import Command 7from distutils.dist import Distribution 8from distutils.errors import DistutilsOptionError 9from distutils import debug 10 11class MyCmd(Command): 12 def initialize_options(self): 13 pass 14 15class CommandTestCase(unittest.TestCase): 16 17 def setUp(self): 18 dist = Distribution() 19 self.cmd = MyCmd(dist) 20 21 def test_ensure_string_list(self): 22 23 cmd = self.cmd 24 cmd.not_string_list = ['one', 2, 'three'] 25 cmd.yes_string_list = ['one', 'two', 'three'] 26 cmd.not_string_list2 = object() 27 cmd.yes_string_list2 = 'ok' 28 cmd.ensure_string_list('yes_string_list') 29 cmd.ensure_string_list('yes_string_list2') 30 31 self.assertRaises(DistutilsOptionError, 32 cmd.ensure_string_list, 'not_string_list') 33 34 self.assertRaises(DistutilsOptionError, 35 cmd.ensure_string_list, 'not_string_list2') 36 37 cmd.option1 = 'ok,dok' 38 cmd.ensure_string_list('option1') 39 self.assertEqual(cmd.option1, ['ok', 'dok']) 40 41 cmd.option2 = ['xxx', 'www'] 42 cmd.ensure_string_list('option2') 43 44 cmd.option3 = ['ok', 2] 45 self.assertRaises(DistutilsOptionError, cmd.ensure_string_list, 46 'option3') 47 48 49 def test_make_file(self): 50 51 cmd = self.cmd 52 53 # making sure it raises when infiles is not a string or a list/tuple 54 self.assertRaises(TypeError, cmd.make_file, 55 infiles=1, outfile='', func='func', args=()) 56 57 # making sure execute gets called properly 58 def _execute(func, args, exec_msg, level): 59 self.assertEqual(exec_msg, 'generating out from in') 60 cmd.force = True 61 cmd.execute = _execute 62 cmd.make_file(infiles='in', outfile='out', func='func', args=()) 63 64 def test_dump_options(self): 65 66 msgs = [] 67 def _announce(msg, level): 68 msgs.append(msg) 69 cmd = self.cmd 70 cmd.announce = _announce 71 cmd.option1 = 1 72 cmd.option2 = 1 73 cmd.user_options = [('option1', '', ''), ('option2', '', '')] 74 cmd.dump_options() 75 76 wanted = ["command options for 'MyCmd':", ' option1 = 1', 77 ' option2 = 1'] 78 self.assertEqual(msgs, wanted) 79 80 def test_ensure_string(self): 81 cmd = self.cmd 82 cmd.option1 = 'ok' 83 cmd.ensure_string('option1') 84 85 cmd.option2 = None 86 cmd.ensure_string('option2', 'xxx') 87 self.assertTrue(hasattr(cmd, 'option2')) 88 89 cmd.option3 = 1 90 self.assertRaises(DistutilsOptionError, cmd.ensure_string, 'option3') 91 92 def test_ensure_filename(self): 93 cmd = self.cmd 94 cmd.option1 = __file__ 95 cmd.ensure_filename('option1') 96 cmd.option2 = 'xxx' 97 self.assertRaises(DistutilsOptionError, cmd.ensure_filename, 'option2') 98 99 def test_ensure_dirname(self): 100 cmd = self.cmd 101 cmd.option1 = os.path.dirname(__file__) or os.curdir 102 cmd.ensure_dirname('option1') 103 cmd.option2 = 'xxx' 104 self.assertRaises(DistutilsOptionError, cmd.ensure_dirname, 'option2') 105 106 def test_debug_print(self): 107 cmd = self.cmd 108 with captured_stdout() as stdout: 109 cmd.debug_print('xxx') 110 stdout.seek(0) 111 self.assertEqual(stdout.read(), '') 112 113 debug.DEBUG = True 114 try: 115 with captured_stdout() as stdout: 116 cmd.debug_print('xxx') 117 stdout.seek(0) 118 self.assertEqual(stdout.read(), 'xxx\n') 119 finally: 120 debug.DEBUG = False 121 122def test_suite(): 123 return unittest.makeSuite(CommandTestCase) 124 125if __name__ == '__main__': 126 run_unittest(test_suite()) 127