Skip to content

Commit 8414290

Browse files
committed
Add unittest tests for --pdb --pm --trace
1 parent b64e696 commit 8414290

File tree

1 file changed

+46
-5
lines changed

1 file changed

+46
-5
lines changed

Lib/test/test_unittest/test_program.py

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import os
22
import sys
3+
import io
34
import subprocess
45
from test import support
56
import unittest
7+
import unittest.mock
68
import test.test_unittest
79
from test.test_unittest.test_result import BufferedWriter
810

@@ -31,7 +33,7 @@ def testNoExit(self):
3133
test = object()
3234

3335
class FakeRunner(object):
34-
def run(self, test):
36+
def run(self, test, debug=False):
3537
self.test = test
3638
return result
3739

@@ -83,7 +85,7 @@ def loadTestsFromNames(self, names, module):
8385

8486
def test_defaultTest_with_string(self):
8587
class FakeRunner(object):
86-
def run(self, test):
88+
def run(self, test, debug=False):
8789
self.test = test
8890
return True
8991

@@ -98,7 +100,7 @@ def run(self, test):
98100

99101
def test_defaultTest_with_iterable(self):
100102
class FakeRunner(object):
101-
def run(self, test):
103+
def run(self, test, debug=False):
102104
self.test = test
103105
return True
104106

@@ -165,6 +167,7 @@ class TestRaise(unittest.TestCase):
165167
class Error(Exception):
166168
pass
167169
def test_raise(self):
170+
self = self
168171
raise self.Error
169172

170173
class TestRaiseLoader(unittest.TestLoader):
@@ -192,6 +195,37 @@ def test_no_debug(self):
192195
testRunner=unittest.TextTestRunner(stream=io.StringIO()),
193196
testLoader=self.TestRaiseLoader())
194197

198+
def test_pdb(self):
199+
from test.test_pdb import PdbTestInput
200+
# post-mortem
201+
out, err = io.StringIO(), io.StringIO()
202+
try:
203+
with unittest.mock.patch('sys.stdout', out),\
204+
unittest.mock.patch('sys.stderr', err),\
205+
PdbTestInput(['c']):
206+
p = unittest.main(
207+
argv=["TestRaise", "--pdb"],
208+
testRunner=unittest.TextTestRunner(stream=err),
209+
testLoader=self.TestRaiseLoader())
210+
except SystemExit:
211+
assert '-> raise self.Error\n(Pdb)' in out.getvalue()
212+
assert 'FAILED (errors=1)' in err.getvalue()
213+
else:
214+
raise AssertionError
215+
# --trace
216+
out, err = io.StringIO(), io.StringIO()
217+
try:
218+
with unittest.mock.patch('sys.stdout', out), PdbTestInput(['c']):
219+
p = unittest.main(
220+
argv=["TestRaise", "--trace"],
221+
testRunner=unittest.TextTestRunner(stream=err),
222+
testLoader=self.TestRaiseLoader())
223+
except SystemExit:
224+
assert '-> self = self\n(Pdb)' in out.getvalue()
225+
assert 'FAILED (errors=1)' in err.getvalue()
226+
else:
227+
raise AssertionError
228+
195229

196230
class InitialisableProgram(unittest.TestProgram):
197231
exit = False
@@ -221,7 +255,7 @@ def __init__(self, **kwargs):
221255
FakeRunner.raiseError -= 1
222256
raise TypeError
223257

224-
def run(self, test):
258+
def run(self, test, debug=False):
225259
FakeRunner.test = test
226260
return RESULT
227261

@@ -359,6 +393,13 @@ def test_debug(self):
359393
program.testRunner = FakeRunner
360394
program.parseArgs([None, '--debug'])
361395
self.assertTrue(program.debug)
396+
program.parseArgs([None, '--pdb'])
397+
self.assertTrue(program.pdb)
398+
program.parseArgs([None, '--pm=pdb'])
399+
self.assertEqual(program.pm, 'pdb')
400+
program.parseArgs([None, '--trace'])
401+
self.assertTrue(program.trace)
402+
362403

363404
def testRunTestsOldRunnerClass(self):
364405
program = self.program
@@ -493,7 +534,7 @@ def run_unittest(args):
493534
# Use -E to ignore PYTHONSAFEPATH env var
494535
cmd = [sys.executable, '-E', '-m', 'unittest'] + args
495536
p = subprocess.Popen(cmd,
496-
stdout=subprocess.DEVNULL, stderr=subprocess.PIPE, cwd=os.path.dirname(__file__))
537+
stdout=subprocess.DEVNULL, stderr=subprocess.PIPE, cwd=os.path.dirname(__file__) or '.')
497538
with p:
498539
_, stderr = p.communicate()
499540
return stderr.decode()

0 commit comments

Comments
 (0)