#! /bin/sh # Copyright (C) 2010 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 . # Test to make sure dejagnu tests, automake-style tests, and check-local # target can coexist. required=runtest . ./defs || Exit 1 set -e cat >> configure.in << 'END' AC_OUTPUT END cat > Makefile.am << 'END' AUTOMAKE_OPTIONS = EXTRA_DIST = CLEANFILES = END ## Simple tests. cat > a.test << 'END' #!/bin/sh exit ${A_EXIT_STATUS-0} END cat > b.test << 'END' #!/bin/sh exit ${B_EXIT_STATUS-0} END chmod +x a.test b.test cat >> Makefile.am << 'END' TESTS = a.test b.test EXTRA_DIST += $(TESTS) END A_EXIT_STATUS=0; export A_EXIT_STATUS B_EXIT_STATUS=0; export B_EXIT_STATUS ## DejaGnu tests. cat >> Makefile.am << 'END' AUTOMAKE_OPTIONS += dejagnu DEJATOOL = hammer spanner AM_RUNTESTFLAGS = HAMMER=$(srcdir)/hammer SPANNER=$(srcdir)/spanner EXTRA_DIST += hammer.test/hammer.exp EXTRA_DIST += spanner.test/spanner.exp END cat > hammer << 'END' #! /bin/sh echo "Everything looks like a ${NAIL-nail} to me!" END NAIL=nail; export NAIL cat > spanner << 'END' #! /bin/sh echo "I'm a right spanner!" END chmod +x hammer spanner mkdir hammer.test spanner.test cat > hammer.test/hammer.exp << 'END' set test test_hammer spawn $HAMMER expect { "Everything looks like a nail to me!" { pass "$test" } default { fail "$test" } } END cat > spanner.test/spanner.exp << 'END' set test test_spanner spawn $SPANNER expect { "I'm a right spanner!" { pass "$test" } default { fail "$test" } } END ## User-defined extra tests. cat >> Makefile.am <<'END' check-local: case $$CHECKLOCAL_EXIT_STATUS in \ 0) echo 'check-local succeded :-)';; \ *) echo 'check-local failed :-(';; \ esac >local.log exit $$CHECKLOCAL_EXIT_STATUS CLEANFILES += local.log END CHECKLOCAL_EXIT_STATUS=0; export CHECKLOCAL_EXIT_STATUS ## Go with the testcase execution. $ACLOCAL $AUTOCONF $AUTOMAKE --add-missing for vpath in : false; do if $vpath; then srcdir=.. mkdir build_ cd build_ else srcdir=. fi if test -f config.status; then $MAKE distclean fi $srcdir/configure $MAKE check test -f hammer.log test -f hammer.sum test -f spanner.log test -f spanner.sum # This checks will be run only by the autogenerated `check12-p.test'. if test x"$parallel_tests" = x"yes"; then cat test-suite.log grep '^PASS: a\.test (exit: 0)' a.log grep '^PASS: b\.test (exit: 0)' b.log else : fi grep 'check-local succeded :-)' local.log cp -f config.status config-status.sav $MAKE distclean test ! -r hammer.log test ! -r hammer.sum test ! -r spanner.log test ! -r spanner.sum test ! -r test-suite.log test ! -r a.log test ! -r b.log test ! -r local.log mv -f config-status.sav config.status ./config.status NAIL=screw $MAKE check && Exit 1 test -f hammer.log test -f hammer.sum test -f spanner.log test -f spanner.sum grep 'FAIL: test_hammer' hammer.sum grep 'FAIL:' spanner.sum && Exit 1 B_EXIT_STATUS=1 $MAKE check && Exit 1 # This checks will be run only by the autogenerated `check12-p.test'. if test x"$parallel_tests" = x"yes"; then cat test-suite.log grep '^PASS: a\.test (exit: 0)' a.log grep '^FAIL: b\.test (exit: 1)' b.log grep '^FAIL: b\.test (exit: 1)' test-suite.log else :; fi CHECKLOCAL_EXIT_STATUS=1 $MAKE check && Exit 1 grep 'check-local failed :-(' local.log # Do not trust the exit status of `make -k'. NAIL=screw B_EXIT_STATUS=23 CHECKLOCAL_EXIT_STATUS=1 $MAKE -k check || : test -f hammer.log test -f hammer.sum test -f spanner.log test -f spanner.sum grep 'FAIL: test_hammer' hammer.sum grep 'FAIL:' spanner.sum && Exit 1 # This checks will be run only by the autogenerated `check12-p.test'. if test x"$parallel_tests" = x"yes"; then cat test-suite.log grep '^PASS: a\.test (exit: 0)' a.log grep '^FAIL: b\.test (exit: 23)' b.log grep '^FAIL: b\.test (exit: 23)' test-suite.log else :; fi grep 'check-local failed :-(' local.log cd $srcdir done $MAKE distcheck :