PDB now will properly escape backslashes in the names of modules it executes. Fixes #7750

This commit is contained in:
Jason R. Coombs 2011-11-17 18:03:24 -05:00
parent 9efddb654b
commit 5d032c0f95
2 changed files with 28 additions and 1 deletions

View File

@ -1229,7 +1229,7 @@ see no sign that the breakpoint was reached.
self._wait_for_mainpyfile = 1 self._wait_for_mainpyfile = 1
self.mainpyfile = self.canonic(filename) self.mainpyfile = self.canonic(filename)
self._user_requested_quit = 0 self._user_requested_quit = 0
statement = 'execfile( "%s")' % filename statement = 'execfile(%r)' % filename
self.run(statement) self.run(statement)
# Simplified interface # Simplified interface

View File

@ -3,6 +3,9 @@
import imp import imp
import sys import sys
import os
import unittest
import subprocess
from test import test_support from test import test_support
# This little helper class is essential for testing pdb under doctest. # This little helper class is essential for testing pdb under doctest.
@ -277,6 +280,29 @@ def test_pdb_continue_in_bottomframe():
4 4
""" """
class Tester7750(unittest.TestCase):
# if the filename has something that resolves to a python
# escape character (such as \t), it will fail
test_fn = '.\\test7750.py'
msg = "issue7750 only applies when os.sep is a backslash"
@unittest.skipUnless(os.path.sep == '\\', msg)
def test_issue7750(self):
with open(self.test_fn, 'w') as f:
f.write('print("hello world")')
cmd = [sys.executable, '-m', 'pdb', self.test_fn,]
proc = subprocess.Popen(cmd,
stdout=subprocess.PIPE,
stdin=subprocess.PIPE,
stderr=subprocess.STDOUT,
)
stdout, stderr = proc.communicate('quit\n')
self.assertNotIn('IOError', stdout, "pdb munged the filename")
def tearDown(self):
if os.path.isfile(self.test_fn):
os.remove(self.test_fn)
def test_main(): def test_main():
from test import test_pdb from test import test_pdb
@ -285,3 +311,4 @@ def test_main():
if __name__ == '__main__': if __name__ == '__main__':
test_main() test_main()
unittest.main()