From 308a14f85158f1545000499a64bc170d688a0db9 Mon Sep 17 00:00:00 2001 From: June McEnroe Date: Thu, 10 Jan 2019 18:48:02 -0500 Subject: Import /usr/src/bin/sh from FreeBSD 12.0-RELEASE --- bin/cash/tests/parser/Makefile | 89 ++++++++++++++++++++++++++++++++++ bin/cash/tests/parser/alias1.0 | 5 ++ bin/cash/tests/parser/alias10.0 | 9 ++++ bin/cash/tests/parser/alias11.0 | 6 +++ bin/cash/tests/parser/alias12.0 | 6 +++ bin/cash/tests/parser/alias13.0 | 6 +++ bin/cash/tests/parser/alias14.0 | 6 +++ bin/cash/tests/parser/alias15.0 | 12 +++++ bin/cash/tests/parser/alias15.0.stdout | 4 ++ bin/cash/tests/parser/alias16.0 | 7 +++ bin/cash/tests/parser/alias17.0 | 7 +++ bin/cash/tests/parser/alias18.0 | 8 +++ bin/cash/tests/parser/alias2.0 | 6 +++ bin/cash/tests/parser/alias3.0 | 6 +++ bin/cash/tests/parser/alias4.0 | 5 ++ bin/cash/tests/parser/alias5.0 | 5 ++ bin/cash/tests/parser/alias6.0 | 6 +++ bin/cash/tests/parser/alias7.0 | 4 ++ bin/cash/tests/parser/alias8.0 | 4 ++ bin/cash/tests/parser/alias9.0 | 6 +++ bin/cash/tests/parser/and-pipe-not.0 | 2 + bin/cash/tests/parser/case1.0 | 14 ++++++ bin/cash/tests/parser/case2.0 | 32 ++++++++++++ bin/cash/tests/parser/comment1.0 | 3 ++ bin/cash/tests/parser/comment2.42 | 4 ++ bin/cash/tests/parser/dollar-quote1.0 | 12 +++++ bin/cash/tests/parser/dollar-quote10.0 | 10 ++++ bin/cash/tests/parser/dollar-quote11.0 | 8 +++ bin/cash/tests/parser/dollar-quote12.0 | 7 +++ bin/cash/tests/parser/dollar-quote13.0 | 8 +++ bin/cash/tests/parser/dollar-quote2.0 | 5 ++ bin/cash/tests/parser/dollar-quote3.0 | 22 +++++++++ bin/cash/tests/parser/dollar-quote4.0 | 19 ++++++++ bin/cash/tests/parser/dollar-quote5.0 | 12 +++++ bin/cash/tests/parser/dollar-quote6.0 | 5 ++ bin/cash/tests/parser/dollar-quote7.0 | 6 +++ bin/cash/tests/parser/dollar-quote8.0 | 11 +++++ bin/cash/tests/parser/dollar-quote9.0 | 8 +++ bin/cash/tests/parser/empty-braces1.0 | 7 +++ bin/cash/tests/parser/empty-cmd1.0 | 3 ++ bin/cash/tests/parser/for1.0 | 29 +++++++++++ bin/cash/tests/parser/for2.0 | 15 ++++++ bin/cash/tests/parser/func1.0 | 25 ++++++++++ bin/cash/tests/parser/func2.0 | 6 +++ bin/cash/tests/parser/func3.0 | 6 +++ bin/cash/tests/parser/heredoc1.0 | 85 ++++++++++++++++++++++++++++++++ bin/cash/tests/parser/heredoc10.0 | 49 +++++++++++++++++++ bin/cash/tests/parser/heredoc11.0 | 26 ++++++++++ bin/cash/tests/parser/heredoc12.0 | 47 ++++++++++++++++++ bin/cash/tests/parser/heredoc13.0 | 21 ++++++++ bin/cash/tests/parser/heredoc2.0 | 39 +++++++++++++++ bin/cash/tests/parser/heredoc3.0 | 7 +++ bin/cash/tests/parser/heredoc4.0 | 44 +++++++++++++++++ bin/cash/tests/parser/heredoc5.0 | 56 +++++++++++++++++++++ bin/cash/tests/parser/heredoc6.0 | 5 ++ bin/cash/tests/parser/heredoc7.0 | 19 ++++++++ bin/cash/tests/parser/heredoc8.0 | 20 ++++++++ bin/cash/tests/parser/heredoc9.0 | 58 ++++++++++++++++++++++ bin/cash/tests/parser/line-cont1.0 | 16 ++++++ bin/cash/tests/parser/line-cont10.0 | 18 +++++++ bin/cash/tests/parser/line-cont11.0 | 23 +++++++++ bin/cash/tests/parser/line-cont12.0 | 5 ++ bin/cash/tests/parser/line-cont2.0 | 4 ++ bin/cash/tests/parser/line-cont3.0 | 7 +++ bin/cash/tests/parser/line-cont4.0 | 8 +++ bin/cash/tests/parser/line-cont5.0 | 14 ++++++ bin/cash/tests/parser/line-cont6.0 | 23 +++++++++ bin/cash/tests/parser/line-cont7.0 | 7 +++ bin/cash/tests/parser/line-cont8.0 | 6 +++ bin/cash/tests/parser/line-cont9.0 | 6 +++ bin/cash/tests/parser/no-space1.0 | 18 +++++++ bin/cash/tests/parser/no-space2.0 | 7 +++ bin/cash/tests/parser/nul1.0 | 12 +++++ bin/cash/tests/parser/only-redir1.0 | 3 ++ bin/cash/tests/parser/only-redir2.0 | 2 + bin/cash/tests/parser/only-redir3.0 | 2 + bin/cash/tests/parser/only-redir4.0 | 2 + bin/cash/tests/parser/pipe-not1.0 | 3 ++ bin/cash/tests/parser/set-v1.0 | 8 +++ bin/cash/tests/parser/set-v1.0.stderr | 5 ++ bin/cash/tests/parser/var-assign1.0 | 19 ++++++++ 81 files changed, 1180 insertions(+) create mode 100644 bin/cash/tests/parser/Makefile create mode 100644 bin/cash/tests/parser/alias1.0 create mode 100644 bin/cash/tests/parser/alias10.0 create mode 100644 bin/cash/tests/parser/alias11.0 create mode 100644 bin/cash/tests/parser/alias12.0 create mode 100644 bin/cash/tests/parser/alias13.0 create mode 100644 bin/cash/tests/parser/alias14.0 create mode 100644 bin/cash/tests/parser/alias15.0 create mode 100644 bin/cash/tests/parser/alias15.0.stdout create mode 100644 bin/cash/tests/parser/alias16.0 create mode 100644 bin/cash/tests/parser/alias17.0 create mode 100644 bin/cash/tests/parser/alias18.0 create mode 100644 bin/cash/tests/parser/alias2.0 create mode 100644 bin/cash/tests/parser/alias3.0 create mode 100644 bin/cash/tests/parser/alias4.0 create mode 100644 bin/cash/tests/parser/alias5.0 create mode 100644 bin/cash/tests/parser/alias6.0 create mode 100644 bin/cash/tests/parser/alias7.0 create mode 100644 bin/cash/tests/parser/alias8.0 create mode 100644 bin/cash/tests/parser/alias9.0 create mode 100644 bin/cash/tests/parser/and-pipe-not.0 create mode 100644 bin/cash/tests/parser/case1.0 create mode 100644 bin/cash/tests/parser/case2.0 create mode 100644 bin/cash/tests/parser/comment1.0 create mode 100644 bin/cash/tests/parser/comment2.42 create mode 100644 bin/cash/tests/parser/dollar-quote1.0 create mode 100644 bin/cash/tests/parser/dollar-quote10.0 create mode 100644 bin/cash/tests/parser/dollar-quote11.0 create mode 100644 bin/cash/tests/parser/dollar-quote12.0 create mode 100644 bin/cash/tests/parser/dollar-quote13.0 create mode 100644 bin/cash/tests/parser/dollar-quote2.0 create mode 100644 bin/cash/tests/parser/dollar-quote3.0 create mode 100644 bin/cash/tests/parser/dollar-quote4.0 create mode 100644 bin/cash/tests/parser/dollar-quote5.0 create mode 100644 bin/cash/tests/parser/dollar-quote6.0 create mode 100644 bin/cash/tests/parser/dollar-quote7.0 create mode 100644 bin/cash/tests/parser/dollar-quote8.0 create mode 100644 bin/cash/tests/parser/dollar-quote9.0 create mode 100644 bin/cash/tests/parser/empty-braces1.0 create mode 100644 bin/cash/tests/parser/empty-cmd1.0 create mode 100644 bin/cash/tests/parser/for1.0 create mode 100644 bin/cash/tests/parser/for2.0 create mode 100644 bin/cash/tests/parser/func1.0 create mode 100644 bin/cash/tests/parser/func2.0 create mode 100644 bin/cash/tests/parser/func3.0 create mode 100644 bin/cash/tests/parser/heredoc1.0 create mode 100644 bin/cash/tests/parser/heredoc10.0 create mode 100644 bin/cash/tests/parser/heredoc11.0 create mode 100644 bin/cash/tests/parser/heredoc12.0 create mode 100644 bin/cash/tests/parser/heredoc13.0 create mode 100644 bin/cash/tests/parser/heredoc2.0 create mode 100644 bin/cash/tests/parser/heredoc3.0 create mode 100644 bin/cash/tests/parser/heredoc4.0 create mode 100644 bin/cash/tests/parser/heredoc5.0 create mode 100644 bin/cash/tests/parser/heredoc6.0 create mode 100644 bin/cash/tests/parser/heredoc7.0 create mode 100644 bin/cash/tests/parser/heredoc8.0 create mode 100644 bin/cash/tests/parser/heredoc9.0 create mode 100644 bin/cash/tests/parser/line-cont1.0 create mode 100644 bin/cash/tests/parser/line-cont10.0 create mode 100644 bin/cash/tests/parser/line-cont11.0 create mode 100644 bin/cash/tests/parser/line-cont12.0 create mode 100644 bin/cash/tests/parser/line-cont2.0 create mode 100644 bin/cash/tests/parser/line-cont3.0 create mode 100644 bin/cash/tests/parser/line-cont4.0 create mode 100644 bin/cash/tests/parser/line-cont5.0 create mode 100644 bin/cash/tests/parser/line-cont6.0 create mode 100644 bin/cash/tests/parser/line-cont7.0 create mode 100644 bin/cash/tests/parser/line-cont8.0 create mode 100644 bin/cash/tests/parser/line-cont9.0 create mode 100644 bin/cash/tests/parser/no-space1.0 create mode 100644 bin/cash/tests/parser/no-space2.0 create mode 100644 bin/cash/tests/parser/nul1.0 create mode 100644 bin/cash/tests/parser/only-redir1.0 create mode 100644 bin/cash/tests/parser/only-redir2.0 create mode 100644 bin/cash/tests/parser/only-redir3.0 create mode 100644 bin/cash/tests/parser/only-redir4.0 create mode 100644 bin/cash/tests/parser/pipe-not1.0 create mode 100644 bin/cash/tests/parser/set-v1.0 create mode 100644 bin/cash/tests/parser/set-v1.0.stderr create mode 100644 bin/cash/tests/parser/var-assign1.0 (limited to 'bin/cash/tests/parser') diff --git a/bin/cash/tests/parser/Makefile b/bin/cash/tests/parser/Makefile new file mode 100644 index 00000000..97c5d5a9 --- /dev/null +++ b/bin/cash/tests/parser/Makefile @@ -0,0 +1,89 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/Makefile 333507 2018-05-11 21:56:01Z jilles $ + +PACKAGE= tests + +TESTSDIR= ${TESTSBASE}/bin/sh/${.CURDIR:T} + +.PATH: ${.CURDIR:H} +ATF_TESTS_SH= functional_test + +${PACKAGE}FILES+= alias1.0 +${PACKAGE}FILES+= alias2.0 +${PACKAGE}FILES+= alias3.0 +${PACKAGE}FILES+= alias4.0 +${PACKAGE}FILES+= alias5.0 +${PACKAGE}FILES+= alias6.0 +${PACKAGE}FILES+= alias7.0 +${PACKAGE}FILES+= alias8.0 +${PACKAGE}FILES+= alias9.0 +${PACKAGE}FILES+= alias10.0 +${PACKAGE}FILES+= alias11.0 +${PACKAGE}FILES+= alias12.0 +${PACKAGE}FILES+= alias13.0 +${PACKAGE}FILES+= alias14.0 +${PACKAGE}FILES+= alias15.0 alias15.0.stdout +${PACKAGE}FILES+= alias16.0 +${PACKAGE}FILES+= alias17.0 +${PACKAGE}FILES+= alias18.0 +${PACKAGE}FILES+= and-pipe-not.0 +${PACKAGE}FILES+= case1.0 +${PACKAGE}FILES+= case2.0 +${PACKAGE}FILES+= comment1.0 +${PACKAGE}FILES+= comment2.42 +${PACKAGE}FILES+= dollar-quote1.0 +${PACKAGE}FILES+= dollar-quote2.0 +${PACKAGE}FILES+= dollar-quote3.0 +${PACKAGE}FILES+= dollar-quote4.0 +${PACKAGE}FILES+= dollar-quote5.0 +${PACKAGE}FILES+= dollar-quote6.0 +${PACKAGE}FILES+= dollar-quote7.0 +${PACKAGE}FILES+= dollar-quote8.0 +${PACKAGE}FILES+= dollar-quote9.0 +${PACKAGE}FILES+= dollar-quote10.0 +${PACKAGE}FILES+= dollar-quote11.0 +${PACKAGE}FILES+= dollar-quote12.0 +${PACKAGE}FILES+= dollar-quote13.0 +${PACKAGE}FILES+= empty-braces1.0 +${PACKAGE}FILES+= empty-cmd1.0 +${PACKAGE}FILES+= for1.0 +${PACKAGE}FILES+= for2.0 +${PACKAGE}FILES+= func1.0 +${PACKAGE}FILES+= func2.0 +${PACKAGE}FILES+= func3.0 +${PACKAGE}FILES+= heredoc1.0 +${PACKAGE}FILES+= heredoc2.0 +${PACKAGE}FILES+= heredoc3.0 +${PACKAGE}FILES+= heredoc4.0 +${PACKAGE}FILES+= heredoc5.0 +${PACKAGE}FILES+= heredoc6.0 +${PACKAGE}FILES+= heredoc7.0 +${PACKAGE}FILES+= heredoc8.0 +${PACKAGE}FILES+= heredoc9.0 +${PACKAGE}FILES+= heredoc10.0 +${PACKAGE}FILES+= heredoc11.0 +${PACKAGE}FILES+= heredoc12.0 +${PACKAGE}FILES+= heredoc13.0 +${PACKAGE}FILES+= line-cont1.0 +${PACKAGE}FILES+= line-cont2.0 +${PACKAGE}FILES+= line-cont3.0 +${PACKAGE}FILES+= line-cont4.0 +${PACKAGE}FILES+= line-cont5.0 +${PACKAGE}FILES+= line-cont6.0 +${PACKAGE}FILES+= line-cont7.0 +${PACKAGE}FILES+= line-cont8.0 +${PACKAGE}FILES+= line-cont9.0 +${PACKAGE}FILES+= line-cont10.0 +${PACKAGE}FILES+= line-cont11.0 +${PACKAGE}FILES+= line-cont12.0 +${PACKAGE}FILES+= no-space1.0 +${PACKAGE}FILES+= no-space2.0 +${PACKAGE}FILES+= nul1.0 +${PACKAGE}FILES+= only-redir1.0 +${PACKAGE}FILES+= only-redir2.0 +${PACKAGE}FILES+= only-redir3.0 +${PACKAGE}FILES+= only-redir4.0 +${PACKAGE}FILES+= pipe-not1.0 +${PACKAGE}FILES+= set-v1.0 set-v1.0.stderr +${PACKAGE}FILES+= var-assign1.0 + +.include diff --git a/bin/cash/tests/parser/alias1.0 b/bin/cash/tests/parser/alias1.0 new file mode 100644 index 00000000..8336157a --- /dev/null +++ b/bin/cash/tests/parser/alias1.0 @@ -0,0 +1,5 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/alias1.0 214280 2010-10-24 16:55:17Z jilles $ + +alias alias0=exit +eval 'alias0 0' +exit 1 diff --git a/bin/cash/tests/parser/alias10.0 b/bin/cash/tests/parser/alias10.0 new file mode 100644 index 00000000..48fb6e01 --- /dev/null +++ b/bin/cash/tests/parser/alias10.0 @@ -0,0 +1,9 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/alias10.0 243252 2012-11-18 23:15:22Z jilles $ + +# This test may start consuming memory indefinitely if it fails. +ulimit -t 5 2>/dev/null +ulimit -v 100000 2>/dev/null + +alias echo='echo' +alias echo='echo' +[ "`eval echo b`" = b ] diff --git a/bin/cash/tests/parser/alias11.0 b/bin/cash/tests/parser/alias11.0 new file mode 100644 index 00000000..a282e41b --- /dev/null +++ b/bin/cash/tests/parser/alias11.0 @@ -0,0 +1,6 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/alias11.0 261141 2014-01-24 23:00:35Z jilles $ + +alias alias0=alias1 +alias alias1=exit +eval 'alias0 0' +exit 3 diff --git a/bin/cash/tests/parser/alias12.0 b/bin/cash/tests/parser/alias12.0 new file mode 100644 index 00000000..0388261c --- /dev/null +++ b/bin/cash/tests/parser/alias12.0 @@ -0,0 +1,6 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/alias12.0 261160 2014-01-25 14:59:08Z jilles $ + +unalias -a +alias alias0=command +alias true='echo bad' +eval 'alias0 true' diff --git a/bin/cash/tests/parser/alias13.0 b/bin/cash/tests/parser/alias13.0 new file mode 100644 index 00000000..4c10555a --- /dev/null +++ b/bin/cash/tests/parser/alias13.0 @@ -0,0 +1,6 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/alias13.0 261160 2014-01-25 14:59:08Z jilles $ + +unalias -a +alias command=command +alias true='echo bad' +eval 'command true' diff --git a/bin/cash/tests/parser/alias14.0 b/bin/cash/tests/parser/alias14.0 new file mode 100644 index 00000000..e9d48e0e --- /dev/null +++ b/bin/cash/tests/parser/alias14.0 @@ -0,0 +1,6 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/alias14.0 261192 2014-01-26 21:19:33Z jilles $ + +alias command='command ' +alias alias0=exit +eval 'command alias0 0' +exit 3 diff --git a/bin/cash/tests/parser/alias15.0 b/bin/cash/tests/parser/alias15.0 new file mode 100644 index 00000000..ae7af187 --- /dev/null +++ b/bin/cash/tests/parser/alias15.0 @@ -0,0 +1,12 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/alias15.0 261192 2014-01-26 21:19:33Z jilles $ + +f_echoanddo() { + printf '%s\n' "$*" + "$@" +} + +alias echoanddo='f_echoanddo ' +alias alias0='echo test2' +eval 'echoanddo echo test1' +eval 'echoanddo alias0' +exit 0 diff --git a/bin/cash/tests/parser/alias15.0.stdout b/bin/cash/tests/parser/alias15.0.stdout new file mode 100644 index 00000000..6dd179c0 --- /dev/null +++ b/bin/cash/tests/parser/alias15.0.stdout @@ -0,0 +1,4 @@ +echo test1 +test1 +echo test2 +test2 diff --git a/bin/cash/tests/parser/alias16.0 b/bin/cash/tests/parser/alias16.0 new file mode 100644 index 00000000..eb3835c6 --- /dev/null +++ b/bin/cash/tests/parser/alias16.0 @@ -0,0 +1,7 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/alias16.0 316646 2017-04-08 21:57:59Z jilles $ + +v=1 +alias a='unalias a +v=2' +eval a +[ "$v" = 2 ] diff --git a/bin/cash/tests/parser/alias17.0 b/bin/cash/tests/parser/alias17.0 new file mode 100644 index 00000000..b5a32c56 --- /dev/null +++ b/bin/cash/tests/parser/alias17.0 @@ -0,0 +1,7 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/alias17.0 317037 2017-04-16 21:42:43Z jilles $ + +v=1 +alias a='unalias -a +v=2' +eval a +[ "$v" = 2 ] diff --git a/bin/cash/tests/parser/alias18.0 b/bin/cash/tests/parser/alias18.0 new file mode 100644 index 00000000..48e54029 --- /dev/null +++ b/bin/cash/tests/parser/alias18.0 @@ -0,0 +1,8 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/alias18.0 317039 2017-04-16 22:10:02Z jilles $ + +v=1 +alias a='alias a=v=2 +v=3 +a' +eval a +[ "$v" = 2 ] diff --git a/bin/cash/tests/parser/alias2.0 b/bin/cash/tests/parser/alias2.0 new file mode 100644 index 00000000..5cedc261 --- /dev/null +++ b/bin/cash/tests/parser/alias2.0 @@ -0,0 +1,6 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/alias2.0 214280 2010-10-24 16:55:17Z jilles $ + +alias alias0=exit +x=alias0 +eval 'case $x in alias0) exit 0;; esac' +exit 1 diff --git a/bin/cash/tests/parser/alias3.0 b/bin/cash/tests/parser/alias3.0 new file mode 100644 index 00000000..cf737545 --- /dev/null +++ b/bin/cash/tests/parser/alias3.0 @@ -0,0 +1,6 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/alias3.0 214709 2010-11-02 23:44:29Z jilles $ + +alias alias0=exit +x=alias0 +eval 'case $x in "alias0") alias0 0;; esac' +exit 1 diff --git a/bin/cash/tests/parser/alias4.0 b/bin/cash/tests/parser/alias4.0 new file mode 100644 index 00000000..fa018060 --- /dev/null +++ b/bin/cash/tests/parser/alias4.0 @@ -0,0 +1,5 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/alias4.0 222165 2011-05-21 22:03:06Z jilles $ + +alias alias0=exit +eval 'x=1 alias0 0' +exit 1 diff --git a/bin/cash/tests/parser/alias5.0 b/bin/cash/tests/parser/alias5.0 new file mode 100644 index 00000000..25257456 --- /dev/null +++ b/bin/cash/tests/parser/alias5.0 @@ -0,0 +1,5 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/alias5.0 222165 2011-05-21 22:03:06Z jilles $ + +alias alias0=exit +eval '&2 ;; + esac) +} +f1 +f2() { + x=$(case x in + (x|esac) ;; + (*) echo bad >&2 + esac) +} +f2 +f3() { + x=$(case x in + x|esac) ;; + *) echo bad >&2 ;; + esac) +} +f3 +f4() { + x=$(case x in + x|esac) ;; + *) echo bad >&2 + esac) +} +f4 diff --git a/bin/cash/tests/parser/comment1.0 b/bin/cash/tests/parser/comment1.0 new file mode 100644 index 00000000..002ae8d1 --- /dev/null +++ b/bin/cash/tests/parser/comment1.0 @@ -0,0 +1,3 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/comment1.0 295818 2016-02-19 16:56:07Z jilles $ + +${SH} -c '#' diff --git a/bin/cash/tests/parser/comment2.42 b/bin/cash/tests/parser/comment2.42 new file mode 100644 index 00000000..37ac2f62 --- /dev/null +++ b/bin/cash/tests/parser/comment2.42 @@ -0,0 +1,4 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/comment2.42 295818 2016-02-19 16:56:07Z jilles $ + +${SH} -c '# +exit 42' diff --git a/bin/cash/tests/parser/dollar-quote1.0 b/bin/cash/tests/parser/dollar-quote1.0 new file mode 100644 index 00000000..12061417 --- /dev/null +++ b/bin/cash/tests/parser/dollar-quote1.0 @@ -0,0 +1,12 @@ +# $FreeBSD$ + +set -e + +[ $'hi' = hi ] +[ $'hi +there' = 'hi +there' ] +[ $'\"\'\\\a\b\f\t\v' = "\"'\\$(printf "\a\b\f\t\v")" ] +[ $'hi\nthere' = 'hi +there' ] +[ $'a\rb' = "$(printf "a\rb")" ] diff --git a/bin/cash/tests/parser/dollar-quote10.0 b/bin/cash/tests/parser/dollar-quote10.0 new file mode 100644 index 00000000..44fa741d --- /dev/null +++ b/bin/cash/tests/parser/dollar-quote10.0 @@ -0,0 +1,10 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/dollar-quote10.0 221669 2011-05-08 17:40:10Z jilles $ + +# a umlaut +s=$(printf '\303\244') +# euro sign +s=$s$(printf '\342\202\254') + +# Start a new shell so the locale change is picked up. +ss="$(LC_ALL=en_US.UTF-8 ${SH} -c "printf %s \$'\u00e4\u20ac'")" +[ "$s" = "$ss" ] diff --git a/bin/cash/tests/parser/dollar-quote11.0 b/bin/cash/tests/parser/dollar-quote11.0 new file mode 100644 index 00000000..9350515a --- /dev/null +++ b/bin/cash/tests/parser/dollar-quote11.0 @@ -0,0 +1,8 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/dollar-quote11.0 221669 2011-05-08 17:40:10Z jilles $ + +# some sort of 't' outside BMP +s=$s$(printf '\360\235\225\245') + +# Start a new shell so the locale change is picked up. +ss="$(LC_ALL=en_US.UTF-8 ${SH} -c "printf %s \$'\U0001d565'")" +[ "$s" = "$ss" ] diff --git a/bin/cash/tests/parser/dollar-quote12.0 b/bin/cash/tests/parser/dollar-quote12.0 new file mode 100644 index 00000000..844c5664 --- /dev/null +++ b/bin/cash/tests/parser/dollar-quote12.0 @@ -0,0 +1,7 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/dollar-quote12.0 286971 2015-08-20 21:31:36Z jilles $ + +# \u without any digits at all remains invalid. +# Our choice is a parse error. + +v=$( (eval ": \$'\u'") 2>&1 >/dev/null) +[ $? -ne 0 ] && [ -n "$v" ] diff --git a/bin/cash/tests/parser/dollar-quote13.0 b/bin/cash/tests/parser/dollar-quote13.0 new file mode 100644 index 00000000..b13383c8 --- /dev/null +++ b/bin/cash/tests/parser/dollar-quote13.0 @@ -0,0 +1,8 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/dollar-quote13.0 286973 2015-08-20 22:05:55Z jilles $ + +# This Unicode escape sequence that has never been in range should either +# fail to expand or expand to a fallback. + +c=$(eval printf %s \$\'\\Uffffff41\' 2>/dev/null) +r=$(($? != 0)) +[ "$r.$c" = '1.' ] || [ "$r.$c" = '0.?' ] || [ "$r.$c" = $'0.\u2222' ] diff --git a/bin/cash/tests/parser/dollar-quote2.0 b/bin/cash/tests/parser/dollar-quote2.0 new file mode 100644 index 00000000..4617ed8d --- /dev/null +++ b/bin/cash/tests/parser/dollar-quote2.0 @@ -0,0 +1,5 @@ +# $FreeBSD$ + +# This depends on the ASCII character set. + +[ $'\e' = "$(printf "\033")" ] diff --git a/bin/cash/tests/parser/dollar-quote3.0 b/bin/cash/tests/parser/dollar-quote3.0 new file mode 100644 index 00000000..a7e68527 --- /dev/null +++ b/bin/cash/tests/parser/dollar-quote3.0 @@ -0,0 +1,22 @@ +# $FreeBSD$ + +unset LC_ALL +LC_CTYPE=en_US.ISO8859-1 +export LC_CTYPE + +e= +for i in 0 1 2 3; do + for j in 0 1 2 3 4 5 6 7; do + for k in 0 1 2 3 4 5 6 7; do + case $i$j$k in + 000) continue ;; + esac + e="$e\\$i$j$k" + done + done +done +ee=`printf "$e"` +[ "${#ee}" = 255 ] || echo length bad + +# Start a new shell so the locale change is picked up. +[ "$(${SH} -c "printf %s \$'$e'")" = "$ee" ] diff --git a/bin/cash/tests/parser/dollar-quote4.0 b/bin/cash/tests/parser/dollar-quote4.0 new file mode 100644 index 00000000..f620af5b --- /dev/null +++ b/bin/cash/tests/parser/dollar-quote4.0 @@ -0,0 +1,19 @@ +# $FreeBSD$ + +unset LC_ALL +LC_CTYPE=en_US.ISO8859-1 +export LC_CTYPE + +e= +for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do + for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do + case $i$j in + 00) continue ;; + esac + e="$e\x$i$j" + done +done + +# Start a new shell so the locale change is picked up. +ee="$(${SH} -c "printf %s \$'$e'")" +[ "${#ee}" = 255 ] || echo length bad diff --git a/bin/cash/tests/parser/dollar-quote5.0 b/bin/cash/tests/parser/dollar-quote5.0 new file mode 100644 index 00000000..c2c44ca6 --- /dev/null +++ b/bin/cash/tests/parser/dollar-quote5.0 @@ -0,0 +1,12 @@ +# $FreeBSD$ + +# This depends on the ASCII character set. + +set -e + +[ $'\ca\cb\cc\cd\ce\cf\cg\ch\ci\cj\ck\cl\cm\cn\co\cp\cq\cr\cs\ct\cu\cv\cw\cx\cy\cz' = $'\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032' ] +[ $'\cA\cB\cC\cD\cE\cF\cG\cH\cI\cJ\cK\cL\cM\cN\cO\cP\cQ\cR\cS\cT\cU\cV\cW\cX\cY\cZ' = $'\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032' ] +[ $'\c[' = $'\033' ] +[ $'\c]' = $'\035' ] +[ $'\c^' = $'\036' ] +[ $'\c_' = $'\037' ] diff --git a/bin/cash/tests/parser/dollar-quote6.0 b/bin/cash/tests/parser/dollar-quote6.0 new file mode 100644 index 00000000..a4b1e3f4 --- /dev/null +++ b/bin/cash/tests/parser/dollar-quote6.0 @@ -0,0 +1,5 @@ +# $FreeBSD$ + +# This depends on the ASCII character set. + +[ $'\c\\' = $'\034' ] diff --git a/bin/cash/tests/parser/dollar-quote7.0 b/bin/cash/tests/parser/dollar-quote7.0 new file mode 100644 index 00000000..c866b1af --- /dev/null +++ b/bin/cash/tests/parser/dollar-quote7.0 @@ -0,0 +1,6 @@ +# $FreeBSD$ + +set -e + +[ $'\u0024\u0040\u0060' = '$@`' ] +[ $'\U00000024\U00000040\U00000060' = '$@`' ] diff --git a/bin/cash/tests/parser/dollar-quote8.0 b/bin/cash/tests/parser/dollar-quote8.0 new file mode 100644 index 00000000..8f0b41a0 --- /dev/null +++ b/bin/cash/tests/parser/dollar-quote8.0 @@ -0,0 +1,11 @@ +# $FreeBSD$ + +[ $'hello\0' = hello ] +[ $'hello\0world' = hello ] +[ $'hello\0'$'world' = helloworld ] +[ $'hello\000' = hello ] +[ $'hello\000world' = hello ] +[ $'hello\000'$'world' = helloworld ] +[ $'hello\x00' = hello ] +[ $'hello\x00world' = hello ] +[ $'hello\x00'$'world' = helloworld ] diff --git a/bin/cash/tests/parser/dollar-quote9.0 b/bin/cash/tests/parser/dollar-quote9.0 new file mode 100644 index 00000000..df64b7df --- /dev/null +++ b/bin/cash/tests/parser/dollar-quote9.0 @@ -0,0 +1,8 @@ +# $FreeBSD$ + +# POSIX and C99 say D800-DFFF are undefined in a universal character name. +# We reject this but many other shells expand to something that looks like +# CESU-8. + +v=$( (eval ": \$'\uD800'") 2>&1 >/dev/null) +[ $? -ne 0 ] && [ -n "$v" ] diff --git a/bin/cash/tests/parser/empty-braces1.0 b/bin/cash/tests/parser/empty-braces1.0 new file mode 100644 index 00000000..325f16b8 --- /dev/null +++ b/bin/cash/tests/parser/empty-braces1.0 @@ -0,0 +1,7 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/empty-braces1.0 245382 2013-01-13 19:26:33Z jilles $ + +# Unfortunately, some scripts depend on the extension of allowing an empty +# pair of braces. + +{ } & +wait $! diff --git a/bin/cash/tests/parser/empty-cmd1.0 b/bin/cash/tests/parser/empty-cmd1.0 new file mode 100644 index 00000000..983837fc --- /dev/null +++ b/bin/cash/tests/parser/empty-cmd1.0 @@ -0,0 +1,3 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/empty-cmd1.0 254843 2013-08-25 10:57:48Z jilles $ + +! (eval ': || f()') 2>/dev/null diff --git a/bin/cash/tests/parser/for1.0 b/bin/cash/tests/parser/for1.0 new file mode 100644 index 00000000..c2fc8975 --- /dev/null +++ b/bin/cash/tests/parser/for1.0 @@ -0,0 +1,29 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/for1.0 218889 2011-02-20 14:18:58Z jilles $ + +nl=' +' +list=' a b c' +for s1 in "$nl" " "; do + for s2 in "$nl" ";" ";$nl"; do + for s3 in "$nl" " "; do + r='' + eval "for i${s1}in ${list}${s2}do${s3}r=\"\$r \$i\"; done" + [ "$r" = "$list" ] || exit 1 + done + done +done +set -- $list +for s2 in "$nl" " "; do + for s3 in "$nl" " "; do + r='' + eval "for i${s2}do${s3}r=\"\$r \$i\"; done" + [ "$r" = "$list" ] || exit 1 + done +done +for s1 in "$nl" " "; do + for s2 in "$nl" ";" ";$nl"; do + for s3 in "$nl" " "; do + eval "for i${s1}in${s2}do${s3}exit 1; done" + done + done +done diff --git a/bin/cash/tests/parser/for2.0 b/bin/cash/tests/parser/for2.0 new file mode 100644 index 00000000..475490dc --- /dev/null +++ b/bin/cash/tests/parser/for2.0 @@ -0,0 +1,15 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/for2.0 218889 2011-02-20 14:18:58Z jilles $ + +# Common extensions to the 'for' syntax. + +nl=' +' +list=' a b c' +set -- $list +for s2 in ";" ";$nl"; do + for s3 in "$nl" " "; do + r='' + eval "for i${s2}do${s3}r=\"\$r \$i\"; done" + [ "$r" = "$list" ] || exit 1 + done +done diff --git a/bin/cash/tests/parser/func1.0 b/bin/cash/tests/parser/func1.0 new file mode 100644 index 00000000..dac9cd9c --- /dev/null +++ b/bin/cash/tests/parser/func1.0 @@ -0,0 +1,25 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/func1.0 214291 2010-10-24 20:45:13Z jilles $ +# POSIX does not require these bytes to work in function names, +# but making them all work seems a good goal. + +failures=0 +unset LC_ALL +export LC_CTYPE=en_US.ISO8859-1 +i=128 +set -f +while [ "$i" -le 255 ]; do + c=$(printf \\"$(printf %o "$i")") + ok=0 + eval "$c() { ok=1; }" + $c + ok1=$ok + ok=0 + "$c" + if [ "$ok" != 1 ] || [ "$ok1" != 1 ]; then + echo "Bad results for character $i" >&2 + : $((failures += 1)) + fi + unset -f $c + i=$((i+1)) +done +exit $((failures > 0)) diff --git a/bin/cash/tests/parser/func2.0 b/bin/cash/tests/parser/func2.0 new file mode 100644 index 00000000..93f29b2d --- /dev/null +++ b/bin/cash/tests/parser/func2.0 @@ -0,0 +1,6 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/func2.0 222512 2011-05-30 21:49:59Z jilles $ + +f() { return 42; } +f() { return 3; } & +f +[ $? -eq 42 ] diff --git a/bin/cash/tests/parser/func3.0 b/bin/cash/tests/parser/func3.0 new file mode 100644 index 00000000..1a73e21b --- /dev/null +++ b/bin/cash/tests/parser/func3.0 @@ -0,0 +1,6 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/func3.0 222512 2011-05-30 21:49:59Z jilles $ + +name=/var/empty/nosuch +f() { true; } <$name +name=/dev/null +f diff --git a/bin/cash/tests/parser/heredoc1.0 b/bin/cash/tests/parser/heredoc1.0 new file mode 100644 index 00000000..918614bf --- /dev/null +++ b/bin/cash/tests/parser/heredoc1.0 @@ -0,0 +1,85 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/heredoc1.0 204836 2010-03-07 15:08:42Z jilles $ + +failures=0 + +check() { + if ! eval "[ $* ]"; then + echo "Failed: $*" + : $((failures += 1)) + fi +} + +check '"$(cat </dev/null; command eval : hi \${r:=0} +exit ${r:-3} diff --git a/bin/cash/tests/parser/heredoc7.0 b/bin/cash/tests/parser/heredoc7.0 new file mode 100644 index 00000000..99a8b8c8 --- /dev/null +++ b/bin/cash/tests/parser/heredoc7.0 @@ -0,0 +1,19 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/heredoc7.0 210488 2010-07-25 22:25:52Z jilles $ + +# Some of these created malformed parse trees with null pointers for here +# documents, causing the here document writing process to segfault. +eval ': <"$T" +. "$T" +if [ "${#v}" != 4096 ]; then + echo "Length is bad (${#v})" + exit 3 +fi +case $v in +*[!A]*) echo "Content is bad"; exit 3 ;; +esac diff --git a/bin/cash/tests/parser/line-cont12.0 b/bin/cash/tests/parser/line-cont12.0 new file mode 100644 index 00000000..cd456221 --- /dev/null +++ b/bin/cash/tests/parser/line-cont12.0 @@ -0,0 +1,5 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/line-cont12.0 333507 2018-05-11 21:56:01Z jilles $ + +[ '\ +' = "\\ +" ] diff --git a/bin/cash/tests/parser/line-cont2.0 b/bin/cash/tests/parser/line-cont2.0 new file mode 100644 index 00000000..7a21bcba --- /dev/null +++ b/bin/cash/tests/parser/line-cont2.0 @@ -0,0 +1,4 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/line-cont2.0 273243 2014-10-17 21:52:57Z jilles $ + +[ "a\ +b" = ab ] diff --git a/bin/cash/tests/parser/line-cont3.0 b/bin/cash/tests/parser/line-cont3.0 new file mode 100644 index 00000000..2147209d --- /dev/null +++ b/bin/cash/tests/parser/line-cont3.0 @@ -0,0 +1,7 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/line-cont3.0 273243 2014-10-17 21:52:57Z jilles $ + +v=`printf %s 'a\ +b'` +w="`printf %s 'c\ +d'`" +[ "$v$w" = abcd ] diff --git a/bin/cash/tests/parser/line-cont4.0 b/bin/cash/tests/parser/line-cont4.0 new file mode 100644 index 00000000..1795695e --- /dev/null +++ b/bin/cash/tests/parser/line-cont4.0 @@ -0,0 +1,8 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/line-cont4.0 273276 2014-10-19 11:59:15Z jilles $ + +v=abcd +[ "$\ +v.$\ +{v}.${\ +v}.${v\ +}" = abcd.abcd.abcd.abcd ] diff --git a/bin/cash/tests/parser/line-cont5.0 b/bin/cash/tests/parser/line-cont5.0 new file mode 100644 index 00000000..93a422b8 --- /dev/null +++ b/bin/cash/tests/parser/line-cont5.0 @@ -0,0 +1,14 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/line-cont5.0 273276 2014-10-19 11:59:15Z jilles $ + +bad=1 +case x in +x\ +) ;\ +; *) exit 7 +esac &\ +& bad= &\ +& : >\ +>/dev/null + +false |\ +| [ -z "$bad" ] diff --git a/bin/cash/tests/parser/line-cont6.0 b/bin/cash/tests/parser/line-cont6.0 new file mode 100644 index 00000000..f6ba749f --- /dev/null +++ b/bin/cash/tests/parser/line-cont6.0 @@ -0,0 +1,23 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/line-cont6.0 273276 2014-10-19 11:59:15Z jilles $ + +v0\ +=abc + +v=$(cat <\ +<\ +E\ +O\ +F +${v0}d +EOF +) + +w=$(cat <\ +<\ +-\ +EOF + efgh +EOF +) + +[ "$v.$w" = "abcd.efgh" ] diff --git a/bin/cash/tests/parser/line-cont7.0 b/bin/cash/tests/parser/line-cont7.0 new file mode 100644 index 00000000..4efa6066 --- /dev/null +++ b/bin/cash/tests/parser/line-cont7.0 @@ -0,0 +1,7 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/line-cont7.0 273276 2014-10-19 11:59:15Z jilles $ + +[ "$(\ +( +1\ ++ 1)\ +)" = 2 ] diff --git a/bin/cash/tests/parser/line-cont8.0 b/bin/cash/tests/parser/line-cont8.0 new file mode 100644 index 00000000..57cd0de7 --- /dev/null +++ b/bin/cash/tests/parser/line-cont8.0 @@ -0,0 +1,6 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/line-cont8.0 273276 2014-10-19 11:59:15Z jilles $ + +set -- a b c d e f g h i j +[ "${1\ +0\ +}" = j ] diff --git a/bin/cash/tests/parser/line-cont9.0 b/bin/cash/tests/parser/line-cont9.0 new file mode 100644 index 00000000..aa76754f --- /dev/null +++ b/bin/cash/tests/parser/line-cont9.0 @@ -0,0 +1,6 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/line-cont9.0 273276 2014-10-19 11:59:15Z jilles $ + +[ "${$\ +:\ ++\ +xyz}" = xyz ] diff --git a/bin/cash/tests/parser/no-space1.0 b/bin/cash/tests/parser/no-space1.0 new file mode 100644 index 00000000..e82425bf --- /dev/null +++ b/bin/cash/tests/parser/no-space1.0 @@ -0,0 +1,18 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/no-space1.0 218891 2011-02-20 17:28:58Z jilles $ + +# These are ugly but are required to work. + +set -e + +while(false)do(:)done +if(false)then(:)fi +if(false)then(:)else(:)fi +(:&&:)||: +until(:)do(:)done +case x in(x);;*)exit 1;(:)esac +case x in(x);;*)exit 1;;esac +for i do(:)done +{(:)} +f(){(:)} +:|: +(:)|(:) diff --git a/bin/cash/tests/parser/no-space2.0 b/bin/cash/tests/parser/no-space2.0 new file mode 100644 index 00000000..c3d1cde7 --- /dev/null +++ b/bin/cash/tests/parser/no-space2.0 @@ -0,0 +1,7 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/no-space2.0 218891 2011-02-20 17:28:58Z jilles $ + +# This conflicts with ksh extended patterns but occurs in the wild. + +set -e + +!(false) diff --git a/bin/cash/tests/parser/nul1.0 b/bin/cash/tests/parser/nul1.0 new file mode 100644 index 00000000..2e37dcb1 --- /dev/null +++ b/bin/cash/tests/parser/nul1.0 @@ -0,0 +1,12 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/nul1.0 295825 2016-02-19 21:53:12Z jilles $ +# Although POSIX does not specify the effect of NUL bytes in scripts, +# we ignore them. + +{ + printf 'v=%03000d\0%02000d' 7 2 + dd if=/dev/zero bs=1000 count=1 status=none + printf '1 w=%03000d%02000d1\0\n' 7 2 + printf '\0l\0v\0=\0$\0{\0#\0v\0}\n' + printf '\0l\0w\0=\0\0$\0{\0#\0w}\0\0\0\n' + printf '[ "$lv.$lw.$v" = "5001.5001.$w" ]\n' +} | ${SH} diff --git a/bin/cash/tests/parser/only-redir1.0 b/bin/cash/tests/parser/only-redir1.0 new file mode 100644 index 00000000..3e876215 --- /dev/null +++ b/bin/cash/tests/parser/only-redir1.0 @@ -0,0 +1,3 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/only-redir1.0 210221 2010-07-18 12:45:31Z jilles $ +&2 +set -v +echo two >&2 +echo three >&2 +EOF diff --git a/bin/cash/tests/parser/set-v1.0.stderr b/bin/cash/tests/parser/set-v1.0.stderr new file mode 100644 index 00000000..d904fa5f --- /dev/null +++ b/bin/cash/tests/parser/set-v1.0.stderr @@ -0,0 +1,5 @@ +one +echo two >&2 +two +echo three >&2 +three diff --git a/bin/cash/tests/parser/var-assign1.0 b/bin/cash/tests/parser/var-assign1.0 new file mode 100644 index 00000000..44e0de10 --- /dev/null +++ b/bin/cash/tests/parser/var-assign1.0 @@ -0,0 +1,19 @@ +# $FreeBSD: releng/12.0/bin/sh/tests/parser/var-assign1.0 257920 2013-11-10 18:46:59Z jilles $ +# In a variable assignment, both the name and the equals sign must be entirely +# unquoted. Therefore, there is only one assignment below; the other words +# containing equals signs are command words. + +abc=0 +\abc=1 2>/dev/null +a\bc=2 2>/dev/null +abc\=3 2>/dev/null +a\bc\=4 2>/dev/null +'abc'=5 2>/dev/null +a'b'c=6 2>/dev/null +abc'='7 2>/dev/null +'abc=8' 2>/dev/null +"abc"=9 2>/dev/null +a"b"c=10 2>/dev/null +abc"="11 2>/dev/null +"abc=12" 2>/dev/null +[ "$abc" = 0 ] -- cgit 1.4.1