diff --git a/src/cmd/ksh93/tests/alias.sh b/src/cmd/ksh93/tests/alias.sh index 6d7416fed..b97136cd0 100755 --- a/src/cmd/ksh93/tests/alias.sh +++ b/src/cmd/ksh93/tests/alias.sh @@ -163,14 +163,14 @@ got=$( # Listing members of the hash table with 'alias -pt' should work exp='alias -t cat -vi: tracked alias not found +ls: tracked alias not found alias -t cat alias -t chmod' got=$( set +x redirect 2>&1 hash -r cat chmod - alias -pt cat vi # vi shouldn't be added to the hash table + alias -pt cat ls # ls shouldn't be added to the hash table alias -pt ) [[ $exp == $got ]] || err_exit "Listing members of the hash table with 'alias -pt' doesn't work" \ @@ -228,12 +228,12 @@ ret=$? "(expected 2, got $ret)" # Detect zombie aliases with 'alias'. -exp='vi: alias not found +exp='ls: alias not found chmod: alias not found' got=$($SHELL -c ' - hash vi chmod + hash ls chmod hash -r - alias vi chmod + alias ls chmod ' 2>&1) ret=$? [[ $exp == $got ]] || err_exit "Listing removed tracked aliases with 'alias' should fail with an error message" \ @@ -242,12 +242,12 @@ ret=$? "(expected 2, got $ret)" # Detect zombie aliases with 'alias -p'. -exp='vi: alias not found +exp='ls: alias not found chmod: alias not found' got=$($SHELL -c ' - hash vi chmod + hash ls chmod hash -r - alias -p vi chmod + alias -p ls chmod ' 2>&1) ret=$? [[ $exp == $got ]] || err_exit "Listing removed tracked aliases with 'alias -p' should fail with an error message" \ @@ -256,12 +256,12 @@ ret=$? "(expected 2, got $ret)" # Detect zombie tracked aliases. -exp='vi: tracked alias not found +exp='ls: tracked alias not found chmod: tracked alias not found' got=$($SHELL -c ' - hash vi chmod + hash ls chmod hash -r - alias -pt vi chmod + alias -pt ls chmod ' 2>&1) ret=$? [[ $exp == $got ]] || err_exit "Listing removed tracked aliases with 'alias -pt' should fail with an error message" \ diff --git a/src/cmd/ksh93/tests/arith.sh b/src/cmd/ksh93/tests/arith.sh index 000fe802d..af481508f 100755 --- a/src/cmd/ksh93/tests/arith.sh +++ b/src/cmd/ksh93/tests/arith.sh @@ -2,7 +2,7 @@ # # # This software is part of the ast package # # Copyright (c) 1982-2012 AT&T Intellectual Property # -# Copyright (c) 2020-2021 Contributors to ksh 93u+m # +# Copyright (c) 2020-2022 Contributors to ksh 93u+m # # and is licensed under the # # Eclipse Public License, Version 1.0 # # by AT&T Intellectual Property # @@ -947,5 +947,40 @@ got=$(typeset -Z x=0x15; set +x; { echo $((x)); } 2>&1) [[ $got == "$exp" ]] || err_exit "typeset -Z corrupts hexadecimal number in arithmetic context" \ "(expected $(printf %q "$exp"), got $(printf %q "$got"))" +# ====== +# Test for 'set -u' backported from ksh93v- 2013-09-26 +unset IFS i +set -u +float -a ar +function f +{ + integer i=0 ar_i=0 + for (( i=0 ; i < 3 ; i++ )) + do (( ar[ar_i++]=i)) + done + printf "%q\n" "${ar[*]}" +} +[[ $(f) == "'0 1 2'" ]] || err_exit '0 value for variable in arithmetic expression inside function with set -u fails' +set +u + +# Test for unset x.NOT_KNOWN floating point variable (backported +# from ksh93v- 2013-09-13). +unset x +float x +((x.NOT_KNOWN == 0)) || err_exit 'x.NOT_KNOWN is unknown and should have value 0' + +# Test for a bug with short integers that causes core dumps +# (backported from ksh93v- 2013-08-07). +"$SHELL" <<- \EOF || err_exit 'detected short integer bug that causes core dumps' + typeset -s -i -a t + typeset -s -i p + (( p=2**17 )) # tape start position + (( t[p]+=13)) + while (( t[p] != 0 )) + do ((t[p]-=1 , p+=1)) + done + exit 0 +EOF + # ====== exit $((Errors<125?Errors:125)) diff --git a/src/cmd/ksh93/tests/arrays.sh b/src/cmd/ksh93/tests/arrays.sh index a5df18cc3..c2257d5c2 100755 --- a/src/cmd/ksh93/tests/arrays.sh +++ b/src/cmd/ksh93/tests/arrays.sh @@ -819,5 +819,9 @@ got=$(typeset -p foo) [[ $exp == "$got" ]] || err_exit "Output from 'typeset -p' for indexed array cannot be used for reinput" \ "(expected $(printf %q "$exp"), got $(printf %q "$got"))" +# ====== +# Regression test for 'typeset -a' from ksh93v- 2013-04-02 +"$SHELL" -c 'a=(foo bar); [[ $(typeset -a) == *"a=("*")"* ]]' || err_exit "'typeset -a' doesn't work correctly" + # ====== exit $((Errors<125?Errors:125)) diff --git a/src/cmd/ksh93/tests/arrays2.sh b/src/cmd/ksh93/tests/arrays2.sh index 992056c6a..f37e03eca 100755 --- a/src/cmd/ksh93/tests/arrays2.sh +++ b/src/cmd/ksh93/tests/arrays2.sh @@ -224,6 +224,13 @@ exp=3 [[ ${foo[bar][x]} == $exp ]] || err_exit "subscript gets added incorrectly to an associative array when ++ operator is called" \ "(expected '$exp', got '${foo[bar][x]}')" +unset A +typeset -A A +typeset -A A[a] +A[a][z]=1 +[[ ${!A[a][@]} == z ]] || err_exit 'A[a] should only have subscript z' \ + "(got $(printf %q "${!A[a][@]}"))" + # ====== # Multidimensional arrays with an unset method shouldn't cause a crash. # The test itself must be run inside of a function. diff --git a/src/cmd/ksh93/tests/attributes.sh b/src/cmd/ksh93/tests/attributes.sh index dba147091..0c1652bcd 100755 --- a/src/cmd/ksh93/tests/attributes.sh +++ b/src/cmd/ksh93/tests/attributes.sh @@ -737,5 +737,18 @@ got=$(env | grep '^\.foo[.=]') unset .foo.bar .foo set +o allexport +# ====== +# Regression test from ksh93v- 2012-10-24 for testing the zerofill width +# after exporting a variable. +unset exp got +typeset -Z4 VAR1 +VAR1=1 +exp=$(typeset -p VAR1) +export VAR1 +got=$(typeset -p VAR1) +got=${got/ -x/} +[[ $got == "$exp" ]] || err_exit 'typeset -x causes zerofill width to change' \ + "(expected $(printf %q "$exp"), got $(printf %q "$got"))" + # ====== exit $((Errors<125?Errors:125)) diff --git a/src/cmd/ksh93/tests/basic.sh b/src/cmd/ksh93/tests/basic.sh index 14c6cf8a7..e6102506a 100755 --- a/src/cmd/ksh93/tests/basic.sh +++ b/src/cmd/ksh93/tests/basic.sh @@ -347,7 +347,7 @@ then [[ $($SHELL -c 'cat <(print foo)' 2> /dev/null) == foo ]] || err_exit 'proc [[ $({ $SHELL -c 'cat <(for i in x y z; do print $i; done)';} 2> /dev/null) == $'x\ny\nz' ]] || err_exit 'process substitution of compound commands not working' fi -[[ $($SHELL -r 'command -p :' 2>&1) == *restricted* ]] || err_exit 'command -p not restricted' +[[ $($SHELL -cr 'command -p :' 2>&1) == *restricted* ]] || err_exit 'command -p not restricted' print cat > $tmp/scriptx chmod +x $tmp/scriptx [[ $($SHELL -c "print foo | $tmp/scriptx ;:" 2> /dev/null ) == foo ]] || err_exit 'piping into script fails' diff --git a/src/cmd/ksh93/tests/bracket.sh b/src/cmd/ksh93/tests/bracket.sh index 8e6faf611..23ee9ae8a 100755 --- a/src/cmd/ksh93/tests/bracket.sh +++ b/src/cmd/ksh93/tests/bracket.sh @@ -355,6 +355,9 @@ test ! ! ! 2> /dev/null || err_exit 'test ! ! ! should return 0' test ! ! x 2> /dev/null || err_exit 'test ! ! x should return 0' test ! ! '' 2> /dev/null && err_exit 'test ! ! "" should return non-zero' +x=10 +([[ x -eq 10 ]]) 2> /dev/null || err_exit 'x -eq 10 fails in [[...]] with x=10' + # ====== # The POSIX mode should disable the ancient 'test -t' compatibility hack. if [[ -o ?posix ]] diff --git a/src/cmd/ksh93/tests/builtins.sh b/src/cmd/ksh93/tests/builtins.sh index ded54632a..76a59c174 100755 --- a/src/cmd/ksh93/tests/builtins.sh +++ b/src/cmd/ksh93/tests/builtins.sh @@ -801,19 +801,41 @@ integer foo=1 exp=4 got=$(foo+=3 command eval 'echo $foo') [[ $exp == $got ]] || err_exit "Test 1: += assignment for environment variables doesn't work with 'command special_builtin'" \ - "(expected $exp, got $got)" + "(expected $(printf %q "$exp"), got $(printf %q "$got"))" foo+=3 command eval 'test $foo' -(( foo == 1 )) || err_exit "environment isn't restored after 'command special_builtin'" \ - "(expected 1, got $foo)" +exp=1 +(( foo == exp )) || err_exit "environment isn't restored after 'command special_builtin'" \ + "(expected $(printf %q "$exp"), got $(printf %q "$got"))" got=$(foo+=3 eval 'echo $foo') +exp=4 [[ $exp == $got ]] || err_exit "+= assignment for environment variables doesn't work with builtins" \ - "(expected $exp, got $got)" + "(expected $(printf %q "$exp"), got $(printf %q "$got"))" unset foo exp=barbaz got=$(foo=bar; foo+=baz command eval 'echo $foo') [[ $exp == $got ]] || err_exit "Test 2: += assignment for environment variables doesn't work with 'command special_builtin'" \ - "(expected $exp, got $got)" + "(expected $(printf %q "$exp"), got $(printf %q "$got"))" + +unset y +exp='outside f, 1, 2, 3, outside f' +got=$( + f() { + if [ -n "${_called_f+_}" ]; then + for y; do + printf '%s, ' "$y" + done + else + _called_f= y= command eval '{ typeset +x y; } 2>/dev/null; f "$@"' + fi + } + y='outside f' + printf "$y, " + f 1 2 3 + echo "$y" +) +[[ $got == "$exp" ]] || err_exit 'assignments to "command special_built-in" leaving side effects' \ + "(expected $(printf %q "$exp"), got $(printf %q "$got"))" # Attempting to modify a readonly variable with the += operator should fail exp=2 @@ -1027,7 +1049,9 @@ unset foo [[ $expect != $actual ]] && err_exit "Specifying $padding padding with format '%$i' doesn't work (expected '$expect', got '$actual')" done done + exit $Errors ) +Errors=$? # Ensure error count survives subshell # ====== # Test various AST getopts usage/manual outputs @@ -1544,5 +1568,21 @@ kill "$sleep_pid" 2>/dev/null (echo ok |& read -p .sh.foo"?dummy prompt: " && [[ ${.sh.foo} == ok ]]) "$tmp/evalbug" +print ". $tmp/evalbug" > "$tmp/envfile" +[[ $(ENV=$tmp/envfile "$SHELL" -i -c : 2> /dev/null) == ok ]] || err_exit 'eval inside dot script called from profile file not working' + +# Backported ksh93v- 2013-03-18 test for 'read -A', where +# IFS sets the delimiter to a newline while -d specifies +# no delimiter (-d takes priority over IFS). +if ((SHOPT_BRACEPAT)); then + got=$(printf %s\\n {a..f} | IFS=$'\n' read -rd '' -A a; typeset -p a) + exp=$'typeset -a a=($\'a\\nb\\nc\\nd\\ne\\nf\\n\')' + [[ $got == "$exp" ]] || err_exit "IFS overrides the delimiter specified by the read command's -d option" \ + "(expected $(printf %q "$exp"), got $(printf %q "$got"))" +fi + # ====== exit $((Errors<125?Errors:125)) diff --git a/src/cmd/ksh93/tests/comvario.sh b/src/cmd/ksh93/tests/comvario.sh index d150ef20d..82b0d8d61 100755 --- a/src/cmd/ksh93/tests/comvario.sh +++ b/src/cmd/ksh93/tests/comvario.sh @@ -2,7 +2,7 @@ # # # This software is part of the ast package # # Copyright (c) 1982-2012 AT&T Intellectual Property # -# Copyright (c) 2020-2021 Contributors to ksh 93u+m # +# Copyright (c) 2020-2022 Contributors to ksh 93u+m # # and is licensed under the # # Eclipse Public License, Version 1.0 # # by AT&T Intellectual Property # @@ -652,6 +652,11 @@ test_read_type_crash test_read_C_into_array test_read_C_special_shell_keywords +unset bar +enum bool=(false true) +bool -a bar +bar[3]=true +[[ $((5+bar[3])) != 6 ]] && err_exit '$((5+bar[3])) should be 6' # tests done exit $((Errors<125?Errors:125)) diff --git a/src/cmd/ksh93/tests/enum.sh b/src/cmd/ksh93/tests/enum.sh index f7b749e24..d3452408d 100755 --- a/src/cmd/ksh93/tests/enum.sh +++ b/src/cmd/ksh93/tests/enum.sh @@ -57,7 +57,7 @@ done typeset -T X_t=( typeset name=aha ) typeset -a[X_t] arr ) 2> /dev/null -[[ $? == 1 ]] || err_exit 'typeset -a[X_t] should generate an error message when X-t is not an enumeration type' +[[ $? == 1 ]] || err_exit 'typeset -a[X_t] should generate an error message when X_t is not an enumeration type' typeset -a [Color_t] arr arr[green]=foo @@ -168,5 +168,27 @@ exp=': trap: is a special shell builtin' [[ $got == *"$exp" ]] || err_exit "enum overrides special builtin" \ "(expected match of *$(printf %q "$exp"); got $(printf %q "$got"))" +# ====== +# Various tests backported from ksh93v- for enum type arrays. +enum bool=(false true) +bool -A a=( [2]=true [4]=false ) +exp=true +got=${a[2]} +[[ $got == $exp ]] || err_exit 'associative array assignment failure when using enums' \ + "(expected $(printf %q "$exp"); got $(printf %q "$got"))" +exp=2 +got=${#a[@]} +[[ $got == $exp ]] || err_exit 'bool -A a should only have two elements' \ + "(expected $(printf %q "$exp"); got $(printf %q "$got"))" + +bool -a bia +(( bia[4]=false )) +[[ ${bia[3]} ]] && err_exit 'empty index array element should not produce a value' +(( bia[3] == 0 )) || err_exit 'empty index array element should be numerically 0' +bool -A baa +(( baa[4]=false )) +[[ ${baa[3]} ]] && err_exit 'empty associative array element should not produce a value' +(( baa[3] == 0 )) || err_exit 'empty associative array element should be numerically 0' + # ====== exit $((Errors<125?Errors:125)) diff --git a/src/cmd/ksh93/tests/exit.sh b/src/cmd/ksh93/tests/exit.sh index eb7aeed2d..c4e71f1d2 100755 --- a/src/cmd/ksh93/tests/exit.sh +++ b/src/cmd/ksh93/tests/exit.sh @@ -2,7 +2,7 @@ # # # This software is part of the ast package # # Copyright (c) 1982-2011 AT&T Intellectual Property # -# Copyright (c) 2020-2021 Contributors to ksh 93u+m # +# Copyright (c) 2020-2022 Contributors to ksh 93u+m # # and is licensed under the # # Eclipse Public License, Version 1.0 # # by AT&T Intellectual Property # @@ -182,5 +182,26 @@ done (fn() { false; }; fn >/dev/null/nonexistent; true) 2>/dev/null \ || err_exit 'Redirection error with function execution causes shell to exit' +# ====== +# Backported regression test from ksh93v- 2014-09-29 for the +# exit status of functions in command substitutions. +foo() { + print -r foo | read + return 1 +} +o1=$(foo "foo") +status=$? +exp=1 +((exp == status)) || err_exit 'function which fails inside of a command substitution returns wrong exit status' \ + "(expected '$exp', got '$status')" + +# Backported test from ksh93v- 2014-07-21 for the exit status +# of subshells with a failing command without pipefail enabled. +x=$({ sleep .1; false;} | true) +status=$? +exp=0 +(( exp == status )) || err_exit 'without pipefail, non-zero exit in pipeline causes command substitution to fail' \ + "(expected '$exp', got '$status')" + # ====== exit $((Errors<125?Errors:125)) diff --git a/src/cmd/ksh93/tests/functions.sh b/src/cmd/ksh93/tests/functions.sh index fb4c5fe5c..b488b4986 100755 --- a/src/cmd/ksh93/tests/functions.sh +++ b/src/cmd/ksh93/tests/functions.sh @@ -392,7 +392,7 @@ function closure done return $r } -closure 0 || err_exit -u2 'for loop function optimization bug2' +closure 0 || err_exit 'for loop function optimization bug' dir=$tmp/dir mkdir $dir cd $dir || { err_exit "cd $dir failed"; exit 1; } diff --git a/src/cmd/ksh93/tests/heredoc.sh b/src/cmd/ksh93/tests/heredoc.sh index d87752b8a..e60280d2b 100755 --- a/src/cmd/ksh93/tests/heredoc.sh +++ b/src/cmd/ksh93/tests/heredoc.sh @@ -2,7 +2,7 @@ # # # This software is part of the ast package # # Copyright (c) 1982-2012 AT&T Intellectual Property # -# Copyright (c) 2020-2021 Contributors to ksh 93u+m # +# Copyright (c) 2020-2022 Contributors to ksh 93u+m # # and is licensed under the # # Eclipse Public License, Version 1.0 # # by AT&T Intellectual Property # @@ -515,6 +515,14 @@ EOF' 2>&1) $SHELL -c '$(true << !) !' 2> /dev/null && err_exit "a here-doc that isn't completed before the closing ) in a command substitution doesn't cause an error" +# Here-document test backported from ksh93v- 2014-04-15 for backtick +# command substitutions. +x=$("$SHELL" -c 'test=`"$SHELL" 2>&1 << EOF +print $? +EOF` +print $test') +[[ $x == 0 ]] || err_exit '`` command substitution containing here-doc not working' + # ====== # Check that ${p}, where p is a special parameter, does not cause a syntax error in a here-document. # Bug for ${!} and ${$} reported at: https://github.com/ksh93/ksh/issues/127 @@ -525,5 +533,14 @@ EOF ' 2>&1) || err_exit "special parameter \${$p} throws syntax error in here-document (got \"$err\")" done +# ====== +# Regression test for the cat builtin backported from +# ksh93v- 2013-08-29. +if builtin cat 2> /dev/null; then + exp='foo bar baz bork blah blarg' + got=$(cat <<<"foo bar baz" 3<&0 <<<"$(&1) +[[ $exp == $got ]] || err_exit 'incorrect output with ksh -v' \ + "(expected $(printf %q "$exp"), got $(printf %q "$got"))" + +# ====== +# Tests that set -m puts background jobs in a separate process group. +LINENO=$LINENO "$SHELL" -m <<- \EOF + . "${SHTESTS_COMMON:-${0%/*}/_common}" + [[ $- == *m* ]] || err_exit '$- does not contain m when monitor mode specified' + float t=SECONDS + sleep 2 & pid=$! + kill -KILL -$pid 2> /dev/null || err_exit 'kill to background group failed' + wait 2> /dev/null + (( (SECONDS-t) > 1 )) && err_exit 'kill did not kill background sleep' + exit $Errors +EOF +((Errors+=$?)) + +# ====== +# Test for 'set -u' from ksh93v- 2013-04-09 +"$SHELL" 2> /dev/null <<- \EOF && err_exit 'unset variable with set -u on does not terminate script' + set -e -u -o pipefail + ls | while read file + do + files[${#files[*]}]=$fil + done + exit +EOF + # ====== exit $((Errors<125?Errors:125)) diff --git a/src/cmd/ksh93/tests/path.sh b/src/cmd/ksh93/tests/path.sh index 638d5d9d4..35f7624d2 100755 --- a/src/cmd/ksh93/tests/path.sh +++ b/src/cmd/ksh93/tests/path.sh @@ -954,5 +954,18 @@ exp=$PWD$'\n'$PWD [[ $got == "$exp" ]] || err_exit "child shell failed to obtain PWD" \ "(expected $(printf %q "$exp"), got $(printf %q "$got"))" +# ====== +# Test backported from ksh93v- 2013-06-28 for deleting +# a loaded libcmd builtin. +if builtin cat 2> /dev/null +then path=$PATH + PATH=/bin:/usr/bin + if [[ $(type -t cat) == builtin ]] + then builtin -d cat + [[ $(type -t cat) == builtin ]] && err_exit 'builtin -d does not delete builtin libcmd builtin' + fi +fi +PATH=$path + # ====== exit $((Errors<125?Errors:125)) diff --git a/src/cmd/ksh93/tests/quoting.sh b/src/cmd/ksh93/tests/quoting.sh index 7a36999c3..856886421 100755 --- a/src/cmd/ksh93/tests/quoting.sh +++ b/src/cmd/ksh93/tests/quoting.sh @@ -2,7 +2,7 @@ # # # This software is part of the ast package # # Copyright (c) 1982-2011 AT&T Intellectual Property # -# Copyright (c) 2020-2021 Contributors to ksh 93u+m # +# Copyright (c) 2020-2022 Contributors to ksh 93u+m # # and is licensed under the # # Eclipse Public License, Version 1.0 # # by AT&T Intellectual Property # @@ -362,4 +362,13 @@ ARGS=("$@") set -- "${ARGS[@]}" (( $# )) && err_exit 'set -- "${ARGS[@]}" for empty array should not produce arguments' +# ====== +# Backported tests from ksh93v- 2013-04-22 for using +# backslashes in variables. +x=\\x +[[ x == $x ]] && err_exit "\$x='$x' should not match x" +case x in +$x) err_exit "case \$x='$x' should not match x";; +esac + exit $((Errors<125?Errors:125)) diff --git a/src/cmd/ksh93/tests/sh_match.sh b/src/cmd/ksh93/tests/sh_match.sh index 8379cedaa..851efb389 100755 --- a/src/cmd/ksh93/tests/sh_match.sh +++ b/src/cmd/ksh93/tests/sh_match.sh @@ -210,7 +210,7 @@ cat >"${testscript}" <<-TEST1SCRIPT printf '\\n' } >"\${tmpfile}" - diff -u <( printf '%s\\n' "\${xtext}") "\${tmpfile}" + diff -u <( printf '%s\\n' "\${xtext}") "\${tmpfile}" | sed '/No differences encountered/d' if cmp <( printf '%s\\n' "\${xtext}") "\${tmpfile}" ; then printf "#input and output OK (%d characters).\\n" "\$(wc -m <"\${tmpfile}")" else diff --git a/src/cmd/ksh93/tests/shtests b/src/cmd/ksh93/tests/shtests index 79fc88594..63bd78a67 100755 --- a/src/cmd/ksh93/tests/shtests +++ b/src/cmd/ksh93/tests/shtests @@ -13,7 +13,7 @@ USAGE=$' [-author?David Korn ] [-author?Glenn Fowler ] [-copyright?(c) 2000-2012 AT&T Intellectual Property] -[-copyright?(c) 2020-2021 Contributors to https://github.com/ksh93/ksh] +[-copyright?(c) 2020-2022 Contributors to https://github.com/ksh93/ksh] [-license?http://www.eclipse.org/org/documents/epl-v10.html] [+NAME?shtests - ksh regression test harness] [+DESCRIPTION?\bshtests\b is the \bksh\b(1) regression test harness for diff --git a/src/cmd/ksh93/tests/signal.sh b/src/cmd/ksh93/tests/signal.sh index 87bcf276d..3dc23fd4b 100755 --- a/src/cmd/ksh93/tests/signal.sh +++ b/src/cmd/ksh93/tests/signal.sh @@ -568,5 +568,11 @@ got=$("$SHELL" -c 'trap + INT; "$SHELL" -c '\''kill -s INT $$'\''; echo "$?, con "(got status $e$( ((e>128)) && print -n /SIG && kill -l "$e"), $(printf %q "$got"))" trap - INT +# Test for 'trap - INT' backported from ksh93v- 2013-07-27 +float s=SECONDS +(trap - INT; exec sleep 2) & sleep .5; kill -sINT $! +wait $! +(( (SECONDS-s) < 1.8)) && err_exit "'trap - INT' causing trap to not be ignored" + # ====== exit $((Errors<125?Errors:125)) diff --git a/src/cmd/ksh93/tests/subshell.sh b/src/cmd/ksh93/tests/subshell.sh index 0f238b960..15ea67436 100755 --- a/src/cmd/ksh93/tests/subshell.sh +++ b/src/cmd/ksh93/tests/subshell.sh @@ -1112,5 +1112,46 @@ e1=$( (f() { return 267; }; f); echo $? ) e2=$( (ulimit -t unlimited 2>/dev/null; f() { return 267; }; f); echo $? ) ((e1==11 && e2==11)) || err_exit "exit status of virtual ($e1) and real ($e2) subshell should both be clipped to 8 bits (11)" +# ====== +# Regression test backported from ksh93v- 2014-04-15 for +# a nonexistent command at the end of a pipeline in `` +"$SHELL" -c 'while((SECONDS<3)); do test -z `/bin/false | /bin/false | /bin/doesnotexist`; done; :' 2> /dev/null || \ + err_exit 'nonexistent last command in pipeline causes `` command substitution to fail' + +# Regression test backported from ksh93v- 2013-07-19 for the +# effects of .sh.value on shared-state command substitutions. +function foo +{ + .sh.value=bam +} +got=${ foo; } +[[ $got ]] && err_exit "setting .sh.value in a function affects shared-state command substitution output when it shouldn't print anything" \ + "(got $(printf %q "$got"))" + +# Regression test from ksh93v- 2012-11-21 for testing nested +# command substitutions with a 2>&1 redirection. +fun() +{ + echo=$(whence -p echo) + foo=` $echo foo` + print -n stdout=$foo + print -u2 stderr=$foo +} +[[ `fun 2>&1` == 'stdout=foostderr=foo' ]] || err_exit 'nested command substitution with 2>&1 not working' + +# Various regression tests from ksh93v- 2012-10-04 and 2012-10-24 +$SHELL > /dev/null -c 'echo $(for x in whatever; do case y in *) true;; esac; done)' || err_exit 'syntax error with case in command substitution' + +print 'print OK' | got=$("$SHELL") +exp=OK +[[ $got == $exp ]] || err_exit '$() command substitution not waiting for process completion' \ + "(expected $(printf %q "$exp"), got $(printf %q "$got"))" + +print 'print OK' | out=$( "$SHELL" 2>&1 ) +got="${out}$?" +exp=OK0 +[[ $got == $exp ]] || err_exit "capturing output from ksh when piped doesn't work correctly" \ + "(expected $(printf %q "$exp"), got $(printf %q "$got"))" + # ====== exit $((Errors<125?Errors:125)) diff --git a/src/cmd/ksh93/tests/substring.sh b/src/cmd/ksh93/tests/substring.sh index 1b64e143b..a040c28e5 100755 --- a/src/cmd/ksh93/tests/substring.sh +++ b/src/cmd/ksh93/tests/substring.sh @@ -306,7 +306,7 @@ done ( PS4=$tmpPS4 -[[ $(string=$string $SHELL -c ": \${string/$pattern/}; print \${.sh.match[26]}") == Z ]] || err_exit -u2 'sh.match[26] not Z' +[[ $(string=$string $SHELL -c ": \${string/$pattern/}; print \${.sh.match[26]}") == Z ]] || err_exit 'sh.match[26] not Z' : ${string/$pattern/} (( ${#.sh.match[@]} == 53 )) || err_exit '.sh.match has wrong number of elements' [[ ${.sh.match[@]:2:4} == 'B C D E' ]] || err_exit '${.sh.match[@]:2:4} incorrect' diff --git a/src/cmd/ksh93/tests/types.sh b/src/cmd/ksh93/tests/types.sh index 4b9bb36fa..3db8be3bb 100755 --- a/src/cmd/ksh93/tests/types.sh +++ b/src/cmd/ksh93/tests/types.sh @@ -621,7 +621,6 @@ function main for ((i=2 ; i < 8 ; i++ )) ; do pawn_t c.board[1][$i] done - } main 2> /dev/null && err_exit 'type assignment to compound array instance should generate an error' @@ -724,5 +723,16 @@ exp=$'start1\ntypeset -x a=one\nstart2\ntypeset -x a=one\nend2\nend1' [[ $got == "$exp" ]] || err_exit 'exporting variable to #!-less script' \ "(expected $(printf %q "$exp"), got $(printf %q "$got"))" +# Backported regression test from ksh93v- 2013-08-07 for +# short integer arrays in types. +got=$("$SHELL" 2>&1 <<- \EOF + typeset -T X_t=(typeset -si -a arr=(7 8) ) + X_t x + print -r -- $((x.arr[1])) +EOF) || err_exit "short integer arrays in types fails (got exit status $?)" +exp=8 +[[ $got == $exp ]] || err_exit "short integer arrays in types isn't working correctly" \ + "(expected $(printf %q "$exp"), got $(printf %q "$got"))" + # ====== exit $((Errors<125?Errors:125)) diff --git a/src/cmd/ksh93/tests/variables.sh b/src/cmd/ksh93/tests/variables.sh index 48f3cd039..0e496a2c3 100755 --- a/src/cmd/ksh93/tests/variables.sh +++ b/src/cmd/ksh93/tests/variables.sh @@ -561,6 +561,10 @@ actual=$* [[ $actual == "$expect" ]] || err_exit "IFS failed with invalid multi-byte character" \ "(expected $(printf %q "$expect"), got $(printf %q "$actual"))" +# Backported test from ksh93v- 2013-06-28 for 'unset IFS' +unset IFS +[[ ${IFS+abc} ]] && err_exit "testing for unset IFS not working" + # ^^^ end: IFS tests ^^^ # restore default split: unset IFS