-
Notifications
You must be signed in to change notification settings - Fork 117
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
sh: Add tests for lines that look like heredoc delimiters but are not.
Obtained-from: FreeBSD 221887
- Loading branch information
Peter Avalos
committed
Dec 25, 2011
1 parent
5824251
commit 2687e41
Showing
2 changed files
with
107 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,49 @@ | |||
# $FreeBSD: src/tools/regression/bin/sh/parser/heredoc10.0,v 1.1 2011/05/14 14:19:30 jilles Exp $ | |||
|
|||
# It may be argued that | |||
# x=$(cat <<EOF | |||
# foo | |||
# EOF) | |||
# is a valid complete command that sets x to foo, because | |||
# cat <<EOF | |||
# foo | |||
# EOF | |||
# is a valid script even without the final newline. | |||
# However, if the here-document is not within a new-style command substitution | |||
# or there are other constructs nested inside the command substitution that | |||
# need terminators, the delimiter at the start of a line followed by a close | |||
# parenthesis is clearly a literal part of the here-document. | |||
|
|||
# This file contains tests that may not work with simplistic $(...) parsers. | |||
# The open parentheses in comments help mksh, but not zsh. | |||
|
|||
failures=0 | |||
|
|||
check() { | |||
if ! eval "[ $* ]"; then | |||
echo "Failed: $*" | |||
: $((failures += 1)) | |||
fi | |||
} | |||
|
|||
check '"$(cat <<EOF # ( | |||
EOF ) | |||
EOF | |||
)" = "EOF )"' | |||
|
|||
check '"$({ cat <<EOF # ( | |||
EOF) | |||
EOF | |||
})" = "EOF)"' | |||
|
|||
check '"$(if :; then cat <<EOF # ( | |||
EOF) | |||
EOF | |||
fi)" = "EOF)"' | |||
|
|||
check '"$( (cat <<EOF # ( | |||
EOF) | |||
EOF | |||
))" = "EOF)"' | |||
|
|||
exit $((failures != 0)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,58 @@ | |||
# $FreeBSD: src/tools/regression/bin/sh/parser/heredoc9.0,v 1.1 2011/05/14 14:19:30 jilles Exp $ | |||
|
|||
# It may be argued that | |||
# x=$(cat <<EOF | |||
# foo | |||
# EOF) | |||
# is a valid complete command that sets x to foo, because | |||
# cat <<EOF | |||
# foo | |||
# EOF | |||
# is a valid script even without the final newline. | |||
# However, if the here-document is not within a new-style command substitution | |||
# or there are other constructs nested inside the command substitution that | |||
# need terminators, the delimiter at the start of a line followed by a close | |||
# parenthesis is clearly a literal part of the here-document. | |||
|
|||
# This file contains tests that also work with simplistic $(...) parsers. | |||
|
|||
failures=0 | |||
|
|||
check() { | |||
if ! eval "[ $* ]"; then | |||
echo "Failed: $*" | |||
: $((failures += 1)) | |||
fi | |||
} | |||
|
|||
check '`${SH} -c "cat <<EOF | |||
EOF) | |||
EOF | |||
"` = "EOF)"' | |||
|
|||
check '`${SH} -c "(cat <<EOF | |||
EOF) | |||
EOF | |||
)"` = "EOF)"' | |||
|
|||
check '"`cat <<EOF | |||
EOF x | |||
EOF | |||
`" = "EOF x"' | |||
|
|||
check '"`cat <<EOF | |||
EOF ) | |||
EOF | |||
`" = "EOF )"' | |||
|
|||
check '"`cat <<EOF | |||
EOF) | |||
EOF | |||
`" = "EOF)"' | |||
|
|||
check '"$(cat <<EOF | |||
EOF x | |||
EOF | |||
)" = "EOF x"' | |||
|
|||
exit $((failures != 0)) |