Skip to content

Commit 7f1d8cb

Browse files
committed
test(bash_env_saved): correctly restore "cwd"
1 parent 489fc72 commit 7f1d8cb

File tree

1 file changed

+18
-11
lines changed

1 file changed

+18
-11
lines changed

test/t/conftest.py

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ def assert_bash_exec(
401401
class bash_env_saved:
402402
def __init__(self, bash: pexpect.spawn, sendintr: bool = False):
403403
self.bash = bash
404-
self.cwd: Optional[str] = None
404+
self.cwd_changed: bool = False
405405
self.saved_shopt: Dict[str, int] = {}
406406
self.saved_variables: Dict[str, int] = {}
407407
self.sendintr = sendintr
@@ -429,8 +429,9 @@ def _unset_variable(self, varname: str):
429429
assert_bash_exec(self.bash, "unset -v %s" % varname)
430430

431431
def _save_cwd(self):
432-
if not self.cwd:
433-
self.cwd = self.bash.cwd
432+
if not self.cwd_changed:
433+
self.cwd_changed = True
434+
self._copy_variable("PWD", "_BASHCOMP_TEST_OLDPWD")
434435

435436
def _check_shopt(self, name: str):
436437
assert_bash_exec(
@@ -457,11 +458,15 @@ def _protect_shopt(self, name: str):
457458
)
458459

459460
def _check_variable(self, varname: str):
460-
assert_bash_exec(
461-
self.bash,
462-
'[[ ${%s-%s} == "${_BASHCOMP_TEST_NEWVAR_%s-%s}" ]]'
463-
% (varname, MAGIC_MARK2, varname, MAGIC_MARK2),
464-
)
461+
try:
462+
assert_bash_exec(
463+
self.bash,
464+
'[[ ${%s-%s} == "${_BASHCOMP_TEST_NEWVAR_%s-%s}" ]]'
465+
% (varname, MAGIC_MARK2, varname, MAGIC_MARK2),
466+
)
467+
except AssertionError:
468+
self._copy_variable("_BASHCOMP_TEST_NEWVAR_" + varname, varname)
469+
raise
465470

466471
def _unprotect_variable(self, varname: str):
467472
if varname not in self.saved_variables:
@@ -480,11 +485,12 @@ def _restore_env(self):
480485

481486
# We first go back to the original directory before restoring
482487
# variables because "cd" affects "OLDPWD".
483-
if self.cwd:
488+
if self.cwd_changed:
484489
self._unprotect_variable("OLDPWD")
485-
assert_bash_exec(self.bash, "cd %s" % shlex.quote(str(self.cwd)))
490+
assert_bash_exec(self.bash, 'cd "$_BASHCOMP_TEST_OLDPWD"')
486491
self._protect_variable("OLDPWD")
487-
self.cwd = None
492+
self._unset_variable("_BASHCOMP_TEST_OLDPWD")
493+
self.cwd_changed = False
488494

489495
for name in self.saved_shopt:
490496
self._check_shopt(name)
@@ -504,6 +510,7 @@ def _restore_env(self):
504510

505511
def chdir(self, path: str):
506512
self._save_cwd()
513+
self.cwd_changed = True
507514
self._unprotect_variable("OLDPWD")
508515
assert_bash_exec(self.bash, "cd %s" % shlex.quote(path))
509516
self._protect_variable("OLDPWD")

0 commit comments

Comments
 (0)