1221887Sjilles# $FreeBSD: releng/11.0/bin/sh/tests/parser/heredoc9.0 221887 2011-05-14 14:19:30Z jilles $
2221887Sjilles
3221887Sjilles# It may be argued that
4221887Sjilles#   x=$(cat <<EOF
5221887Sjilles#   foo
6221887Sjilles#   EOF)
7221887Sjilles# is a valid complete command that sets x to foo, because
8221887Sjilles#   cat <<EOF
9221887Sjilles#   foo
10221887Sjilles#   EOF
11221887Sjilles# is a valid script even without the final newline.
12221887Sjilles# However, if the here-document is not within a new-style command substitution
13221887Sjilles# or there are other constructs nested inside the command substitution that
14221887Sjilles# need terminators, the delimiter at the start of a line followed by a close
15221887Sjilles# parenthesis is clearly a literal part of the here-document.
16221887Sjilles
17221887Sjilles# This file contains tests that also work with simplistic $(...) parsers.
18221887Sjilles
19221887Sjillesfailures=0
20221887Sjilles
21221887Sjillescheck() {
22221887Sjilles	if ! eval "[ $* ]"; then
23221887Sjilles		echo "Failed: $*"
24221887Sjilles		: $((failures += 1))
25221887Sjilles	fi
26221887Sjilles}
27221887Sjilles
28221887Sjillescheck '`${SH} -c "cat <<EOF
29221887SjillesEOF)
30221887SjillesEOF
31221887Sjilles"` = "EOF)"'
32221887Sjilles
33221887Sjillescheck '`${SH} -c "(cat <<EOF
34221887SjillesEOF)
35221887SjillesEOF
36221887Sjilles)"` = "EOF)"'
37221887Sjilles
38221887Sjillescheck '"`cat <<EOF
39221887SjillesEOF x
40221887SjillesEOF
41221887Sjilles`" = "EOF x"'
42221887Sjilles
43221887Sjillescheck '"`cat <<EOF
44221887SjillesEOF )
45221887SjillesEOF
46221887Sjilles`" = "EOF )"'
47221887Sjilles
48221887Sjillescheck '"`cat <<EOF
49221887SjillesEOF)
50221887SjillesEOF
51221887Sjilles`" = "EOF)"'
52221887Sjilles
53221887Sjillescheck '"$(cat <<EOF
54221887SjillesEOF x
55221887SjillesEOF
56221887Sjilles)" = "EOF x"'
57221887Sjilles
58221887Sjillesexit $((failures != 0))
59