#! /bin/sh
# Copyright (C) 2011-2024 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 <https://www.gnu.org/licenses/>.

# Basic TAP test protocol support:
#  - dependencies between test scripts

. test-init.sh

cat > Makefile.am << 'END'
# The tests are *deliberately* listed in inverse order here.
TESTS = c.test b.test a.test
b.log: a.log
c.log: b.log
END

. tap-setup.sh

cat > a.test << 'END'
#!/bin/sh
echo 1..2
echo ok 1
# Creative quoting below to please maintainer-check.
sleep '3'
echo ok 2
: > a.run
END

cat > b.test << 'END'
#!/bin/sh
echo 1..2
if test -f a.run; then
  echo ok 1
else
  echo not ok 1
fi
# Creative quoting below to please maintainer-check.
sleep '3'
echo ok 2
: > b.run
END

cat > c.test << 'END'
#!/bin/sh
echo 1..1
test -f b.run || { echo 'Bail out!'; exit 1; }
echo ok 1
rm -f a.run b.run
END

chmod a+x *.test

run_make -O check
count_test_results total=5 pass=5 fail=0 xpass=0 xfail=0 skip=0 error=0

cat > exp << 'END'
PASS: a.test 1
PASS: a.test 2
PASS: b.test 1
PASS: b.test 2
PASS: c.test 1
END

grep ': [abc]\.test' stdout > got

cat exp
cat got
diff exp got

# TODO: it would be nice to also redo the checks forcing parallel make...

:
