From 319ed136d2aa03a4b83d3d650aa5e2f172a4bea8 Mon Sep 17 00:00:00 2001 From: dholland Date: Sun, 6 Jun 2010 04:51:13 +0000 Subject: [PATCH] Document the changes in the previous version of this file. If we're going to whitewash the test failures, we should at least keep track of what the "real" correct behavior/output is. Especially since a large portion of the tests in here were added specifically to illuminate points at issue in prior discussions. --- tests/util/sh/t_set_e.sh | 48 +++++++++++++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/tests/util/sh/t_set_e.sh b/tests/util/sh/t_set_e.sh index 682ab53b4d01..ab2a0dd6f2bf 100644 --- a/tests/util/sh/t_set_e.sh +++ b/tests/util/sh/t_set_e.sh @@ -1,4 +1,4 @@ -# $NetBSD: t_set_e.sh,v 1.7 2010/06/03 16:06:19 christos Exp $ +# $NetBSD: t_set_e.sh,v 1.8 2010/06/06 04:51:13 dholland Exp $ # # Copyright (c) 2007 The NetBSD Foundation, Inc. # All rights reserved. @@ -106,6 +106,10 @@ all_body() { # according to the standard, only failing *simple* commands # cause an exit under -e. () is not a simple command. + # Correct (per POSIX): + #dcheck '(set -e; (set +e; false; echo OK; false); echo OK)' 'OK OK' + #echeck '(set -e; (set +e; false; echo OK; false); echo OK)' 'OK OK' + # Wrong current behavior: dcheck '(set -e; (set +e; false; echo OK; false); echo OK)' 'OK' echeck '(set -e; (set +e; false; echo OK; false); echo OK)' 'OK' @@ -133,12 +137,18 @@ all_body() { # is in effect and tested accordingly. # dcheck '(set -e; false || false; echo ERR); echo OK' 'OK' - dcheck '(set -e; false && false; echo ERR); echo OK' 'ERR OK' dcheck '(set -e; true && false; echo ERR); echo OK' 'OK' echeck '(set -e; false || false; echo ERR); echo OK' 'OK' - echeck '(set -e; false && false; echo ERR); echo OK' 'ERR OK' echeck '(set -e; true && false; echo ERR); echo OK' 'OK' + # correct: + #dcheck '(set -e; false && false; echo ERR); echo OK' 'OK' + #echeck '(set -e; false && false; echo ERR); echo OK' 'OK' + + # wrong current behavior: + dcheck '(set -e; false && false; echo ERR); echo OK' 'ERR OK' + echeck '(set -e; false && false; echo ERR); echo OK' 'ERR OK' + # A failure that is not reached because of short-circuit # evaluation should not cause an exit, however. dcheck '(set -e; true || false; echo OK); echo OK' 'OK OK' @@ -174,6 +184,10 @@ all_body() { # combined case with () and &&; the inner expression is false # but does not itself exit, and the () should not cause an # exit even when failing. + # correct: + #dcheck '(set -e; (false && true); echo OK); echo OK' 'OK OK' + #echeck '(set -e; (false && true); echo OK); echo OK' 'OK OK' + # wrong current behavior: dcheck '(set -e; (false && true); echo OK); echo OK' 'OK' echeck '(set -e; (false && true); echo OK); echo OK' 'OK' @@ -198,13 +212,16 @@ all_body() { # able to isolate set -e behavior inside ().) However, I'm # going to put these tests here to make sure the issue gets # dealt with sometime. + # + # XXX: the second set has been disabled in the name of making + # all tests "pass". # 1. error if the whole shell exits (current behavior) dcheck 'echo OK; (set -e; false); echo OK' 'OK OK' echeck 'echo OK; (set -e; false); echo OK' 'OK OK' # 2. error if the whole shell does not exit (dsl's suggested behavior) - dcheck 'echo OK; (set -e; false); echo ERR' 'OK ERR' - echeck 'echo OK; (set -e; false); echo ERR' 'OK ERR' + #dcheck 'echo OK; (set -e; false); echo ERR' 'OK' + #echeck 'echo OK; (set -e; false); echo ERR' 'OK' # The current behavior of the shell is that it exits out as # far as -e is set and then stops. This is probably a @@ -214,24 +231,45 @@ all_body() { echeck '(set -e; (false; echo ERR); echo ERR); echo OK' 'OK' # backquote expansion (PR bin/17514) + + # correct + #dcheck '(set -e; echo ERR `false`; echo ERR); echo OK' 'OK' + #dcheck '(set -e; echo ERR $(false); echo ERR); echo OK' 'OK' + #dcheck '(set -e; echo ERR `exit 3`; echo ERR); echo OK' 'OK' + #dcheck '(set -e; echo ERR $(exit 3); echo ERR); echo OK' 'OK' + # wrong current behavior dcheck '(set -e; echo ERR `false`; echo ERR); echo OK' 'ERR ERR OK' dcheck '(set -e; echo ERR $(false); echo ERR); echo OK' 'ERR ERR OK' dcheck '(set -e; echo ERR `exit 3`; echo ERR); echo OK' 'ERR ERR OK' dcheck '(set -e; echo ERR $(exit 3); echo ERR); echo OK' 'ERR ERR OK' + dcheck '(set -e; x=`false`; echo ERR); echo OK' 'OK' dcheck '(set -e; x=$(false); echo ERR); echo OK' 'OK' dcheck '(set -e; x=`exit 3`; echo ERR); echo OK' 'OK' dcheck '(set -e; x=$(exit 3); echo ERR); echo OK' 'OK' + + # correct + #echeck '(set -e; echo ERR `false`; echo ERR); echo OK' 'OK' + #echeck '(set -e; echo ERR $(false); echo ERR); echo OK' 'OK' + #echeck '(set -e; echo ERR `exit 3`; echo ERR); echo OK' 'OK' + #echeck '(set -e; echo ERR $(exit 3); echo ERR); echo OK' 'OK' + + # wrong current behavior echeck '(set -e; echo ERR `false`; echo ERR); echo OK' 'ERR ERR OK' echeck '(set -e; echo ERR $(false); echo ERR); echo OK' 'ERR ERR OK' echeck '(set -e; echo ERR `exit 3`; echo ERR); echo OK' 'ERR ERR OK' echeck '(set -e; echo ERR $(exit 3); echo ERR); echo OK' 'ERR ERR OK' + echeck '(set -e; x=`false`; echo ERR); echo OK' 'OK' echeck '(set -e; x=$(false); echo ERR); echo OK' 'OK' echeck '(set -e; x=`exit 3`; echo ERR); echo OK' 'OK' echeck '(set -e; x=$(exit 3); echo ERR); echo OK' 'OK' # shift (PR bin/37493) + # correct + #dcheck '(set -e; shift || true; echo OK); echo OK' 'OK OK' + #echeck '(set -e; shift || true; echo OK); echo OK' 'OK OK' + # wrong current behavior dcheck '(set -e; shift || true; echo OK); echo OK' 'OK' echeck '(set -e; shift || true; echo OK); echo OK' 'OK'