summaryrefslogtreecommitdiff
path: root/testsuite/compile-tests.sh
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/compile-tests.sh')
-rw-r--r--testsuite/compile-tests.sh138
1 files changed, 138 insertions, 0 deletions
diff --git a/testsuite/compile-tests.sh b/testsuite/compile-tests.sh
new file mode 100644
index 0000000..d1117b4
--- /dev/null
+++ b/testsuite/compile-tests.sh
@@ -0,0 +1,138 @@
+#!/bin/sh
+# Test compilation less-common cases
+
+# Copyright (C) 2016 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+. "${srcdir=.}/testsuite/init.sh"; path_prepend_ ./sed
+print_ver_ sed
+
+fail=0
+
+
+#
+# Special file names, with gnu extensions and without (if the host
+# supports /dev/std{out,err} )
+#
+echo a > a || framework_failure_
+
+# With gnu extension enabled, /dev/stderr is emulated internally
+# regardless of the operating system.
+sed 'w/dev/stderr' a >out 2>err|| fail=1
+compare_ a out || fail=1
+compare_ a err || fail=1
+
+# In posix mode /dev/std* are not emulated internally. Skip if they
+# don't exist. 'env' is used to avoid built-in 'test' which
+# simulates /dev/stderr, e.g. bash on AIX.
+if env test -w /dev/stderr ; then
+ sed --posix 'w/dev/stderr' a >out-psx 2>err-psx || fail=1
+ compare_ a out-psx || fail=1
+ compare_ a err-psx || fail=1
+fi
+
+
+#
+# labels followed by various characters
+# (read_label)
+echo a > lbl-in-exp || framework_failure_
+cat << \EOF > lbl-prog || framework_failure_
+bZ
+:Z
+bY;
+:Y
+{bX}
+:X ;
+b W
+: W
+EOF
+sed -f lbl-prog lbl-in-exp > lbl-out || fail=1
+compare_ lbl-in-exp lbl-out
+
+
+
+#
+# character classes (compile.c:snarf_char_class)
+#
+
+# open brackets followed by EOF
+cat <<\EOF >exp-err-op-bracket || framework_failure_
+sed: -e expression #1, char 2: unterminated address regex
+EOF
+returns_ 1 sed '/[' </dev/null 2>err-op-bracket1 || fail=1
+compare_ exp-err-op-bracket err-op-bracket1 || fail=1
+
+
+# open brackets followed by \n
+printf "/[\n" > op-bracket-prog || framework_failure_
+cat <<\EOF >exp-err-op-bracket || framework_failure_
+sed: file op-bracket-prog line 1: unterminated address regex
+EOF
+returns_ 1 sed -f op-bracket-prog </dev/null 2>err-op-bracket2 || fail=1
+compare_ exp-err-op-bracket err-op-bracket2 || fail=1
+
+
+# unterminated character class '[.'
+# (snarf_char_class terminates on char 7, then returns)
+cat <<\EOF >exp-chr-class || framework_failure_
+sed: -e expression #1, char 7: unterminated `s' command
+EOF
+returns_ 1 sed 's/[[.//' </dev/null 2>err-chr-class || fail=1
+compare_ exp-chr-class err-chr-class || fail=1
+
+
+# closing bracket immediately after char-class opening
+# sequence (e.g. '[:]' instead of '[:alpha:]' ).
+cat<< \EOF >exp-chr-class2 || framework_failure_
+sed: -e expression #1, char 9: unterminated `s' command
+EOF
+returns_ 1 sed 's/[[:]]//' </dev/null 2>err-chr-class2 || fail=1
+compare_ exp-chr-class2 err-chr-class2 || fail=1
+
+
+# EOF after backslash in a regex (compile.c:match_slash())
+cat<< \EOF >exp-backslash-eof || framework_failure_
+sed: -e expression #1, char 2: unterminated address regex
+EOF
+returns_ 1 sed '/\' </dev/null 2>err-backslash-eof || fail=1
+compare_ exp-backslash-eof err-backslash-eof || fail=1
+
+
+# Valid version requirement
+sed 'v4' < /dev/null || fail=1
+
+# Closing braces followed by another closing braces, and '#'
+echo X > in-exp || framework_failure_
+sed -n '{{p}}' in-exp > out-braces-1 || fail=1
+compare_ in-exp out-braces-1 || fail=1
+
+sed -n '{p}#foo' in-exp > out-braces-2 || fail=1
+compare_ in-exp out-braces-2 || fail=1
+
+# 'l' followed by closing braces, and '#'
+printf 'X$\n' > exp-l || framework_failure_
+sed -n '{l}' in-exp > out-l-braces || fail=1
+compare_ exp-l out-l-braces || fail=1
+sed -n 'l#foo' in-exp > out-l-hash || fail=1
+compare_ exp-l out-l-hash || fail=1
+
+
+#
+# unterminated a/c/i as last command
+# (pending_text)
+sed -e 'a\' in-exp > out-unterm-a1 || fail=1
+compare_ in-exp out-unterm-a1 || fail=1
+
+
+Exit $fail