1
1
import os
2
2
import sys
3
+ import io
3
4
import subprocess
4
5
from test import support
5
6
import unittest
7
+ import unittest .mock
6
8
import test .test_unittest
7
9
from test .test_unittest .test_result import BufferedWriter
8
10
@@ -31,7 +33,7 @@ def testNoExit(self):
31
33
test = object ()
32
34
33
35
class FakeRunner (object ):
34
- def run (self , test ):
36
+ def run (self , test , debug = False ):
35
37
self .test = test
36
38
return result
37
39
@@ -83,7 +85,7 @@ def loadTestsFromNames(self, names, module):
83
85
84
86
def test_defaultTest_with_string (self ):
85
87
class FakeRunner (object ):
86
- def run (self , test ):
88
+ def run (self , test , debug = False ):
87
89
self .test = test
88
90
return True
89
91
@@ -98,7 +100,7 @@ def run(self, test):
98
100
99
101
def test_defaultTest_with_iterable (self ):
100
102
class FakeRunner (object ):
101
- def run (self , test ):
103
+ def run (self , test , debug = False ):
102
104
self .test = test
103
105
return True
104
106
@@ -165,6 +167,7 @@ class TestRaise(unittest.TestCase):
165
167
class Error (Exception ):
166
168
pass
167
169
def test_raise (self ):
170
+ self = self
168
171
raise self .Error
169
172
170
173
class TestRaiseLoader (unittest .TestLoader ):
@@ -192,6 +195,37 @@ def test_no_debug(self):
192
195
testRunner = unittest .TextTestRunner (stream = io .StringIO ()),
193
196
testLoader = self .TestRaiseLoader ())
194
197
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
+
195
229
196
230
class InitialisableProgram (unittest .TestProgram ):
197
231
exit = False
@@ -221,7 +255,7 @@ def __init__(self, **kwargs):
221
255
FakeRunner .raiseError -= 1
222
256
raise TypeError
223
257
224
- def run (self , test ):
258
+ def run (self , test , debug = False ):
225
259
FakeRunner .test = test
226
260
return RESULT
227
261
@@ -359,6 +393,13 @@ def test_debug(self):
359
393
program .testRunner = FakeRunner
360
394
program .parseArgs ([None , '--debug' ])
361
395
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
+
362
403
363
404
def testRunTestsOldRunnerClass (self ):
364
405
program = self .program
@@ -493,7 +534,7 @@ def run_unittest(args):
493
534
# Use -E to ignore PYTHONSAFEPATH env var
494
535
cmd = [sys .executable , '-E' , '-m' , 'unittest' ] + args
495
536
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 '.' )
497
538
with p :
498
539
_ , stderr = p .communicate ()
499
540
return stderr .decode ()
0 commit comments