Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/tests/bin/sh new command substitution test from kre



details:   https://anonhg.NetBSD.org/src/rev/db7230c16cd3
branches:  trunk
changeset: 344304:db7230c16cd3
user:      christos <christos%NetBSD.org@localhost>
date:      Sun Mar 20 22:57:04 2016 +0000

description:
new command substitution test from kre

diffstat:

 tests/bin/sh/Makefile    |    3 +-
 tests/bin/sh/t_cmdsub.sh |  500 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 502 insertions(+), 1 deletions(-)

diffs (truncated from 521 to 300 lines):

diff -r 1fa1ec50e252 -r db7230c16cd3 tests/bin/sh/Makefile
--- a/tests/bin/sh/Makefile     Sun Mar 20 22:56:39 2016 +0000
+++ b/tests/bin/sh/Makefile     Sun Mar 20 22:57:04 2016 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.10 2016/03/16 21:13:51 christos Exp $
+# $NetBSD: Makefile,v 1.11 2016/03/20 22:57:04 christos Exp $
 #
 
 .include <bsd.own.mk>
@@ -8,6 +8,7 @@
 TESTS_SUBDIRS += dotcmd
 
 TESTS_SH+=     t_arith
+TESTS_SH+=     t_cmdsub
 TESTS_SH+=     t_evaltested
 TESTS_SH+=     t_exit
 TESTS_SH+=     t_expand
