Jeff King <peff@xxxxxxxx> 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 "$@"