Jeff King <[email protected]> writes:
> Yeah. One of the reasons for both of the errors in this thread is the
> nested double-quoting. Using single quotes is awkward because we're
> already using them to delimit the whole snippet. I've often wondered if
> our tests would be more readable taking the snippet over stdin.
> Something like:
> +test_expect_success 'UTF-8 invalid characters refused' - <<\EOT
> + test_when_finished 'rm -f "$HOME/stderr $HOME/invalid"' &&
> ...
> -'
> +EOT
>
> +# Read from stdin into the variable given in $1.
> +test_read_to_eof () {
> + # Bash's "read" is sufficiently flexible that we can skip the extra
> + # process.
> + if test -n "$BASH_VERSION"
> + then
> + # 64k should be enough for anyone...
> + read -N 65536 -r "$1"
> + else
> + # command substitution eats trailing whitespace, so we add
> + # and then remove a non-whitespace character.
> + eval "$1=\$(cat; printf x)"
> + eval "$1=\${$1%x}"
> + fi
> +}
Yuck. Hacky but nice.
I think this will make it easier to read but I suspect here text
would use temporary files and may slow things down a bit? I do not
know if it is even measurable, though.
> +
> test_expect_failure () {
> test_start_
> test "$#" = 3 && { test_prereq=$1; shift; } || test_prereq=
> test "$#" = 2 ||
> error "bug in the test script: not 2 or 3 parameters to
> test-expect-failure"
> + if test "$2" = "-"
> + then
> + test_read_to_eof test_block
> + set -- "$1" "$test_block"
> + fi
> test_verify_prereq
> export test_prereq
> if ! test_skip "$@"
> @@ -416,6 +437,11 @@ test_expect_success () {
> test "$#" = 3 && { test_prereq=$1; shift; } || test_prereq=
> test "$#" = 2 ||
> error "bug in the test script: not 2 or 3 parameters to
> test-expect-success"
> + if test "$2" = "-"
> + then
> + test_read_to_eof test_block
> + set -- "$1" "$test_block"
> + fi
> test_verify_prereq
> export test_prereq
> if ! test_skip "$@"