123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- #! /bin/sh
- # Copyright (C) 2011-2017 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 2, 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/>.
- # TAP support: more unusual forms for valid TAP input.
- # See also related test 'tap-fancy.sh'.
- . test-init.sh
- . tap-setup.sh
- #
- # From manpage Test::Harness::TAP(3):
- #
- # Lines written to standard output matching /^(not )?ok\b/ must be
- # interpreted as test lines. All other lines must not be considered
- # test output.
- #
- # Unfortunately, the exact format of TODO and SKIP directives is not as
- # clearly described in that manpage; but a simple reverse-engineering of
- # the prove(1) utility shows that it is probably given by the perl regex
- # /#\s*(TODO|SKIP)\b/.
- #
- # To avoid problems with backslashes in echo arguments.
- xecho () { printf '%s\n' "$*"; }
- # There are 34 values for $str ...
- for str in \
- \' \
- '"' \
- '`' \
- '#' \
- '$' \
- '!' \
- '\' \
- '/' \
- '&' \
- '%' \
- '(' \
- ')' \
- '|' \
- '^' \
- '~' \
- '?' \
- '*' \
- '+' \
- '-' \
- ',' \
- ':' \
- ';' \
- '=' \
- '<' \
- '>' \
- '@' \
- '[' \
- ']' \
- '{' \
- '}' \
- '\\' \
- '...' \
- '?[a-zA-Z0-9]*' \
- '*.*' \
- ; do
- # ... each of them add 1 pass, 1 fail, ...
- xecho "ok${str}"
- xecho "not ok${str}"
- # ... and (generally) 4 skips, 4 xfails, and 4 xpasses ...
- for settings in \
- 'result="ok" directive=SKIP' \
- 'result="not ok" directive=TODO' \
- 'result="ok" directive=TODO' \
- ; do
- eval "$settings"
- xecho "${result}# ${directive}${str}"
- # ... but 6 skips, 6 xpasses and 6 xfails are to be removed, since
- # they might not work with $str = '#' or $str = '\' ...
- if test x"$str" != x'#' && test x"$str" != x'\'; then
- xecho "${result}${str}#${directive}"
- xecho "${result}${str}# ${tab}${tab} ${directive}"
- xecho "${result}${str}#${directive}${str}"
- fi
- done
- done > all.test
- # Sanity check against a previous use of unportable usages of backslashes
- # with the "echo" builtin.
- if grep '[^\\]\\#' all.test; then
- framework_failure_ "writing backslashes in all.test"
- fi
- # ... so that we finally have:
- pass=34
- fail=34
- xfail=130 # = 4 * 34 - 6
- xpass=130 # = 4 * 34 - 6
- skip=130 # = 4 * 34 - 6
- error=0
- total=$(($pass + $fail + $xfail + $xpass + $skip))
- # Even nastier! But accordingly to the specifics, it should still work.
- for result in 'ok' 'not ok'; do
- echo "${result}{[(<#${tab}TODO>)]}" >> all.test
- done
- echo "ok{[(<#${tab}SKIP>)]}" >> all.test
- # We have to update some test counts.
- xfail=$(($xfail + 1))
- xpass=$(($xpass + 1))
- skip=$(($skip + 1))
- total=$(($total + 3))
- # And add the test plan!
- echo 1..$total >> all.test
- run_make -O -e FAIL check
- $EGREP '^(PASS|FAIL|SKIP).*#.*TODO' stdout && exit 1
- $EGREP '^X?(PASS|FAIL).*#.*SKIP' stdout && exit 1
- count_test_results total=$total pass=$pass fail=$fail skip=$skip \
- xpass=$xpass xfail=$xfail error=$error
- :
|