| 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  donedone > 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=34fail=34xfail=130 # = 4 * 34 - 6xpass=130 # = 4 * 34 - 6skip=130  # = 4 * 34 - 6error=0total=$(($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.testdoneecho "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.testrun_make -O -e FAIL check$EGREP '^(PASS|FAIL|SKIP).*#.*TODO' stdout && exit 1$EGREP '^X?(PASS|FAIL).*#.*SKIP' stdout && exit 1count_test_results total=$total pass=$pass fail=$fail skip=$skip \                   xpass=$xpass xfail=$xfail error=$error:
 |