diff options
author | Jun-ichi Takimoto <takimoto-j@kba.biglobe.ne.jp> | 2022-04-12 16:56:18 +0900 |
---|---|---|
committer | Jun-ichi Takimoto <takimoto-j@kba.biglobe.ne.jp> | 2022-04-12 16:56:18 +0900 |
commit | 06e5ec914fdedac6446e02c9427a1706dda9c505 (patch) | |
tree | addf373faf77728f9276179e681eb5f7ea9f7b38 /Test/ztst.zsh | |
parent | 3622551e0270372cc3b0b6e974d85ab1288a2aa7 (diff) | |
download | zsh-06e5ec914fdedac6446e02c9427a1706dda9c505.tar.gz zsh-06e5ec914fdedac6446e02c9427a1706dda9c505.tar.xz zsh-06e5ec914fdedac6446e02c9427a1706dda9c505.zip |
50013: skip %test if a chunk in %prep fails
Only %test is skipped if a chunk in %prep returns nonzero. Both %test and %clean are skipped if ZTST_unimplemented is set in a chunk of %prep. ZTST_cleanup is run in both cases.
Diffstat (limited to 'Test/ztst.zsh')
-rwxr-xr-x | Test/ztst.zsh | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/Test/ztst.zsh b/Test/ztst.zsh index cdc84b160..190deecfd 100755 --- a/Test/ztst.zsh +++ b/Test/ztst.zsh @@ -299,16 +299,18 @@ ZTST_execchunk() { } # Functions for preparation and cleaning. -# When cleaning up (non-zero string argument), we ignore status. -ZTST_prepclean() { - # Execute indented code chunks. - while ZTST_getchunk; do - ZTST_execchunk >/dev/null || [[ -n $1 ]] || { - [[ -n "$ZTST_unimplemented" ]] || +ZTST_prep ZTST_clean () { + # Execute indented code chunks. If ZTST_unimplemented is set + # in any chunk then we will skip the remaining chunks. + # We ignore return status of chunks when cleaning up. + while [[ -z "$ZTST_unimplemented" ]] && ZTST_getchunk; do + ZTST_execchunk >/dev/null || [[ $0 = ZTST_clean ]] || { ZTST_testfailed "non-zero status from preparation code: -$ZTST_code" && return 0 +$ZTST_code" + return 1 } done + return 0 } # diff wrapper @@ -577,27 +579,29 @@ while [[ -z "$ZTST_unimplemented" ]] && ZTST_getsect $ZTST_skipok; do (prep) if (( ${ZTST_sects[prep]} + ${ZTST_sects[test]} + \ ${ZTST_sects[clean]} )); then ZTST_testfailed "\`prep' section must come first" - exit 1 + break # skip %test and %clean sections, but run ZTST_cleanup fi - ZTST_prepclean + ZTST_prep || ZTST_skipok=1 ZTST_sects[prep]=1 ;; (test) if (( ${ZTST_sects[test]} + ${ZTST_sects[clean]} )); then ZTST_testfailed "bad placement of \`test' section" - exit 1 + break # skip %clean section, but run ZTST_cleanup fi - # careful here: we can't execute ZTST_test before || or && - # because that affects the behaviour of traps in the tests. - ZTST_test - (( $? )) && ZTST_skipok=1 + if [[ -z "$ZTST_skipok" ]]; then # if no error in %prep + # careful here: we can't execute ZTST_test before || or && + # because that affects the behaviour of traps in the tests. + ZTST_test + (( $? )) && ZTST_skipok=1 + fi ZTST_sects[test]=1 ;; (clean) if (( ${ZTST_sects[test]} == 0 || ${ZTST_sects[clean]} )); then ZTST_testfailed "bad use of \`clean' section" else - ZTST_prepclean 1 + ZTST_clean ZTST_sects[clean]=1 fi ZTST_skipok= |