blob: 51420c96cc04af55e0edba56d75418c9524aadde [file] [log] [blame]
Tarek Ziadé98da8e12009-02-06 08:55:23 +00001"""Tests for distutils.cmd."""
2import unittest
Tarek Ziadé2fdd0d52009-04-13 20:03:44 +00003import os
Georg Brandl28aeb0d2010-02-06 23:53:52 +00004from test.test_support import captured_stdout, run_unittest
Tarek Ziadé98da8e12009-02-06 08:55:23 +00005
6from distutils.cmd import Command
7from distutils.dist import Distribution
8from distutils.errors import DistutilsOptionError
Tarek Ziadé6d2db372009-09-21 12:19:07 +00009from distutils import debug
Tarek Ziadé98da8e12009-02-06 08:55:23 +000010
Tarek Ziadé8be87652009-02-07 00:05:39 +000011class MyCmd(Command):
12 def initialize_options(self):
13 pass
14
Tarek Ziadé98da8e12009-02-06 08:55:23 +000015class CommandTestCase(unittest.TestCase):
16
Tarek Ziadé8be87652009-02-07 00:05:39 +000017 def setUp(self):
18 dist = Distribution()
19 self.cmd = MyCmd(dist)
20
Tarek Ziadé98da8e12009-02-06 08:55:23 +000021 def test_ensure_string_list(self):
22
Tarek Ziadé8be87652009-02-07 00:05:39 +000023 cmd = self.cmd
Tarek Ziadé98da8e12009-02-06 08:55:23 +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é98da8e12009-02-06 08:55:23 +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
Benjamin Peterson0e234e62013-09-29 11:13:27 -040037 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
Tarek Ziadé8be87652009-02-07 00:05:39 +000049 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):
Ezio Melotti2623a372010-11-21 13:34:58 +000059 self.assertEqual(exec_msg, 'generating out from in')
Tarek Ziadé8be87652009-02-07 00:05:39 +000060 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']
Ezio Melotti2623a372010-11-21 13:34:58 +000078 self.assertEqual(msgs, wanted)
Tarek Ziadé8be87652009-02-07 00:05:39 +000079
Tarek Ziadé2fdd0d52009-04-13 20:03:44 +000080 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')
Benjamin Peterson5c8da862009-06-30 22:57:08 +000087 self.assertTrue(hasattr(cmd, 'option2'))
Tarek Ziadé2fdd0d52009-04-13 20:03:44 +000088
89 cmd.option3 = 1
90 self.assertRaises(DistutilsOptionError, cmd.ensure_string, 'option3')
91
Tarek Ziadé2fdd0d52009-04-13 20:03:44 +000092 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
Éric Araujo54274ad2011-02-03 00:12:18 +0000101 cmd.option1 = os.path.dirname(__file__) or os.curdir
Tarek Ziadé2fdd0d52009-04-13 20:03:44 +0000102 cmd.ensure_dirname('option1')
103 cmd.option2 = 'xxx'
104 self.assertRaises(DistutilsOptionError, cmd.ensure_dirname, 'option2')
105
Tarek Ziadé6d2db372009-09-21 12:19:07 +0000106 def test_debug_print(self):
107 cmd = self.cmd
108 with captured_stdout() as stdout:
109 cmd.debug_print('xxx')
110 stdout.seek(0)
Ezio Melotti2623a372010-11-21 13:34:58 +0000111 self.assertEqual(stdout.read(), '')
Tarek Ziadé6d2db372009-09-21 12:19:07 +0000112
113 debug.DEBUG = True
114 try:
115 with captured_stdout() as stdout:
116 cmd.debug_print('xxx')
117 stdout.seek(0)
Ezio Melotti2623a372010-11-21 13:34:58 +0000118 self.assertEqual(stdout.read(), 'xxx\n')
Tarek Ziadé6d2db372009-09-21 12:19:07 +0000119 finally:
120 debug.DEBUG = False
121
Tarek Ziadé98da8e12009-02-06 08:55:23 +0000122def test_suite():
123 return unittest.makeSuite(CommandTestCase)
124
125if __name__ == '__main__':
Georg Brandl28aeb0d2010-02-06 23:53:52 +0000126 run_unittest(test_suite())