Jeff King <p...@peff.net> 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 "$@"

Reply via email to