@@ -4237,6 +4237,62 @@ def test_checkline_is_not_executable(self):
42374237 self .assertFalse (db .checkline (os_helper .TESTFN , lineno ))
42384238
42394239
4240+ @support .requires_subprocess ()
4241+ class PdbTestInline (unittest .TestCase ):
4242+ @unittest .skipIf (sys .flags .safe_path ,
4243+ 'PYTHONSAFEPATH changes default sys.path' )
4244+ def _run_script (self , script , commands ,
4245+ expected_returncode = 0 ,
4246+ extra_env = None ):
4247+ self .addCleanup (os_helper .rmtree , '__pycache__' )
4248+ filename = 'main.py'
4249+ with open (filename , 'w' ) as f :
4250+ f .write (textwrap .dedent (script ))
4251+ self .addCleanup (os_helper .unlink , filename )
4252+
4253+ commands = textwrap .dedent (commands )
4254+
4255+ cmd = [sys .executable , 'main.py' ]
4256+ if extra_env is not None :
4257+ env = os .environ | extra_env
4258+ else :
4259+ env = os .environ
4260+ with subprocess .Popen (
4261+ cmd ,
4262+ stdout = subprocess .PIPE ,
4263+ stdin = subprocess .PIPE ,
4264+ stderr = subprocess .PIPE ,
4265+ env = {** env , 'PYTHONIOENCODING' : 'utf-8' }
4266+ ) as proc :
4267+ stdout , stderr = proc .communicate (str .encode (commands ))
4268+ stdout = bytes .decode (stdout ) if isinstance (stdout , bytes ) else stdout
4269+ stderr = bytes .decode (stderr ) if isinstance (stderr , bytes ) else stderr
4270+ self .assertEqual (
4271+ proc .returncode ,
4272+ expected_returncode ,
4273+ f"Unexpected return code\n stdout: { stdout } \n stderr: { stderr } "
4274+ )
4275+ return stdout , stderr
4276+
4277+ def test_quit (self ):
4278+ script = """
4279+ x = 1
4280+ breakpoint()
4281+ """
4282+
4283+ commands = """
4284+ quit
4285+ n
4286+ p x + 1
4287+ quit
4288+ y
4289+ """
4290+
4291+ stdout , stderr = self ._run_script (script , commands )
4292+ self .assertIn ("2" , stdout )
4293+ self .assertIn ("Quit anyway" , stdout )
4294+
4295+
42404296@support .requires_subprocess ()
42414297class PdbTestReadline (unittest .TestCase ):
42424298 def setUpClass ():
0 commit comments