diff options
Diffstat (limited to 'regress/bin/ksh/obsd-regress.t')
-rw-r--r-- | regress/bin/ksh/obsd-regress.t | 275 |
1 files changed, 275 insertions, 0 deletions
diff --git a/regress/bin/ksh/obsd-regress.t b/regress/bin/ksh/obsd-regress.t new file mode 100644 index 00000000000..e7988f5ca03 --- /dev/null +++ b/regress/bin/ksh/obsd-regress.t @@ -0,0 +1,275 @@ +# $OpenBSD: obsd-regress.t,v 1.1 2013/12/02 20:39:44 millert Exp $ + +# +# ksh regression tests from OpenBSD +# + +name: eval-1 +description: + Tests for ${name#pat} vs. "${name#pat}" expansion +stdin: + a= + for n in ${a#*=}; do echo ${n}; done + for n in "${a#*=}"; do echo ${n}; done +expected-stdout: + +--- + +name: eval-2 +description: + Tests for ${name##pat} vs. "${name##pat}" expansion +stdin: + a= + for n in ${a##*=}; do echo ${n}; done + for n in "${a##*=}"; do echo ${n}; done +expected-stdout: + +--- + +name: eval-3 +description: + Tests for ${name%=pat} vs. "${name%=pat}" expansion +stdin: + a= + for n in ${a%=*}; do echo ${n}; done + for n in "${a%=*}"; do echo ${n}; done +expected-stdout: + +--- + +name: eval-4 +description: + Tests for ${name%%=pat} vs. "${name%%=pat}" expansion +stdin: + a= + for n in ${a%%=*}; do echo ${n}; done + for n in "${a%%=*}"; do echo ${n}; done +expected-stdout: + +--- + +name: and-list-error-1 +description: + Test exit status of rightmost element in 2 element && list in -e mode +stdin: + true && false + echo "should not print" +arguments: !-e! +expected-exit: e != 0 +--- + +name: and-list-error-2 +description: + Test exit status of rightmost element in 3 element && list in -e mode +stdin: + true && true && false + echo "should not print" +arguments: !-e! +expected-exit: e != 0 +--- + +name: or-list-error-1 +description: + Test exit status of || list in -e mode +stdin: + false || false + echo "should not print" +arguments: !-e! +expected-exit: e != 0 +--- + +name: var-functions +description: + Calling + + FOO=bar f + + where f is a ksh style function, should not set FOO in the current env. + If f is a bourne style function, FOO should be set. Furthermore, + the function should receive a correct value of FOO. Additionally, + setting FOO in the function itself should not change the value in + global environment. + + Inspired by PR 2450. +stdin: + function k { + if [ x$FOO != xbar ]; then + echo 1 + return 1 + fi + x=$(env | grep FOO) + if [ "x$x" != "xFOO=bar" ]; then + echo 2 + return 1; + fi + FOO=foo + return 0 + } + b () { + if [ x$FOO != xbar ]; then + echo 3 + return 1 + fi + x=$(env | grep FOO) + if [ "x$x" != "xFOO=bar" ]; then + echo 4 + return 1; + fi + FOO=foo + return 0 + } + FOO=bar k + if [ $? != 0 ]; then + exit 1 + fi + if [ x$FOO != x ]; then + exit 1 + fi + FOO=bar b + if [ $? != 0 ]; then + exit 1 + fi + if [ x$FOO != xbar ]; then + exit 1 + fi + FOO=barbar + FOO=bar k + if [ $? != 0 ]; then + exit 1 + fi + if [ x$FOO != xbarbar ]; then + exit 1 + fi + FOO=bar b + if [ $? != 0 ]; then + exit 1 + fi + if [ x$FOO != xbar ]; then + exit 1 + fi +--- + +name: longline-crash +description: + This used to cause a core dump +stdin: + ulimit -c 0 + deplibs="-lz -lpng /usr/local/lib/libjpeg.la -ltiff -lm -lX11 -lXext /usr/local/lib/libiconv.la -L/usr/local/lib -L/usr/ports/devel/gettext/w-gettext-0.10.40/gettext-0.10.40/intl/.libs /usr/local/lib/libintl.la /usr/local/lib/libglib.la /usr/local/lib/libgmodule.la -lintl -lm -lX11 -lXext -L/usr/X11R6/lib -lglib -lgmodule -L/usr/local/lib /usr/local/lib/libgdk.la -lintl -lm -lX11 -lXext -L/usr/X11R6/lib -lglib -lgmodule -L/usr/local/lib /usr/local/lib/libgtk.la -ltiff -ljpeg -lz -lpng -lm -lX11 -lXext -lintl -lglib -lgmodule -lgdk -lgtk -L/usr/X11R6/lib -lglib -lgmodule -L/usr/local/lib /usr/local/lib/libgdk_pixbuf.la -lz -lpng /usr/local/lib/libiconv.la -L/usr/local/lib -L/usr/ports/devel/gettext/w-gettext-0.10.40/gettext-0.10.40/intl/.libs /usr/local/lib/libintl.la /usr/local/lib/libglib.la -lm -lm /usr/local/lib/libaudiofile.la -lm -lm -laudiofile -L/usr/local/lib /usr/local/lib/libesd.la -lm -lz -L/usr/local/lib /usr/local/lib/libgnomesupport.la -lm -lz -lm -lglib -L/usr/local/lib /usr/local/lib/libgnome.la -lX11 -lXext /usr/local/lib/libiconv.la -L/usr/local/lib -L/usr/ports/devel/gettext/w-gettext-0.10.40/gettext-0.10.40/intl/.libs /usr/local/lib/libintl.la /usr/local/lib/libgmodule.la -lintl -lm -lX11 -lXext -L/usr/X11R6/lib -lglib -lgmodule -L/usr/local/lib /usr/local/lib/libgdk.la -lintl -lm -lX11 -lXext -L/usr/X11R6/lib -lglib -lgmodule -L/usr/local/lib /usr/local/lib/libgtk.la -lICE -lSM -lz -lpng /usr/local/lib/libungif.la /usr/local/lib/libjpeg.la -ltiff -lm -lz -lpng /usr/local/lib/libungif.la -lz /usr/local/lib/libjpeg.la -ltiff -L/usr/local/lib -L/usr/X11R6/lib /usr/local/lib/libgdk_imlib.la -lm -L/usr/local/lib /usr/local/lib/libart_lgpl.la -lm -lz -lm -lX11 -lXext -lintl -lglib -lgmodule -lgdk -lgtk -lICE -lSM -lm -lX11 -lXext -lintl -lglib -lgmodule -lgdk -lgtk -L/usr/X11R6/lib -lm -lz -lpng -lungif -lz -ljpeg -ltiff -ljpeg -lgdk_imlib -lglib -lm -laudiofile -lm -laudiofile -lesd -L/usr/local/lib /usr/local/lib/libgnomeui.la -lz -lz /usr/local/lib/libxml.la -lz -lz -lz /usr/local/lib/libxml.la -lm -lX11 -lXext /usr/local/lib/libiconv.la -L/usr/ports/devel/gettext/w-gettext-0.10.40/gettext-0.10.40/intl/.libs /usr/local/lib/libintl.la /usr/local/lib/libglib.la /usr/local/lib/libgmodule.la -lintl -lglib -lgmodule /usr/local/lib/libgdk.la /usr/local/lib/libgtk.la -L/usr/X11R6/lib -L/usr/local/lib /usr/local/lib/libglade.la -lz -lz -lz /usr/local/lib/libxml.la /usr/local/lib/libglib.la -lm -lm /usr/local/lib/libaudiofile.la -lm -lm -laudiofile /usr/local/lib/libesd.la -lm -lz /usr/local/lib/libgnomesupport.la -lm -lz -lm -lglib /usr/local/lib/libgnome.la -lX11 -lXext /usr/local/lib/libiconv.la -L/usr/ports/devel/gettext/w-gettext-0.10.40/gettext-0.10.40/intl/.libs /usr/local/lib/libintl.la /usr/local/lib/libgmodule.la -lintl -lm -lX11 -lXext -lglib -lgmodule /usr/local/lib/libgdk.la -lintl -lm -lX11 -lXext -lglib -lgmodule /usr/local/lib/libgtk.la -lICE -lSM -lz -lpng /usr/local/lib/libungif.la /usr/local/lib/libjpeg.la -ltiff -lm -lz -lz /usr/local/lib/libgdk_imlib.la /usr/local/lib/libart_lgpl.la -lm -lz -lm -lX11 -lXext -lintl -lglib -lgmodule -lgdk -lgtk -lm -lX11 -lXext -lintl -lglib -lgmodule -lgdk -lgtk -lm -lz -lungif -lz -ljpeg -ljpeg -lgdk_imlib -lglib -lm -laudiofile -lm -laudiofile -lesd /usr/local/lib/libgnomeui.la -L/usr/X11R6/lib -L/usr/local/lib /usr/local/lib/libglade-gnome.la /usr/local/lib/libglib.la -lm -lm /usr/local/lib/libaudiofile.la -lm -lm -laudiofile -L/usr/local/lib /usr/local/lib/libesd.la -lm -lz -L/usr/local/lib /usr/local/lib/libgnomesupport.la -lm -lz -lm -lglib -L/usr/local/lib /usr/local/lib/libgnome.la -lX11 -lXext /usr/local/lib/libiconv.la -L/usr/local/lib -L/usr/ports/devel/gettext/w-gettext-0.10.40/gettext-0.10.40/intl/.libs /usr/local/lib/libintl.la /usr/local/lib/libgmodule.la -lintl -lm -lX11 -lXext -L/usr/X11R6/lib -lglib -lgmodule -L/usr/local/lib /usr/local/lib/libgdk.la -lintl -lm -lX11 -lXext -L/usr/X11R6/lib -lglib -lgmodule -L/usr/local/lib /usr/local/lib/libgtk.la -lICE -lSM -lz -lpng /usr/local/lib/libungif.la /usr/local/lib/libjpeg.la -ltiff -lm -lz -lpng /usr/local/lib/libungif.la -lz /usr/local/lib/libjpeg.la -ltiff -L/usr/local/lib -L/usr/X11R6/lib /usr/local/lib/libgdk_imlib.la -lm -L/usr/local/lib /usr/local/lib/libart_lgpl.la -lm -lz -lm -lX11 -lXext -lintl -lglib -lgmodule -lgdk -lgtk -lICE -lSM -lm -lX11 -lXext -lintl -lglib -lgmodule -lgdk -lgtk -L/usr/X11R6/lib -lm -lz -lpng -lungif -lz -ljpeg -ltiff -ljpeg -lgdk_imlib -lglib -lm -laudiofile -lm -laudiofile -lesd -L/usr/local/lib /usr/local/lib/libgnomeui.la -L/usr/X11R6/lib -L/usr/local/lib" + specialdeplibs="-lgnomeui -lart_lgpl -lgdk_imlib -ltiff -ljpeg -lungif -lpng -lz -lSM -lICE -lgtk -lgdk -lgmodule -lintl -lXext -lX11 -lgnome -lgnomesupport -lesd -laudiofile -lm -lglib" + for deplib in $deplibs; do + case $deplib in + -L*) + new_libs="$deplib $new_libs" + ;; + *) + case " $specialdeplibs " in + *" $deplib "*) + new_libs="$deplib $new_libs";; + esac + ;; + esac + done +--- + +name: seterror-1 +description: + The -e flag should be ignored when executing a compound list + followed by an if statement. +stdin: + if true; then false && false; fi + true +arguments: !-e! +expected-exit: e == 0 +--- + +name: seterror-2 +description: + The -e flag should be ignored when executing a compound list + followed by an if statement. +stdin: + if true; then if true; then false && false; fi; fi + true +arguments: !-e! +expected-exit: e == 0 +--- + +name: seterror-3 +description: + The -e flag should be ignored when executing a compound list + followed by an elif statement. +stdin: + if true; then :; elif true; then false && false; fi +arguments: !-e! +expected-exit: e == 0 +--- + +name: seterror-4 +description: + The -e flag should be ignored when executing a pipeline + beginning with '!' +stdin: + for i in 1 2 3 + do + false && false + true || false + done +arguments: !-e! +expected-exit: e == 0 +--- + +name: seterror-5 +description: + The -e flag should be ignored when executing a pipeline + beginning with '!' +stdin: + ! true | false + true +arguments: !-e! +expected-exit: e == 0 +--- + +name: seterror-6 +description: + When trapping ERR and EXIT, both traps should run in -e mode + when an error occurs. +stdin: + trap 'echo EXIT' EXIT + trap 'echo ERR' ERR + set -e + false + echo DONE + exit 0 +arguments: !-e! +expected-exit: e != 0 +expected-stdout: + ERR + EXIT +--- + +name: seterror-7 +description: + The -e flag within a command substitution should be honored +stdin: + echo $( set -e; false; echo foo ) +arguments: !-e! +expected-stdout: + +--- + +name: input-comsub +description: + A command substitution using input redirection should exit with + failure if the input file does not exist. +stdin: + var=$(< non-existent) +expected-exit: e != 0 +expected-stderr-pattern: /non-existent/ + +--- +name: empty-for-list +description: + A for list which expands to zero items should not execute the body. +stdin: + set foo bar baz ; for out in ; do echo $out ; done + +--- |