blob: a398a4f836eeadccdd0db07dd7a44024f8a3158f [file] [log] [blame]
Chris Jerdonekd6c18dc2012-12-27 18:53:12 -08001"""
2Tests of regrtest.py.
3"""
4
5import argparse
Charles-François Natali833bf1f2013-09-08 12:27:33 +02006import faulthandler
Chris Jerdonekd6c18dc2012-12-27 18:53:12 -08007import getopt
Serhiy Storchaka64f7c4e2013-08-29 12:26:23 +03008import os.path
Chris Jerdonekd6c18dc2012-12-27 18:53:12 -08009import unittest
10from test import regrtest, support
11
Chris Jerdonekd6c18dc2012-12-27 18:53:12 -080012class ParseArgsTestCase(unittest.TestCase):
13
Serhiy Storchaka64f7c4e2013-08-29 12:26:23 +030014 """Test regrtest's argument parsing."""
Chris Jerdonekd6c18dc2012-12-27 18:53:12 -080015
Serhiy Storchaka64f7c4e2013-08-29 12:26:23 +030016 def checkError(self, args, msg):
17 with support.captured_stderr() as err, self.assertRaises(SystemExit):
18 regrtest._parse_args(args)
19 self.assertIn(msg, err.getvalue())
Chris Jerdonekd6c18dc2012-12-27 18:53:12 -080020
Serhiy Storchaka64f7c4e2013-08-29 12:26:23 +030021 def test_help(self):
22 for opt in '-h', '--help':
23 with self.subTest(opt=opt):
24 with support.captured_stdout() as out, \
25 self.assertRaises(SystemExit):
26 regrtest._parse_args([opt])
27 self.assertIn('Run Python regression tests.', out.getvalue())
Chris Jerdonekd6c18dc2012-12-27 18:53:12 -080028
Charles-François Natali833bf1f2013-09-08 12:27:33 +020029 @unittest.skipUnless(hasattr(faulthandler, 'dump_traceback_later'),
30 "faulthandler.dump_traceback_later() required")
Serhiy Storchaka64f7c4e2013-08-29 12:26:23 +030031 def test_timeout(self):
32 ns = regrtest._parse_args(['--timeout', '4.2'])
33 self.assertEqual(ns.timeout, 4.2)
34 self.checkError(['--timeout'], 'expected one argument')
35 self.checkError(['--timeout', 'foo'], 'invalid float value')
Chris Jerdonekd6c18dc2012-12-27 18:53:12 -080036
Serhiy Storchaka64f7c4e2013-08-29 12:26:23 +030037 def test_wait(self):
38 ns = regrtest._parse_args(['--wait'])
39 self.assertTrue(ns.wait)
Chris Jerdonekd6c18dc2012-12-27 18:53:12 -080040
Serhiy Storchaka64f7c4e2013-08-29 12:26:23 +030041 def test_slaveargs(self):
42 ns = regrtest._parse_args(['--slaveargs', '[[], {}]'])
43 self.assertEqual(ns.slaveargs, '[[], {}]')
44 self.checkError(['--slaveargs'], 'expected one argument')
Chris Jerdonekd6c18dc2012-12-27 18:53:12 -080045
Serhiy Storchaka64f7c4e2013-08-29 12:26:23 +030046 def test_start(self):
47 for opt in '-S', '--start':
48 with self.subTest(opt=opt):
49 ns = regrtest._parse_args([opt, 'foo'])
50 self.assertEqual(ns.start, 'foo')
51 self.checkError([opt], 'expected one argument')
Chris Jerdonekd6c18dc2012-12-27 18:53:12 -080052
Serhiy Storchaka64f7c4e2013-08-29 12:26:23 +030053 def test_verbose(self):
54 ns = regrtest._parse_args(['-v'])
55 self.assertEqual(ns.verbose, 1)
56 ns = regrtest._parse_args(['-vvv'])
57 self.assertEqual(ns.verbose, 3)
58 ns = regrtest._parse_args(['--verbose'])
59 self.assertEqual(ns.verbose, 1)
60 ns = regrtest._parse_args(['--verbose'] * 3)
61 self.assertEqual(ns.verbose, 3)
62 ns = regrtest._parse_args([])
63 self.assertEqual(ns.verbose, 0)
Chris Jerdonekd6c18dc2012-12-27 18:53:12 -080064
Serhiy Storchaka64f7c4e2013-08-29 12:26:23 +030065 def test_verbose2(self):
66 for opt in '-w', '--verbose2':
67 with self.subTest(opt=opt):
68 ns = regrtest._parse_args([opt])
69 self.assertTrue(ns.verbose2)
Chris Jerdonekd6c18dc2012-12-27 18:53:12 -080070
Serhiy Storchaka64f7c4e2013-08-29 12:26:23 +030071 def test_verbose3(self):
72 for opt in '-W', '--verbose3':
73 with self.subTest(opt=opt):
74 ns = regrtest._parse_args([opt])
75 self.assertTrue(ns.verbose3)
Chris Jerdonekd6c18dc2012-12-27 18:53:12 -080076
Serhiy Storchaka64f7c4e2013-08-29 12:26:23 +030077 def test_quiet(self):
78 for opt in '-q', '--quiet':
79 with self.subTest(opt=opt):
80 ns = regrtest._parse_args([opt])
81 self.assertTrue(ns.quiet)
82 self.assertEqual(ns.verbose, 0)
Chris Jerdonekd6c18dc2012-12-27 18:53:12 -080083
Serhiy Storchaka64f7c4e2013-08-29 12:26:23 +030084 def test_slow(self):
85 for opt in '-o', '--slow':
86 with self.subTest(opt=opt):
87 ns = regrtest._parse_args([opt])
88 self.assertTrue(ns.print_slow)
Chris Jerdonekd6c18dc2012-12-27 18:53:12 -080089
Serhiy Storchaka64f7c4e2013-08-29 12:26:23 +030090 def test_header(self):
91 ns = regrtest._parse_args(['--header'])
92 self.assertTrue(ns.header)
Chris Jerdonekd6c18dc2012-12-27 18:53:12 -080093
94 def test_randomize(self):
Serhiy Storchaka64f7c4e2013-08-29 12:26:23 +030095 for opt in '-r', '--randomize':
96 with self.subTest(opt=opt):
97 ns = regrtest._parse_args([opt])
98 self.assertTrue(ns.randomize)
99
100 def test_randseed(self):
101 ns = regrtest._parse_args(['--randseed', '12345'])
102 self.assertEqual(ns.random_seed, 12345)
103 self.assertTrue(ns.randomize)
104 self.checkError(['--randseed'], 'expected one argument')
105 self.checkError(['--randseed', 'foo'], 'invalid int value')
106
107 def test_fromfile(self):
108 for opt in '-f', '--fromfile':
109 with self.subTest(opt=opt):
110 ns = regrtest._parse_args([opt, 'foo'])
111 self.assertEqual(ns.fromfile, 'foo')
112 self.checkError([opt], 'expected one argument')
113 self.checkError([opt, 'foo', '-s'], "don't go together")
114
115 def test_exclude(self):
116 for opt in '-x', '--exclude':
117 with self.subTest(opt=opt):
118 ns = regrtest._parse_args([opt])
119 self.assertTrue(ns.exclude)
120
121 def test_single(self):
122 for opt in '-s', '--single':
123 with self.subTest(opt=opt):
124 ns = regrtest._parse_args([opt])
125 self.assertTrue(ns.single)
126 self.checkError([opt, '-f', 'foo'], "don't go together")
127
128 def test_match(self):
129 for opt in '-m', '--match':
130 with self.subTest(opt=opt):
131 ns = regrtest._parse_args([opt, 'pattern'])
132 self.assertEqual(ns.match_tests, 'pattern')
133 self.checkError([opt], 'expected one argument')
134
135 def test_failfast(self):
136 for opt in '-G', '--failfast':
137 with self.subTest(opt=opt):
138 ns = regrtest._parse_args([opt, '-v'])
139 self.assertTrue(ns.failfast)
140 ns = regrtest._parse_args([opt, '-W'])
141 self.assertTrue(ns.failfast)
142 self.checkError([opt], '-G/--failfast needs either -v or -W')
143
144 def test_use(self):
145 for opt in '-u', '--use':
146 with self.subTest(opt=opt):
147 ns = regrtest._parse_args([opt, 'gui,network'])
148 self.assertEqual(ns.use_resources, ['gui', 'network'])
149 ns = regrtest._parse_args([opt, 'gui,none,network'])
150 self.assertEqual(ns.use_resources, ['network'])
151 expected = list(regrtest.RESOURCE_NAMES)
152 expected.remove('gui')
153 ns = regrtest._parse_args([opt, 'all,-gui'])
154 self.assertEqual(ns.use_resources, expected)
155 self.checkError([opt], 'expected one argument')
156 self.checkError([opt, 'foo'], 'invalid resource')
157
158 def test_memlimit(self):
159 for opt in '-M', '--memlimit':
160 with self.subTest(opt=opt):
161 ns = regrtest._parse_args([opt, '4G'])
162 self.assertEqual(ns.memlimit, '4G')
163 self.checkError([opt], 'expected one argument')
164
165 def test_testdir(self):
166 ns = regrtest._parse_args(['--testdir', 'foo'])
167 self.assertEqual(ns.testdir, os.path.join(support.SAVEDCWD, 'foo'))
168 self.checkError(['--testdir'], 'expected one argument')
169
Benjamin Peterson95536b82013-09-29 15:18:43 -0400170 def test_runleaks(self):
Serhiy Storchaka64f7c4e2013-08-29 12:26:23 +0300171 for opt in '-L', '--runleaks':
172 with self.subTest(opt=opt):
173 ns = regrtest._parse_args([opt])
174 self.assertTrue(ns.runleaks)
175
Benjamin Peterson95536b82013-09-29 15:18:43 -0400176 def test_huntrleaks(self):
Serhiy Storchaka64f7c4e2013-08-29 12:26:23 +0300177 for opt in '-R', '--huntrleaks':
178 with self.subTest(opt=opt):
179 ns = regrtest._parse_args([opt, ':'])
180 self.assertEqual(ns.huntrleaks, (5, 4, 'reflog.txt'))
181 ns = regrtest._parse_args([opt, '6:'])
182 self.assertEqual(ns.huntrleaks, (6, 4, 'reflog.txt'))
183 ns = regrtest._parse_args([opt, ':3'])
184 self.assertEqual(ns.huntrleaks, (5, 3, 'reflog.txt'))
185 ns = regrtest._parse_args([opt, '6:3:leaks.log'])
186 self.assertEqual(ns.huntrleaks, (6, 3, 'leaks.log'))
187 self.checkError([opt], 'expected one argument')
188 self.checkError([opt, '6'],
189 'needs 2 or 3 colon-separated arguments')
190 self.checkError([opt, 'foo:'], 'invalid huntrleaks value')
191 self.checkError([opt, '6:foo'], 'invalid huntrleaks value')
192
193 def test_multiprocess(self):
194 for opt in '-j', '--multiprocess':
195 with self.subTest(opt=opt):
196 ns = regrtest._parse_args([opt, '2'])
197 self.assertEqual(ns.use_mp, 2)
198 self.checkError([opt], 'expected one argument')
199 self.checkError([opt, 'foo'], 'invalid int value')
200 self.checkError([opt, '2', '-T'], "don't go together")
201 self.checkError([opt, '2', '-l'], "don't go together")
202 self.checkError([opt, '2', '-M', '4G'], "don't go together")
203
Benjamin Peterson95536b82013-09-29 15:18:43 -0400204 def test_coverage(self):
Serhiy Storchaka64f7c4e2013-08-29 12:26:23 +0300205 for opt in '-T', '--coverage':
206 with self.subTest(opt=opt):
207 ns = regrtest._parse_args([opt])
208 self.assertTrue(ns.trace)
209
210 def test_coverdir(self):
211 for opt in '-D', '--coverdir':
212 with self.subTest(opt=opt):
213 ns = regrtest._parse_args([opt, 'foo'])
214 self.assertEqual(ns.coverdir,
215 os.path.join(support.SAVEDCWD, 'foo'))
216 self.checkError([opt], 'expected one argument')
217
218 def test_nocoverdir(self):
219 for opt in '-N', '--nocoverdir':
220 with self.subTest(opt=opt):
221 ns = regrtest._parse_args([opt])
222 self.assertIsNone(ns.coverdir)
223
224 def test_threshold(self):
225 for opt in '-t', '--threshold':
226 with self.subTest(opt=opt):
227 ns = regrtest._parse_args([opt, '1000'])
228 self.assertEqual(ns.threshold, 1000)
229 self.checkError([opt], 'expected one argument')
230 self.checkError([opt, 'foo'], 'invalid int value')
231
232 def test_nowindows(self):
233 for opt in '-n', '--nowindows':
234 with self.subTest(opt=opt):
235 ns = regrtest._parse_args([opt])
236 self.assertTrue(ns.nowindows)
237
238 def test_forever(self):
239 for opt in '-F', '--forever':
240 with self.subTest(opt=opt):
241 ns = regrtest._parse_args([opt])
242 self.assertTrue(ns.forever)
Chris Jerdonekd6c18dc2012-12-27 18:53:12 -0800243
244
Serhiy Storchaka64f7c4e2013-08-29 12:26:23 +0300245 def test_unrecognized_argument(self):
246 self.checkError(['--xxx'], 'usage:')
247
248 def test_long_option__partial(self):
249 ns = regrtest._parse_args(['--qui'])
250 self.assertTrue(ns.quiet)
251 self.assertEqual(ns.verbose, 0)
252
253 def test_two_options(self):
254 ns = regrtest._parse_args(['--quiet', '--exclude'])
255 self.assertTrue(ns.quiet)
256 self.assertEqual(ns.verbose, 0)
257 self.assertTrue(ns.exclude)
258
259 def test_option_with_empty_string_value(self):
260 ns = regrtest._parse_args(['--start', ''])
261 self.assertEqual(ns.start, '')
262
263 def test_arg(self):
264 ns = regrtest._parse_args(['foo'])
265 self.assertEqual(ns.args, ['foo'])
266
267 def test_option_and_arg(self):
268 ns = regrtest._parse_args(['--quiet', 'foo'])
269 self.assertTrue(ns.quiet)
270 self.assertEqual(ns.verbose, 0)
271 self.assertEqual(ns.args, ['foo'])
272
Chris Jerdonekd6c18dc2012-12-27 18:53:12 -0800273
274if __name__ == '__main__':
Serhiy Storchaka64f7c4e2013-08-29 12:26:23 +0300275 unittest.main()