Source-Changes-HG archive

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

[src/trunk]: src/tests/bin/sh More test sub-cases for the dollar_hash ( ${#.....



details:   https://anonhg.NetBSD.org/src/rev/cd57ecf0ca71
branches:  trunk
changeset: 353645:cd57ecf0ca71
user:      kre <kre%NetBSD.org@localhost>
date:      Mon May 15 19:53:40 2017 +0000

description:
More test sub-cases for the dollar_hash ( ${#...} ) test.
Upi really (really!) don't want to know!

Also, add a comment (in another section) and avoid giving messages
to atf_fail that include newlines - AFT really doesn't like that.
Instead, convert the \n's to ;'s so at least the content is retained.

diffstat:

 tests/bin/sh/t_expand.sh |  65 +++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 62 insertions(+), 3 deletions(-)

diffs (119 lines):

diff -r 44ad2704844d -r cd57ecf0ca71 tests/bin/sh/t_expand.sh
--- a/tests/bin/sh/t_expand.sh  Mon May 15 18:34:56 2017 +0000
+++ b/tests/bin/sh/t_expand.sh  Mon May 15 19:53:40 2017 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: t_expand.sh,v 1.12 2017/05/14 11:28:49 kre Exp $
+# $NetBSD: t_expand.sh,v 1.13 2017/05/15 19:53:40 kre Exp $
 #
 # Copyright (c) 2007, 2009 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -259,6 +259,7 @@
 
                # don't actually fail just because of wrong exit code
                # unless we either expected, or received "good"
+               # or something else is detected as incorrect as well.
                case "$3/${STATUS}" in
                (*/0|0/*) fail=true;;
                esac
@@ -307,7 +308,10 @@
                TEST_FAIL_COUNT=$(( $TEST_FAIL_COUNT + 1 ))
                return 0
        }
-       $fail && atf_fail "Test[$TEST_NUM] of '$1' failed${nl}${MSG}"
+       $fail && atf_fail "Test[$TEST_NUM] failed: $(
+           # ATF does not like newlines in messages, so change them...
+                   printf '%s' "${MSG}" | tr '\n' ';'
+           )"
        return 0
 }
 
@@ -441,6 +445,9 @@
 #      need a test of its own, and used in that way, it really doesn't.
 #      But when we add braces ${#} we need to deal with the three
 #      (almost 4) different meanings of a # inside a ${} expansion...
+#
+#      Note that some of these are just how we treat expansions that
+#      are unspecified by posix (as noted below.)
 #      
 #              1.   ${#} is just $# (number of params)
 #              1.a     ${\#} is nothing at all (error: invalid expansion)
@@ -450,18 +457,24 @@
 #              3    ${VAR#pat} is the value of VAR with leading pat removed
 #              3.a     Including ${VAR#} which just removes leading nothing
 #                      This is relevant in case of ${VAR#${X}} with X=''
+#                              nb: not required by posix, see XCU 2.6.2
 #              3.b     ${##} is not a case of 3.a but rather 2.a 
 #              3.c     Yet ${##pat} is a case of 3.a
 #                      Including ${##${X}} where X='' or X='#'
+#                              nb: not required by posix, see XCU 2.6.2
 #              3.d     And ${#\#} is invalid (error)
 #              3.e     But ${##\#} removes a leading # from the value of $#
 #                      (so is just $# as there is no leading # there)
+#                              nb: not required by posix, see XCU 2.6.2
 #              4    ${VAR##pat} is the value of VAR with longest pat removed
 #              4.a     Including ${VAR##} which removes the longest nothing
 #              4.b     Which in this case includes ${###} (so is == $#)
+#                              nb: not required by posix, see XCU 2.6.2
 #              4.c     But not ${##\#} which is $# with a leading '#' removed
 #                      (and so is also == $#), i.e.: like ${###} but different.
+#                              nb: not required by posix, see XCU 2.6.2
 #              4.d     As is ${###\#} or just ${####} - remove  # (so just $#)
+#                              nb: not required by posix, see XCU 2.6.2
 #
 
        reset dollar_hash
@@ -584,7 +597,53 @@
        check 'set -- a b c; echo ${#:=bogus}'          '3'             0  #85
        check 'set -- a b c; echo ${#=bogus}'           '3'             0  #86
 
-       results
+       for n in 0 1 10 25 100                          #87 #88 #89 #90 #91
+       do
+               check "(exit $n)"'; echo ${#?}'         "${#n}"         0
+       done
+
+       results         # results so far anyway...
+
+# now we have some harder to verify cases, as they (must) check unknown values
+# and hence the resuls cannot just be built into the script, but we have
+# to use some tricks to validate them, so for these, just do regular testing
+# and don't attempt to use the check helper function, nor to include
+# these tests in the result summary.   If anything has already failed, we
+# do not get this far...   From here on, first failure ends this test.
+
+       for opts in '' '-a' '-au' '-auf' '-aufe' # options safe enough to set
+       do
+               # Note the shell might have other (or these) opts set already
+
+               RES=$(${TEST_SH} -c "test -n '${opts}' && set ${opts};
+                       printf '%s' \"\$-\";printf ' %s\\n' \"\${#-}\"") ||
+                       atf_fail '${#-} test exited with status '"$?"
+               LEN="${RES##* }"
+               DMINUS="${RES% ${LEN}}"
+               if [ "${#DMINUS}" != "${LEN}" ]
+               then
+                       atf_fail \
+                  '${#-} test'" produced ${LEN} for opts ${DMINUS} (${RES})"
+               fi
+       done
+
+       for seq in a b c d e f g h i j
+       do
+               # now we are tryin to generate different pids for $$ and $!
+               # so we just run the test a number of times, and hope...
+               # On NetBSD pid randomisation will usually help the tests
+
+               eval "$(${TEST_SH} -c \
+                   '(exit 0)& BG=$! LBG=${#!};
+           printf "SH=%s BG=%s LSH=%s LBG=%s" "$$" "$BG" "${#$}" "$LBG";
+                     wait')"
+
+               if [ "${#SH}" != "${LSH}" ] || [ "${#BG}" != "${LBG}" ]
+               then
+                       atf_fail \
+       '${#!] of '"${BG} was ${LBG}, expected ${#BG}"'; ${#$} of '"${SH} was ${LSH}, expected ${#SH}"
+               fi
+       done
 }
 
 atf_test_case dollar_star



Home | Main Index | Thread Index | Old Index