t7005: sanitize test environment for subsequent tests

Some of the editor tests manipulate the environment or config in ways
that affect future tests, but those modifications are visible to future
tests and create a footgun for them.

Use test_config, subshells, single-command environment overrides, and
test helpers to automatically undo environment and config modifications
once finished.

Best-viewed-with: --ignore-all-space
Signed-off-by: D. Ben Knoble <ben.knoble+github@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
D. Ben Knoble
2025-08-13 13:50:05 -04:00
committed by Junio C Hamano
parent a9c4141abb
commit a60203a015

View File

@@ -34,61 +34,57 @@ test_expect_success setup '
test_commit_message HEAD -m "$msg" test_commit_message HEAD -m "$msg"
' '
TERM=dumb
export TERM
test_expect_success 'dumb should error out when falling back on vi' ' test_expect_success 'dumb should error out when falling back on vi' '
test_must_fail git commit --amend test_must_fail env TERM=dumb git commit --amend
' '
test_expect_success 'dumb should prefer EDITOR to VISUAL' ' test_expect_success 'dumb should prefer EDITOR to VISUAL' '
EDITOR=./e-EDITOR.sh && TERM=dumb EDITOR=./e-EDITOR.sh VISUAL=./e-VISUAL.sh \
VISUAL=./e-VISUAL.sh && git commit --amend &&
export EDITOR VISUAL &&
git commit --amend &&
test_commit_message HEAD -m "Edited by EDITOR" test_commit_message HEAD -m "Edited by EDITOR"
' '
TERM=vt100
export TERM
for i in $vi EDITOR VISUAL core_editor GIT_EDITOR for i in $vi EDITOR VISUAL core_editor GIT_EDITOR
do do
echo "Edited by $i" >expect
unset EDITOR VISUAL GIT_EDITOR
git config --unset-all core.editor
case "$i" in
core_editor)
git config core.editor ./e-core_editor.sh
;;
[A-Z]*)
eval "$i=./e-$i.sh"
export $i
;;
esac
test_expect_success "Using $i" ' test_expect_success "Using $i" '
PATH="$PWD:$PATH" git commit --amend && if test "$i" = core_editor
test_commit_message HEAD expect then
test_config core.editor ./e-core_editor.sh
fi &&
(
case "$i" in
[A-Z]*)
eval "$i=./e-$i.sh" &&
export $i
;;
esac &&
PATH="$PWD:$PATH" TERM=vt100 git commit --amend
) &&
test_commit_message HEAD -m "Edited by $i"
' '
done done
unset EDITOR VISUAL GIT_EDITOR test_expect_success 'Using editors with overrides' '
git config --unset-all core.editor (
for i in $vi EDITOR VISUAL core_editor GIT_EDITOR TERM=vt100 &&
do export TERM &&
echo "Edited by $i" >expect for i in $vi EDITOR VISUAL core_editor GIT_EDITOR
case "$i" in do
core_editor) echo "Edited by $i" >expect &&
git config core.editor ./e-core_editor.sh case "$i" in
;; core_editor)
[A-Z]*) git config core.editor ./e-core_editor.sh
eval "$i=./e-$i.sh" ;;
export $i [A-Z]*)
;; eval "$i=./e-$i.sh" &&
esac export $i
test_expect_success "Using $i (override)" ' ;;
PATH="$PWD:$PATH" git commit --amend && esac &&
test_commit_message HEAD expect PATH="$PWD:$PATH" git commit --amend &&
' test_commit_message HEAD expect || exit 1
done done
)
'
test_expect_success 'editor with a space' ' test_expect_success 'editor with a space' '
echo "echo space >\"\$1\"" >"e space.sh" && echo "echo space >\"\$1\"" >"e space.sh" &&
@@ -97,9 +93,8 @@ test_expect_success 'editor with a space' '
test_commit_message HEAD -m space test_commit_message HEAD -m space
' '
unset GIT_EDITOR
test_expect_success 'core.editor with a space' ' test_expect_success 'core.editor with a space' '
git config core.editor \"./e\ space.sh\" && test_config core.editor \"./e\ space.sh\" &&
git commit --amend && git commit --amend &&
test_commit_message HEAD -m space test_commit_message HEAD -m space
' '