summaryrefslogtreecommitdiff
path: root/testsuite/subst-replacement.sh
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/subst-replacement.sh')
-rw-r--r--testsuite/subst-replacement.sh86
1 files changed, 86 insertions, 0 deletions
diff --git a/testsuite/subst-replacement.sh b/testsuite/subst-replacement.sh
new file mode 100644
index 0000000..7f4854b
--- /dev/null
+++ b/testsuite/subst-replacement.sh
@@ -0,0 +1,86 @@
+#!/bin/sh
+# Test Substitute replacements, e.g. 's/(.)/\U\1/'
+
+# Copyright (C) 2016-2018 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 <https://www.gnu.org/licenses/>.
+. "${srcdir=.}/testsuite/init.sh"; path_prepend_ ./sed
+print_ver_ sed
+
+#
+# Backslash followed by unrecognized letter,
+# use letter as-is.
+echo a > in-rpl1 || framework_failure_
+echo Q > exp-rpl1 || framework_failure_
+sed -E 's/(.)/\Q/' in-rpl1 > out-rpl1 || fail=1
+compare_ exp-rpl1 out-rpl1 || fail=1
+
+#
+# numbered backreferences
+#
+echo 123456789 > in-rpl2 || framework_failure_
+for i in 1 2 3 4 5 6 7 8 9 ;
+do
+ echo $i > exp-rpl2-$i || framework_failure_
+ sed -E "s/(.)(.)(.)(.)(.)(.)(.)(.)(.)/\\$i/" in-rpl2 > out-rpl2-$i || fail=1
+ compare_ exp-rpl2-$i out-rpl2-$i || fail=1
+done
+
+# \0 matches entire pattern (TODO: is this documented?)
+# output should be the same as the input.
+sed -E 's/(.)(.)(.)(.)(.)(.)(.)(.)(.)/\0/' in-rpl2 > out-rpl2-0 || fail=1
+compare_ in-rpl2 out-rpl2-0 || fail=1
+
+# Unescaped '&' matches entire pattern
+# output should be the same as the input.
+sed -E 's/(.)(.)(.)(.)(.)(.)(.)(.)(.)/&/' in-rpl2 > out-rpl2-amp || fail=1
+compare_ in-rpl2 out-rpl2-amp || fail=1
+
+
+#
+# gnu extension: \U \u \L \l \E
+#
+echo abCde > in-rpl3 || framework_failure_
+
+# \U - all uppercase
+echo ABCde > exp-rpl3-U || framework_failure_
+sed -E 's/(.)(.)(.)/\U\1\2\3/' in-rpl3 > out-rpl3-U || fail=1
+compare_ exp-rpl3-U out-rpl3-U || fail=1
+
+# \u - next-char uppercase
+echo AbCde > exp-rpl3-u || framework_failure_
+sed -E 's/(.)(.)(.)/\u\1\2\3/' in-rpl3 > out-rpl3-u || fail=1
+compare_ exp-rpl3-u out-rpl3-u || fail=1
+
+# \L - all lowercase
+echo abcde > exp-rpl3-L || framework_failure_
+sed -E 's/(.)(.)(.)/\L\1\2\3/' in-rpl3 > out-rpl3-L || fail=1
+compare_ exp-rpl3-L out-rpl3-L || fail=1
+
+# \l - next-char lowercase
+echo abCde > exp-rpl3-l || framework_failure_
+sed -E 's/(.)(.)(.)/\l\1\2\3/' in-rpl3 > out-rpl3-l || fail=1
+compare_ exp-rpl3-l out-rpl3-l || fail=1
+
+# \E - stop \U \u \L \l processing
+echo AbCde > exp-rpl3-E1 || framework_failure_
+sed -E 's/(.)(.)(.)/\U\1\E\2\3/' in-rpl3 > out-rpl3-E1 || fail=1
+compare_ exp-rpl3-E1 out-rpl3-E1 || fail=1
+
+echo abCde > exp-rpl3-E2 || framework_failure_
+sed -E 's/(.)(.)(.)/\L\1\2\E\3/' in-rpl3 > out-rpl3-E2 || fail=1
+compare_ exp-rpl3-E2 out-rpl3-E2 || fail=1
+
+
+Exit $fail