diff -r 1fa1ec50e252 -r db7230c16cd3 tests/bin/sh/t_cmdsub.sh
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/bin/sh/t_cmdsub.sh  Sun Mar 20 22:57:04 2016 +0000
@@ -0,0 +1,500 @@
+# $NetBSD: t_cmdsub.sh,v 1.1 2016/03/20 22:57:04 christos Exp $
+#
+# Copyright (c) 2016 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
+
+#
+# This file tests command substitutions ( `...` and $( ... ) )
+#
+# CAUTION:
+#      Be careful attempting running these tests outside the ATF environment
+#      Some of the tests run "rm *" in the current directory to clean up
+#      An ATF test directory should be empty already, outside ATF, anything
+
+atf_test_case a_basic_cmdsub
+a_basic_cmdsub_head() {
+       atf_set "descr" 'Test operation of simple $( ) substitutions'
+}
+a_basic_cmdsub_body() {
+       atf_check -s exit:0 -o match:'Result is true today' -e empty \
+           ${TEST_SH} -c \
+               'echo Result is $( true && echo true || echo false ) today'
+
+       atf_check -s exit:0 -o match:'Result is false today' -e empty \
+           ${TEST_SH} -c \
+               'echo Result is $( false && echo true || echo false ) today'
+
+       atf_check -s exit:0 -o match:'aaabbbccc' -e empty \
+           ${TEST_SH} -c 'echo aaa$( echo bbb )ccc'
+       atf_check -s exit:0 -o match:'aaabbb cccddd' -e empty \
+           ${TEST_SH} -c 'echo aaa$( echo bbb ccc )ddd'
+       atf_check -s exit:0 -o inline:'aaabbb cccddd\n' -e empty \
+           ${TEST_SH} -c 'echo aaa$( echo bbb; echo ccc )ddd'
+       atf_check -s exit:0 -o inline:'aaabbb\ncccddd\n' -e empty \
+           ${TEST_SH} -c 'echo "aaa$( echo bbb; echo ccc )ddd"'
+
+       atf_check -s exit:0 -o inline:'some string\n' -e empty \
+           ${TEST_SH} -c 'X=$( echo some string ); echo "$X"'
+       atf_check -s exit:0 -o inline:'weird; string *\n' -e empty \
+           ${TEST_SH} -c 'X=$( echo "weird; string *" ); echo "$X"'
+
+       rm -f * 2>/dev/null || :
+       for f in file-1 file-2
+       do
+               cp /dev/null "$f"
+       done
+
+       atf_check -s exit:0 -o match:'Found file-1 file-2' -e empty \
+           ${TEST_SH} -c 'echo Found $( echo * )'
+       atf_check -s exit:0 -o match:'Found file-1 file-2' -e empty \
+           ${TEST_SH} -c 'echo Found "$( echo * )"'
+       atf_check -s exit:0 -o match:'Found file-1 file-2' -e empty \
+           ${TEST_SH} -c 'echo Found $('" echo '*' )"
+       atf_check -s exit:0 -o match:'Found \*' -e empty \
+           ${TEST_SH} -c 'echo Found "$('" echo '*' "')"'
+       atf_check -s exit:0 -o match:'Found file-1 file-2' -e empty \
+           ${TEST_SH} -c 'echo Found $('" echo \\* )"
+       atf_check -s exit:0 -o match:'Found \*' -e empty \
+           ${TEST_SH} -c 'echo Found "$('" echo \\* )"\"
+}
+
+atf_test_case b_basic_backticks
+b_basic_backticks_head() {
+       atf_set "descr" 'Test operation of old style ` ` substitutions'
+}
+b_basic_backticks_body() {
+       atf_check -s exit:0 -o match:'Result is true today' -e empty \
+           ${TEST_SH} -c \
+               'echo Result is `true && echo true || echo false` today'
+
+       atf_check -s exit:0 -o match:'Result is false today' -e empty \
+           ${TEST_SH} -c \
+               'echo Result is `false && echo true || echo false` today'
+
+       atf_check -s exit:0 -o match:'aaabbbccc' -e empty \
+           ${TEST_SH} -c 'echo aaa` echo bbb `ccc'
+       atf_check -s exit:0 -o match:'aaabbb cccddd' -e empty \
+           ${TEST_SH} -c 'echo aaa` echo bbb ccc `ddd'
+       atf_check -s exit:0 -o inline:'aaabbb cccddd\n' -e empty \
+           ${TEST_SH} -c 'echo aaa` echo bbb; echo ccc `ddd'
+       atf_check -s exit:0 -o inline:'aaabbb\ncccddd\n' -e empty \
+           ${TEST_SH} -c 'echo "aaa` echo bbb; echo ccc `ddd"'
+
+       atf_check -s exit:0 -o inline:'some string\n' -e empty \
+           ${TEST_SH} -c 'X=` echo some string `; echo "$X"'
+       atf_check -s exit:0 -o inline:'weird; string *\n' -e empty \
+           ${TEST_SH} -c 'X=` echo "weird; string *" `; echo "$X"'
+
+       rm -f * 2>/dev/null || :
+       for f in file-1 file-2
+       do
+               cp /dev/null "$f"
+       done
+
+       atf_check -s exit:0 -o match:'Found file-1 file-2' -e empty \
+           ${TEST_SH} -c 'echo Found ` echo * `'
+       atf_check -s exit:0 -o match:'Found file-1 file-2' -e empty \
+           ${TEST_SH} -c 'echo Found "` echo * `"'
+       atf_check -s exit:0 -o match:'Found file-1 file-2' -e empty \
+           ${TEST_SH} -c 'echo Found `'" echo '*' "'`'
+       atf_check -s exit:0 -o match:'Found \*' -e empty \
+           ${TEST_SH} -c 'echo Found "`'" echo '*' "'`"'
+       atf_check -s exit:0 -o match:'Found file-1 file-2' -e empty \
+           ${TEST_SH} -c 'echo Found `'" echo \\* "'`'
+       atf_check -s exit:0 -o match:'Found \*' -e empty \
+           ${TEST_SH} -c 'echo Found "`'" echo \\* "'`"'
+}
+
+atf_test_case c_nested_cmdsub
+c_nested_cmdsub_head() {
+       atf_set "descr" "Test that cmd substitutions can be nested"
+}
+c_nested_cmdsub_body() {
+       atf_check -s exit:0 -o match:'__foobarbletch__' -e empty \
+           ${TEST_SH} -c 'echo __$( echo foo$(echo bar)bletch )__'
+       atf_check -s exit:0 -o match:'_abcde_' -e empty \
+           ${TEST_SH} -c 'echo _$(echo a$(echo $(echo b)c$(echo d))e )_'
+       atf_check -s exit:0 -o match:'123454321' -e empty \
+           ${TEST_SH} -c 'echo 1$(echo 2$(echo 3$(echo 4$(echo 5)4)3)2)1'
+}
+
+atf_test_case d_nested_backticks
+d_nested_backticks_head() {
+       atf_set "descr" "Tests that old style backtick cmd subs can be nested"
+}
+d_nested_backticks_body() {
+       atf_check -s exit:0 -o match:'__foobarbletch__' -e empty \
+           ${TEST_SH} -c 'echo __` echo foo\`echo bar\`bletch `__'
+       atf_check -s exit:0 -o match:'_abcde_' -e empty \
+           ${TEST_SH} -c \
+               'echo _`echo a\`echo \\\`echo b\\\`c\\\`echo d\\\`\`e `_'
+       atf_check -s exit:0 -o match:'123454321' -e empty \
+           ${TEST_SH} -c \
+           'echo 1`echo 2\`echo 3\\\`echo 4\\\\\\\`echo 5\\\\\\\`4\\\`3\`2`1'
+}
+
+atf_test_case e_perverse_mixing
+e_perverse_mixing_head() {
+       atf_set "descr" \
+               "Checks various mixed new and old style cmd substitutions"
+}
+e_perverse_mixing_body() {
+       atf_check -s exit:0 -o match:'__foobarbletch__' -e empty \
+           ${TEST_SH} -c 'echo __$( echo foo`echo bar`bletch )__'
+       atf_check -s exit:0 -o match:'__foobarbletch__' -e empty \
+           ${TEST_SH} -c 'echo __` echo foo$(echo bar)bletch `__'
+       atf_check -s exit:0 -o match:'_abcde_' -e empty \
+           ${TEST_SH} -c 'echo _$(echo a`echo $(echo b)c$(echo d)`e )_'
+       atf_check -s exit:0 -o match:'_abcde_' -e empty \
+           ${TEST_SH} -c 'echo _`echo a$(echo \`echo b\`c\`echo d\`)e `_'
+       atf_check -s exit:0 -o match:'12345654321' -e empty \
+           ${TEST_SH} -c \
+               'echo 1`echo 2$(echo 3\`echo 4\\\`echo 5$(echo 6)5\\\`4\`3)2`1'
+}
+
+atf_test_case f_redirect_in_cmdsub
+f_redirect_in_cmdsub_head() {
+       atf_set "descr" "Checks that redirects work in command substitutions"
+}
+f_redirect_in_cmdsub_body() {
+       rm -f file 2>/dev/null || :
+       atf_check -s exit:0 -o match:'_aa_' -e empty \
+           ${TEST_SH} -c 'echo _$( echo a$( echo b > file )a)_'
+       atf_check -s exit:0 -o match:b -e empty ${TEST_SH} -c 'cat file'
+       atf_check -s exit:0 -o match:'_aba_' -e empty \
+           ${TEST_SH} -c 'echo _$( echo a$( cat < file )a)_'
+       atf_check -s exit:0 -o match:'_aa_' -e empty \
+           ${TEST_SH} -c 'echo _$( echo a$( echo d >> file )a)_'
+       atf_check -s exit:0 -o inline:'b\nd\n' -e empty ${TEST_SH} -c 'cat file'
+       atf_check -s exit:0 -o match:'_aa_' -e match:'not error' \
+           ${TEST_SH} -c 'echo _$( echo a$( echo not error >&2 )a)_'
+}
+
+atf_test_case g_redirect_in_backticks
+g_redirect_in_backticks_head() {
+       atf_set "descr" "Checks that redirects work in old style cmd sub"
+}
+g_redirect_in_backticks_body() {
+       rm -f file 2>/dev/null || :
+       atf_check -s exit:0 -o match:'_aa_' -e empty \
+           ${TEST_SH} -c 'echo _` echo a\` echo b > file \`a`_'
+       atf_check -s exit:0 -o match:b -e empty ${TEST_SH} -c 'cat file'
+       atf_check -s exit:0 -o match:'_aba_' -e empty \
+           ${TEST_SH} -c 'echo _` echo a\` cat < file \`a`_'
+       atf_check -s exit:0 -o match:'_aa_' -e empty \
+           ${TEST_SH} -c 'echo _` echo a\` echo d >> file \`a`_'
+       atf_check -s exit:0 -o inline:'b\nd\n' -e empty ${TEST_SH} -c 'cat file'
+       atf_check -s exit:0 -o match:'_aa_' -e match:'not error' \
+           ${TEST_SH} -c 'echo _` echo a\` echo not error >&2 \`a`_'
+}
+
+atf_test_case h_vars_in_cmdsub
+h_vars_in_cmdsub_head() {
+       atf_set "descr" "Check that variables work in command substitutions"
+}
+h_vars_in_cmdsub_body() {
+       atf_check -s exit:0 -o match:'__abc__' -e empty \
+           ${TEST_SH} -c 'X=abc; echo __$( echo ${X} )__'
+       atf_check -s exit:0 -o match:'__abc__' -e empty \
+           ${TEST_SH} -c 'X=abc; echo __$( echo "${X}" )__'
+       atf_check -s exit:0 -o match:'__abc__' -e empty \
+           ${TEST_SH} -c 'X=abc; echo "__$( echo ${X} )__"'
+       atf_check -s exit:0 -o match:'__abc__' -e empty \
+           ${TEST_SH} -c 'X=abc; echo "__$( echo "${X}" )__"'
+
+       atf_check -s exit:0 -o inline:'a\n\nb\n\nc\n' -e empty \
+           ${TEST_SH} -c "for X in a '' b '' c"'; do echo $( echo "$X" ); done'
+
+       atf_check -s exit:0 -o match:'__acd__' -e empty \
+           ${TEST_SH} -c 'X=; unset Y; echo "__$( echo a${X-b}${Y-c}d)__"'
+       atf_check -s exit:0 -o match:'__abcd__' -e empty \
+           ${TEST_SH} -c 'X=; unset Y; echo "__$( echo a${X:-b}${Y:-c}d)__"'
+       atf_check -s exit:0 -o match:'__XYX__' -e empty \
+           ${TEST_SH} -c 'X=X; echo "__${X}$( X=Y; echo ${X} )${X}__"'
+       atf_check -s exit:0 -o match:'__def__' -e empty \
+           ${TEST_SH} -c 'X=abc; echo "__$(X=def; echo "${X}" )__"'
+       atf_check -s exit:0 -o inline:'abcdef\nabc\n' -e empty \
+           ${TEST_SH} -c 'X=abc; echo "$X$(X=def; echo ${X} )"; echo $X'
+}
+
+atf_test_case i_vars_in_backticks
+i_vars_in_backticks_head() {
+       atf_set "descr" "Checks that variables work in old style cmd sub"
+}
+i_vars_in_backticks_body() {
+       atf_check -s exit:0 -o match:'__abc__' -e empty \
+           ${TEST_SH} -c 'X=abc; echo __` echo ${X} `__'
+       atf_check -s exit:0 -o match:'__abc__' -e empty \
+           ${TEST_SH} -c 'X=abc; echo __` echo "${X}" `__'
+       atf_check -s exit:0 -o match:'__abc__' -e empty \
+           ${TEST_SH} -c 'X=abc; echo "__` echo ${X} `__"'
+       atf_check -s exit:0 -o match:'__abc__' -e empty \
+           ${TEST_SH} -c 'X=abc; echo "__` echo \"${X}\" `__"'
+
+       atf_check -s exit:0 -o inline:'a\n\nb\n\nc\n' -e empty \
+           ${TEST_SH} -c "for X in a '' b '' c"'; do echo $( echo "$X" ); done'
+
+       atf_check -s exit:0 -o match:'__acd__' -e empty \
+           ${TEST_SH} -c 'X=; unset Y; echo "__$( echo a${X-b}${Y-c}d)__"'
+       atf_check -s exit:0 -o match:'__abcd__' -e empty \
+           ${TEST_SH} -c 'X=; unset Y; echo "__$( echo a${X:-b}${Y:-c}d)__"'
+       atf_check -s exit:0 -o match:'__XYX__' -e empty \
+           ${TEST_SH} -c 'X=X; echo "__${X}$( X=Y; echo ${X} )${X}__"'
+       atf_check -s exit:0 -o inline:'abcdef\nabc\n' -e empty \
+           ${TEST_SH} -c 'X=abc; echo "$X`X=def; echo \"${X}\" `";echo $X'
+
+       # The following is nonsense, so is not included ...
+       # atf_check -s exit:0 -o match:'__abc__' -e empty \
+       #                              oV             cV   oV   cV
+       #    ${TEST_SH} -c 'X=abc; echo "__`X=def echo "${X}" `__"'
+       #                                  `start in " ^ " ends, ` not yet
+}
+
+atf_test_case j_cmdsub_in_varexpand
+j_cmdsub_in_varexpand_head() {
+       atf_set "descr" "Checks that command sub can be used in var expansion"



Home | Main Index | Thread Index | Old Index