blob: 195045cc7b8a2646f84562e5104139156962fe83 [file] [log] [blame]
Tarek Ziadé9b6ddb82009-02-06 09:03:10 +00001"""Tests for distutils.cmd."""
2import unittest
Tarek Ziadéc44865a2009-04-13 20:07:23 +00003import os
Éric Araujo70ec44a2010-11-06 02:44:43 +00004from test.support import captured_stdout, run_unittest
Tarek Ziadé9b6ddb82009-02-06 09:03:10 +00005
6from distutils.cmd import Command
7from distutils.dist import Distribution
8from distutils.errors import DistutilsOptionError
Tarek Ziadé03d5d082009-09-21 13:01:54 +00009from distutils import debug
Tarek Ziadé9b6ddb82009-02-06 09:03:10 +000010
Tarek Ziadé48494d02009-02-07 00:10:48 +000011class MyCmd(Command):
12 def initialize_options(self):
13 pass
14
Tarek Ziadé9b6ddb82009-02-06 09:03:10 +000015class CommandTestCase(unittest.TestCase):
16
Tarek Ziadé48494d02009-02-07 00:10:48 +000017 def setUp(self):
18 dist = Distribution()
19 self.cmd = MyCmd(dist)
20
Tarek Ziadé9b6ddb82009-02-06 09:03:10 +000021 def test_ensure_string_list(self):
22
Tarek Ziadé48494d02009-02-07 00:10:48 +000023 cmd = self.cmd
Tarek Ziadé9b6ddb82009-02-06 09:03:10 +000024 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'
Tarek Ziadé9b6ddb82009-02-06 09:03:10 +000028 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
Tarek Ziadé48494d02009-02-07 00:10:48 +000037 def test_make_file(self):
38
39 cmd = self.cmd
40
41 # making sure it raises when infiles is not a string or a list/tuple
42 self.assertRaises(TypeError, cmd.make_file,
43 infiles=1, outfile='', func='func', args=())
44
45 # making sure execute gets called properly
46 def _execute(func, args, exec_msg, level):
Ezio Melottib3aedd42010-11-20 19:04:17 +000047 self.assertEqual(exec_msg, 'generating out from in')
Tarek Ziadé48494d02009-02-07 00:10:48 +000048 cmd.force = True
49 cmd.execute = _execute
50 cmd.make_file(infiles='in', outfile='out', func='func', args=())
51
52 def test_dump_options(self):
53
54 msgs = []
55 def _announce(msg, level):
56 msgs.append(msg)
57 cmd = self.cmd
58 cmd.announce = _announce
59 cmd.option1 = 1
60 cmd.option2 = 1
61 cmd.user_options = [('option1', '', ''), ('option2', '', '')]
62 cmd.dump_options()
63
64 wanted = ["command options for 'MyCmd':", ' option1 = 1',
65 ' option2 = 1']
Ezio Melottib3aedd42010-11-20 19:04:17 +000066 self.assertEqual(msgs, wanted)
Tarek Ziadé48494d02009-02-07 00:10:48 +000067
Tarek Ziadéc44865a2009-04-13 20:07:23 +000068 def test_ensure_string(self):
69 cmd = self.cmd
70 cmd.option1 = 'ok'
71 cmd.ensure_string('option1')
72
73 cmd.option2 = None
74 cmd.ensure_string('option2', 'xxx')
Benjamin Petersonc9c0f202009-06-30 23:06:06 +000075 self.assertTrue(hasattr(cmd, 'option2'))
Tarek Ziadéc44865a2009-04-13 20:07:23 +000076
77 cmd.option3 = 1
78 self.assertRaises(DistutilsOptionError, cmd.ensure_string, 'option3')
79
80 def test_ensure_string_list(self):
81 cmd = self.cmd
82 cmd.option1 = 'ok,dok'
83 cmd.ensure_string_list('option1')
Ezio Melottib3aedd42010-11-20 19:04:17 +000084 self.assertEqual(cmd.option1, ['ok', 'dok'])
Tarek Ziadéc44865a2009-04-13 20:07:23 +000085
86 cmd.option2 = ['xxx', 'www']
87 cmd.ensure_string_list('option2')
88
89 cmd.option3 = ['ok', 2]
90 self.assertRaises(DistutilsOptionError, cmd.ensure_string_list,
91 'option3')
92
93 def test_ensure_filename(self):
94 cmd = self.cmd
95 cmd.option1 = __file__
96 cmd.ensure_filename('option1')
97 cmd.option2 = 'xxx'
98 self.assertRaises(DistutilsOptionError, cmd.ensure_filename, 'option2')
99
100 def test_ensure_dirname(self):
101 cmd = self.cmd
Éric Araujo70ec44a2010-11-06 02:44:43 +0000102 cmd.option1 = os.path.dirname(__file__) or os.curdir
Tarek Ziadéc44865a2009-04-13 20:07:23 +0000103 cmd.ensure_dirname('option1')
104 cmd.option2 = 'xxx'
105 self.assertRaises(DistutilsOptionError, cmd.ensure_dirname, 'option2')
106
Tarek Ziadé03d5d082009-09-21 13:01:54 +0000107 def test_debug_print(self):
108 cmd = self.cmd
109 with captured_stdout() as stdout:
110 cmd.debug_print('xxx')
111 stdout.seek(0)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000112 self.assertEqual(stdout.read(), '')
Tarek Ziadé03d5d082009-09-21 13:01:54 +0000113
114 debug.DEBUG = True
115 try:
116 with captured_stdout() as stdout:
117 cmd.debug_print('xxx')
118 stdout.seek(0)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000119 self.assertEqual(stdout.read(), 'xxx\n')
Tarek Ziadé03d5d082009-09-21 13:01:54 +0000120 finally:
121 debug.DEBUG = False
122
Tarek Ziadé9b6ddb82009-02-06 09:03:10 +0000123def test_suite():
124 return unittest.makeSuite(CommandTestCase)
125
126if __name__ == '__main__':
Éric Araujo70ec44a2010-11-06 02:44:43 +0000127 run_unittest(test_suite())