summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorjilles <jilles@FreeBSD.org>2010-05-09 17:10:50 +0000
committerjilles <jilles@FreeBSD.org>2010-05-09 17:10:50 +0000
commitc0ec19525dbe9ab467e36097e42c2ecc28260982 (patch)
tree98514d40256d3a99b948ca95cb51b3e8e1dc8727 /tools
parent684507e744872ba607fb04d7ec1b56c7ef4c68a4 (diff)
downloadFreeBSD-src-c0ec19525dbe9ab467e36097e42c2ecc28260982.zip
FreeBSD-src-c0ec19525dbe9ab467e36097e42c2ecc28260982.tar.gz
sh: Add some parser tests.
case1.0 tests POSIX requirements and one more for keywords in case statements. The others test very special cases of command substitution. These also work on stable/8.
Diffstat (limited to 'tools')
-rw-r--r--tools/regression/bin/sh/parser/case1.014
-rw-r--r--tools/regression/bin/sh/parser/case2.032
-rw-r--r--tools/regression/bin/sh/parser/heredoc3.07
3 files changed, 53 insertions, 0 deletions
diff --git a/tools/regression/bin/sh/parser/case1.0 b/tools/regression/bin/sh/parser/case1.0
new file mode 100644
index 0000000..49b4c45
--- /dev/null
+++ b/tools/regression/bin/sh/parser/case1.0
@@ -0,0 +1,14 @@
+# $FreeBSD$
+
+keywords='if then else elif fi while until for do done { } case esac ! in'
+
+# Keywords can be used unquoted in case statements, except the keyword
+# esac as the first pattern of a '|' alternation without a starting '('.
+# (POSIX doesn't seem to require (esac) to work.)
+for k in $keywords; do
+ eval "case $k in (foo|$k) ;; *) echo bad ;; esac"
+ eval "case $k in ($k) ;; *) echo bad ;; esac"
+ eval "case $k in foo|$k) ;; *) echo bad ;; esac"
+ [ "$k" = esac ] && continue
+ eval "case $k in $k) ;; *) echo bad ;; esac"
+done
diff --git a/tools/regression/bin/sh/parser/case2.0 b/tools/regression/bin/sh/parser/case2.0
new file mode 100644
index 0000000..14610e4
--- /dev/null
+++ b/tools/regression/bin/sh/parser/case2.0
@@ -0,0 +1,32 @@
+# $FreeBSD$
+
+# Pretty much only ash derivatives can parse all of this.
+
+f1() {
+ x=$(case x in
+ (x|esac) ;;
+ (*) echo bad >&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/tools/regression/bin/sh/parser/heredoc3.0 b/tools/regression/bin/sh/parser/heredoc3.0
new file mode 100644
index 0000000..b250272
--- /dev/null
+++ b/tools/regression/bin/sh/parser/heredoc3.0
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+# This may be expected to work, but pretty much only ash derivatives allow it.
+
+test "$(cat <<EOF)" = "hi there"
+hi there
+EOF
OpenPOWER on IntegriCloud