Check handles in one function, for parse and readers alike.
commit 0ad96a7762d9284e92ad005998b73a767a6d9f90 · parent 21fc89340d
· browse this tree
Ximianth, 2026-10-23 14:47:18 UTC
Readers now report a handle that can't be one as invalid, as parse does, rather than as unknown.
diff --git a/lib/testmark/document.bash b/lib/testmark/document.bash index 6424f0f..ade7b8e 100644 --- a/lib/testmark/document.bash +++ b/lib/testmark/document.bash @@ -19,16 +19,21 @@ _testmark_err() { >&2 printf 'testmark: %s\n' "$1" } +## Fails with a message unless $1 is a valid handle, and so safe to use in a variable name. +_testmark_handle() { + [[ $1 =~ ^[A-Za-z0-9_]+$ ]] || { + _testmark_err "invalid handle \"$1\": must match [A-Za-z0-9_]+" + return 1 + } +} + _testmark_parse() { (($# == 2)) || { _testmark_err "usage: testmark_parse HANDLE FILE" return 1 } local h=$1 file=$2 - [[ $h =~ ^[A-Za-z0-9_]+$ ]] || { - _testmark_err "invalid handle \"$h\": must match [A-Za-z0-9_]+" - return 1 - } + _testmark_handle "$h" || return 1 unset -v "_testmark_lines_$h" "_testmark_start_$h" "_testmark_end_$h" "_testmark_info_$h" "_testmark_names_$h" "_testmark_pid_$h" # A directory would read as zero lines, so it's rejected here. [[ -f $file && -r $file ]] || { @@ -112,7 +117,8 @@ _testmark_parse() { ## Fails with a message unless $1 is the handle of a parsed document. _testmark_doc() { - [[ $1 =~ ^[A-Za-z0-9_]+$ && -v _testmark_pid_$1 ]] || { + _testmark_handle "$1" || return 1 + [[ -v _testmark_pid_$1 ]] || { _testmark_err "unknown handle \"$1\"" return 1 } diff --git a/tests/test-api.sh b/tests/test-api.sh index deecb4a..91be24a 100755 --- a/tests/test-api.sh +++ b/tests/test-api.sh @@ -114,7 +114,7 @@ for name in "${names[@]}"; do expect_eq "name $name" "$(testmark_body h "$name")" "body of $name" done expect_fail "an unknown name with shell syntax" 'testmark: h: no hunk named "$(>pwned3)"' testmark_body h '$(>pwned3)' -expect_fail "a handle with shell syntax" 'testmark: unknown handle "h[$(>pwned4)]"' testmark_body 'h[$(>pwned4)]' x +expect_fail "a handle with shell syntax" 'testmark: invalid handle "h[$(>pwned4)]": must match [A-Za-z0-9_]+' testmark_body 'h[$(>pwned4)]' x expect_eq "nothing was executed" "$(echo pwned*)" "pwned*" exit "$RESULT"