Add test for "args" shell expansion.

This commit is contained in:
Pavel Minaev 2020-04-22 11:29:24 -07:00 committed by Pavel Minaev
parent 65168dd784
commit 50bf46cf9d
3 changed files with 43 additions and 10 deletions

View file

@ -4,9 +4,5 @@
from __future__ import absolute_import, division, print_function, unicode_literals
# Expose Session directly.
def Session(*args, **kwargs):
from tests.debug import session
return session.Session(*args, **kwargs)
from tests.debug.session import Session # noqa

View file

@ -484,6 +484,12 @@ class Session(object):
pid, fmt("{0}-subprocess-{1}", self.debuggee_id, pid)
)
def run_in_terminal(self, args, cwd, env):
exe = args.pop(0)
self.spawn_debuggee.env.update(env)
self.spawn_debuggee(args, cwd, exe=exe)
return {}
def _process_request(self, request):
self.timeline.record_request(request, block=False)
if request.command == "runInTerminal":
@ -491,11 +497,8 @@ class Session(object):
cwd = request("cwd", ".")
env = request("env", json.object(unicode))
try:
exe = args.pop(0)
self.spawn_debuggee.env.update(env)
self.spawn_debuggee(args, cwd, exe=exe)
return {}
except OSError as exc:
return self.run_in_terminal(args, cwd, env)
except Exception as exc:
log.swallow_exception('"runInTerminal" failed:')
raise request.cant_handle(str(exc))
else:

View file

@ -31,3 +31,37 @@ def test_args(pyfile, target, run):
pass
argv = backchannel.receive()
assert argv == [some.str] + args
@pytest.mark.parametrize("target", targets.all)
@pytest.mark.parametrize("run", runners.all_launch)
def test_shell_expansion(pyfile, target, run):
@pyfile
def code_to_debug():
import sys
import debuggee
from debuggee import backchannel
debuggee.setup()
backchannel.send(sys.argv)
def expand(args):
for i, arg in enumerate(args):
if arg.startswith("$"):
args[i] = arg[1:]
class Session(debug.Session):
def run_in_terminal(self, args, cwd, env):
expand(args)
return super(Session, self).run_in_terminal(args, cwd, env)
args = ["0", "$1", "2"]
with Session() as session:
backchannel = session.open_backchannel()
with run(session, target(code_to_debug, args=args)):
pass
argv = backchannel.receive()
if session.config["console"] != "internalConsole":
expand(args)
assert argv == [some.str] + args