#! /bin/sh # Copyright (C) 2011-2012 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 . # TAP support: # - missing, unreadable, or not-executable test scripts cause proper # error reports . ./defs || Exit 1 fetch_tap_driver plan_ 6 cat >> configure.ac < Makefile.am << 'END' LOG_DRIVER = $(srcdir)/tap-driver TEST_LOG_DRIVER = $(LOG_DRIVER) TESTS = none.test noread noexec.test none.test: END cat > noexec.test <<'END' #!/bin/sh echo 1..1 echo ok 1 END cp noexec.test noread chmod a-r noread $ACLOCAL $AUTOCONF $AUTOMAKE ./configure if $MAKE check >stdout; then r='not ok' else r='ok' fi cat stdout result_ "$r" '"make check" returns non-zero exit status' # FIXME: maybe grep for stricter error messages in the next checks? command_ok_ "non-existent test is reported" \ grep '^ERROR: none\.test' stdout desc="non-executable test is reported" # Redirect output to avoid confusing automake's testsuite own TAP driver. if ./noexec.test >/dev/null; then skip_ -r "any file is executable" "$desc" else command_ok_ "$desc" -- grep '^ERROR: noexec\.test' stdout fi desc="non-readable test is reported" if test -r noread; then skip_ -r "any file is readable" "$desc" else command_ok_ "$desc" -- grep '^ERROR: noread' stdout fi # Check that no spurious test result is reported. This is lower-priority # (and in fact the check currently fails for our awk-based driver). directive= if test $am_tap_implementation = shell; then directive=TODO else # Older versions of IPC::Open3 (e.g., version 1.05 on perl 5.12.4 or # version 1.0103 on perl 5.6.2) fail to properly trap errors in exec(2) # calls in the child process; hence, the TAP driver cannot be properly # informed of such error. if $PERL -w -e ' use IPC::Open3 qw/open3/; $@ = ""; eval { open3(*STDIN, *STDOUT, *STDERR, "am--no-such-command") }; $@ =~ m/\bopen3:.*am--no-such-command/ or die "Bad \$@ value: \"$@\"\n"; '; then : # OK. IPC::Open3 should be good enough. else for s in '"missing plan" message' 'results'; do skip_ -r "IPC::Open3 not good enough" "no spurious $s" done Exit 0 fi fi command_ok_ 'no spurious "missing plan" message' \ -D "$directive" -- not grep 'missing.* plan' stdout command_ok_ 'no spurious results' \ -D "$directive" -r 'still get "missing plan"' \ count_test_results total=3 pass=0 fail=0 xpass=0 xfail=0 skip=0 error=3 :