diff --git a/.gitignore b/.gitignore
index a2eff82..6401ebd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -29,6 +29,18 @@
/tests/example_exec.o
/tests/example_vfork
/tests/example_vfork.o
-/tests/run.sh.log
-/tests/run.sh.trs
+/tests/test_error.sh.log
+/tests/test_error.sh.trs
+/tests/test_example.sh.log
+/tests/test_example.sh.trs
+/tests/test_exec.sh.log
+/tests/test_exec.sh.trs
+/tests/test_noforce.sh.log
+/tests/test_noforce.sh.trs
+/tests/test_redirects.sh.log
+/tests/test_redirects.sh.trs
+/tests/test_simple.sh.log
+/tests/test_simple.sh.trs
+/tests/test_vfork.sh.log
+/tests/test_vfork.sh.trs
/tests/test-suite.log
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 32d9ca3..3ccce24 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,18 +1,24 @@
-TESTS = run.sh
+TESTS = test_example.sh \
+ test_exec.sh \
+ test_noforce.sh \
+ test_redirects.sh \
+ test_simple.sh
check_PROGRAMS = example example_exec
example_SOURCES = example.c
example_exec_SOURCES = example_exec.c
if HAVE_ERROR_H
+ TESTS += test_error.sh
check_PROGRAMS += example_error
example_error_SOURCES = example_error.c
endif
if HAVE_VFORK
+ TESTS += test_vfork.sh
check_PROGRAMS += example_vfork
example_vfork_SOURCES = example_vfork.c
endif
-dist_check_SCRIPTS = run.sh lib.sh
+dist_check_SCRIPTS = $(TESTS) lib.sh
dist_check_DATA = example.expected \
example_error.expected \
example_exec.expected \
@@ -24,5 +30,5 @@ dist_check_DATA = example.expected \
example_simple.sh \
example_simple.sh.expected
-# Used by run.sh.
+# Used by lib.sh.
export EGREP
diff --git a/tests/lib.sh b/tests/lib.sh
index 3e29a55..b1c8bc0 100644
--- a/tests/lib.sh
+++ b/tests/lib.sh
@@ -15,13 +15,27 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
+set -e
+
# Allow running the script directly without running `make check`.
test "x$builddir" = x && builddir=.
test "x$EGREP" = x && EGREP='grep -E'
-# In case we are called with LD_PRELOAD already set.
-unset LD_PRELOAD
+# The tests fail if running under coloredstderr because the tests redirect
+# stderr to stdout which is detected by coloredstderr :D (and not colored as a
+# result). Therefore remove LD_PRELOAD and re-exec the test.
+if test -n "$LD_PRELOAD"; then
+ unset LD_PRELOAD
+ exec "$0"
+fi
+
+# Use valgrind to run the tests if it's available.
+valgrind_cmd=
+if type valgrind >/dev/null 2>&1; then
+ valgrind_cmd='valgrind --quiet --error-exitcode=1'
+fi
+
# Clean locale for reproducible tests.
LC_ALL=C
unset LANGUAGE
@@ -56,6 +70,8 @@ run_test() {
shift
shift
+ output="output-$$"
+
(
# Standard setup.
LD_PRELOAD="$library"
@@ -74,12 +90,12 @@ run_test() {
export COLORED_STDERR_FORCE_WRITE
fi
- $valgrind_cmd "$@" "$testcase" > output 2>&1
+ $valgrind_cmd "$@" "$testcase" > "$output" 2>&1
)
- diff -u "$expected" output \
+ diff -u "$expected" "$output" \
|| die 'failed!'
- rm output
+ rm "$output"
echo 'passed.'
}
diff --git a/tests/run.sh b/tests/run.sh
deleted file mode 100755
index a203d48..0000000
--- a/tests/run.sh
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/bin/sh
-
-# Test suite for coloredstderr.
-
-# Copyright (C) 2013 Simon Ruderich
-#
-# 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 3 of the License, 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 .
-
-
-set -e
-
-
-# The tests fail if running under coloredstderr because the tests redirect
-# stderr to stdout which is detected by coloredstderr :D (and not colored as a
-# result). Therefore remove LD_PRELOAD and re-exec the test.
-if test -n "$LD_PRELOAD"; then
- unset LD_PRELOAD
- exec "$0"
-fi
-
-test "x$srcdir" = x && srcdir=.
-. "$srcdir/lib.sh"
-
-
-# Use valgrind to run the tests if it's available.
-valgrind_cmd=
-if type valgrind >/dev/null 2>&1; then
- valgrind_cmd='valgrind --quiet --error-exitcode=1'
-fi
-
-
-# Make sure we don't write to non-ttys by default.
-force_write=
-test_script example_noforce.sh
-force_write=1
-
-test_script example_simple.sh
-test_script example_redirects.sh
-test_program example
-test_program example_exec
-test -x "$builddir/example_vfork" && test_program example_vfork
-test -x "$builddir/example_error" && test_program example_error
-
-test_script_subshell example_simple.sh
-test_script_subshell example_redirects.sh
-test_program_subshell example
-test_program_subshell example_exec
-test -x "$builddir/example_vfork" && test_program_subshell example_vfork
-test -x "$builddir/example_error" && test_program_subshell example_error
-
-# Necessary in case the test -x evaluates to false.
-true
diff --git a/tests/test_error.sh b/tests/test_error.sh
new file mode 100755
index 0000000..f01c11b
--- /dev/null
+++ b/tests/test_error.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+# Copyright (C) 2013 Simon Ruderich
+#
+# 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 3 of the License, 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 "x$srcdir" = x && srcdir=.
+. "$srcdir/lib.sh"
+
+test_program example_error
+test_program_subshell example_error
diff --git a/tests/test_example.sh b/tests/test_example.sh
new file mode 100755
index 0000000..5a1470f
--- /dev/null
+++ b/tests/test_example.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+# Copyright (C) 2013 Simon Ruderich
+#
+# 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 3 of the License, 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 "x$srcdir" = x && srcdir=.
+. "$srcdir/lib.sh"
+
+test_program example
+test_program_subshell example
diff --git a/tests/test_exec.sh b/tests/test_exec.sh
new file mode 100755
index 0000000..7f8e85e
--- /dev/null
+++ b/tests/test_exec.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+# Copyright (C) 2013 Simon Ruderich
+#
+# 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 3 of the License, 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 "x$srcdir" = x && srcdir=.
+. "$srcdir/lib.sh"
+
+test_program example_exec
+test_program_subshell example_exec
diff --git a/tests/test_noforce.sh b/tests/test_noforce.sh
new file mode 100755
index 0000000..dad525d
--- /dev/null
+++ b/tests/test_noforce.sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+# Copyright (C) 2013 Simon Ruderich
+#
+# 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 3 of the License, 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 "x$srcdir" = x && srcdir=.
+. "$srcdir/lib.sh"
+
+# Make sure we don't write to non-ttys by default.
+force_write=
+test_script example_noforce.sh
+force_write=1
diff --git a/tests/test_redirects.sh b/tests/test_redirects.sh
new file mode 100755
index 0000000..1737566
--- /dev/null
+++ b/tests/test_redirects.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+# Copyright (C) 2013 Simon Ruderich
+#
+# 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 3 of the License, 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 "x$srcdir" = x && srcdir=.
+. "$srcdir/lib.sh"
+
+test_script example_redirects.sh
+test_script_subshell example_redirects.sh
diff --git a/tests/test_simple.sh b/tests/test_simple.sh
new file mode 100755
index 0000000..b78c88d
--- /dev/null
+++ b/tests/test_simple.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+# Copyright (C) 2013 Simon Ruderich
+#
+# 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 3 of the License, 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 "x$srcdir" = x && srcdir=.
+. "$srcdir/lib.sh"
+
+test_script example_simple.sh
+test_script_subshell example_simple.sh
diff --git a/tests/test_vfork.sh b/tests/test_vfork.sh
new file mode 100755
index 0000000..7e00d44
--- /dev/null
+++ b/tests/test_vfork.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+# Copyright (C) 2013 Simon Ruderich
+#
+# 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 3 of the License, 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 "x$srcdir" = x && srcdir=.
+. "$srcdir/lib.sh"
+
+test_program example_vfork
+test_program_subshell example_vfork