tests: Provide an independent, auto-cleaned working directory to each test.
Fixes zsh-users/zsh-syntax-highlighting#182. Prerequisite for testing issue #228. * tests/test-highlighting.zsh (run_test): Move functionality to run_test_internal; make run_test be a wrapper that handles creating and cleaning up the tempdir. * tests/README.md: Document the new feature. * "highlighters/main/test-data/path-space- .zsh" * highlighters/main/test-data/path-tilde-named.zsh * highlighters/main/test-data/path.zsh Change test data to not depend on being run from the source directory.
This commit is contained in:
parent
b5d02a2f49
commit
c015339202
|
@ -27,9 +27,11 @@
|
||||||
# vim: ft=zsh sw=2 ts=2 et
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
# -------------------------------------------------------------------------------------------------
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
BUFFER='ls highlighters/main/test-data/path-space-\ .zsh'
|
mkdir A
|
||||||
|
touch "A/mu with spaces"
|
||||||
|
BUFFER='ls A/mu\ with\ spaces'
|
||||||
|
|
||||||
expected_region_highlight=(
|
expected_region_highlight=(
|
||||||
"1 2 $ZSH_HIGHLIGHT_STYLES[command]" # ls
|
"1 2 $ZSH_HIGHLIGHT_STYLES[command]" # ls
|
||||||
"4 48 $ZSH_HIGHLIGHT_STYLES[path]" # highlighters/main/test-data/path-space-\ .zsh
|
"4 19 $ZSH_HIGHLIGHT_STYLES[path]" # A/mu\ with\ spaces
|
||||||
)
|
)
|
||||||
|
|
|
@ -27,11 +27,13 @@
|
||||||
# vim: ft=zsh sw=2 ts=2 et
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
# -------------------------------------------------------------------------------------------------
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
hash -d D=highlighters/main/test-data
|
mkdir mydir
|
||||||
|
touch mydir/path-tilde-named.test
|
||||||
|
hash -d D=mydir
|
||||||
|
|
||||||
BUFFER='ls ~D/path-tilde-named.zsh'
|
BUFFER='ls ~D/path-tilde-named.test'
|
||||||
|
|
||||||
expected_region_highlight=(
|
expected_region_highlight=(
|
||||||
"1 2 $ZSH_HIGHLIGHT_STYLES[command]" # ls
|
"1 2 $ZSH_HIGHLIGHT_STYLES[command]" # ls
|
||||||
"4 26 $ZSH_HIGHLIGHT_STYLES[path]" # ~D/path-tilde-named.zsh
|
"4 27 $ZSH_HIGHLIGHT_STYLES[path]" # ~D/path-tilde-named.test
|
||||||
)
|
)
|
||||||
|
|
|
@ -27,9 +27,11 @@
|
||||||
# vim: ft=zsh sw=2 ts=2 et
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
# -------------------------------------------------------------------------------------------------
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
BUFFER='ls highlighters/main/test-data/path.zsh'
|
mkdir A
|
||||||
|
touch A/mu
|
||||||
|
BUFFER='ls A/mu'
|
||||||
|
|
||||||
expected_region_highlight=(
|
expected_region_highlight=(
|
||||||
"1 2 $ZSH_HIGHLIGHT_STYLES[command]" # ls
|
"1 2 $ZSH_HIGHLIGHT_STYLES[command]" # ls
|
||||||
"4 39 $ZSH_HIGHLIGHT_STYLES[path]" # highlighters/main/test-data/path.zsh
|
"4 7 $ZSH_HIGHLIGHT_STYLES[path]" # A/mu
|
||||||
)
|
)
|
||||||
|
|
|
@ -17,7 +17,8 @@ _Note_: `$region_highlight` uses the same `"$i $j $style"` syntax but interprets
|
||||||
|
|
||||||
**Isolation**: Each test is run in a separate subshell, so any variables, aliases, functions, etc.,
|
**Isolation**: Each test is run in a separate subshell, so any variables, aliases, functions, etc.,
|
||||||
it defines will be visible to the tested code (that computes `$region_highlight`), but will not affect
|
it defines will be visible to the tested code (that computes `$region_highlight`), but will not affect
|
||||||
subsequent tests.
|
subsequent tests. The current working directory of tests is set to a newly-created empty directory,
|
||||||
|
which is automatically cleaned up after the test exits.
|
||||||
|
|
||||||
|
|
||||||
highlighting test
|
highlighting test
|
||||||
|
|
|
@ -55,15 +55,19 @@ ZSH_HIGHLIGHT_HIGHLIGHTERS=($1)
|
||||||
|
|
||||||
# Runs a highlighting test
|
# Runs a highlighting test
|
||||||
# $1: data file
|
# $1: data file
|
||||||
run_test() {
|
run_test_internal() {
|
||||||
local -a highlight_zone
|
local -a highlight_zone
|
||||||
local unused_highlight='bg=red,underline' # a style unused by anything else, for tests to use
|
local unused_highlight='bg=red,underline' # a style unused by anything else, for tests to use
|
||||||
|
|
||||||
|
local tests_tempdir="$1"; shift
|
||||||
|
local srcdir="$PWD"
|
||||||
|
builtin cd -q -- "$tests_tempdir" || { echo >&2 "Bail out! cd failed: $?"; return 1 }
|
||||||
|
|
||||||
echo "# ${1:t:r}"
|
echo "# ${1:t:r}"
|
||||||
|
|
||||||
# Load the data and prepare checking it.
|
# Load the data and prepare checking it.
|
||||||
PREBUFFER= BUFFER= ;
|
PREBUFFER= BUFFER= ;
|
||||||
. "$1"
|
. "$srcdir"/"$1"
|
||||||
|
|
||||||
# Check the data declares $PREBUFFER or $BUFFER.
|
# Check the data declares $PREBUFFER or $BUFFER.
|
||||||
[[ -z $PREBUFFER && -z $BUFFER ]] && { echo >&2 "Bail out! Either 'PREBUFFER' or 'BUFFER' must be declared and non-blank"; return 1; }
|
[[ -z $PREBUFFER && -z $BUFFER ]] && { echo >&2 "Bail out! Either 'PREBUFFER' or 'BUFFER' must be declared and non-blank"; return 1; }
|
||||||
|
@ -108,6 +112,21 @@ run_test() {
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
run_test() {
|
||||||
|
# Do not combine the declaration and initialization: «local x="$(false)"» does not set $?.
|
||||||
|
local __tests_tempdir; __tests_tempdir="$(mktemp -d)"
|
||||||
|
if [[ $? -ne 0 ]] || [[ -z $__tests_tempdir ]] || [[ ! -d $__tests_tempdir ]]; then
|
||||||
|
echo >&2 "Bail out! mktemp failed"; return 1
|
||||||
|
fi
|
||||||
|
typeset -r __tests_tempdir # don't allow tests to override the variable that we will 'rm -rf' later on
|
||||||
|
|
||||||
|
{
|
||||||
|
run_test_internal "$__tests_tempdir" "$@"
|
||||||
|
} always {
|
||||||
|
rm -rf -- "$__tests_tempdir"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# Process each test data file in test data directory.
|
# Process each test data file in test data directory.
|
||||||
integer something_failed=0
|
integer something_failed=0
|
||||||
for data_file in ${0:h:h}/highlighters/$1/test-data/*.zsh; do
|
for data_file in ${0:h:h}/highlighters/$1/test-data/*.zsh; do
|
||||||
|
|
Loading…
Reference in New Issue
Block a user