Signed-off-by: Florian Pritz <[email protected]>
---
 Makefile.am                                    |  2 +
 test/scripts/Makefile.am                       |  1 +
 test/scripts/makepkg-template-tests/.gitignore |  3 +
 test/scripts/makepkg-template_test.sh          | 86 ++++++++++++++++++++++++++
 4 files changed, 92 insertions(+)
 create mode 100644 test/scripts/makepkg-template-tests/.gitignore
 create mode 100755 test/scripts/makepkg-template_test.sh

diff --git a/Makefile.am b/Makefile.am
index e9b3dfa..ab669ef 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -28,6 +28,7 @@ $(top_srcdir)/test/pacman/tests/TESTS: $(wildcard 
test/pacman/tests/*.py*)
 
 TESTS =  test/scripts/parseopts_test.sh \
                                 test/scripts/human_to_size_test.sh \
+                                test/scripts/makepkg-template_test.sh \
                                 test/scripts/pacman-db-upgrade-v9.py \
                                 test/util/pacsorttest.sh \
                                 test/util/vercmptest.sh
@@ -37,6 +38,7 @@ TEST_SUITE_LOG = test/test-suite.log
 TEST_EXTENSIONS = .py
 AM_TESTS_ENVIRONMENT = \
        PMTEST_UTIL_DIR=$(top_builddir)/src/util/; export PMTEST_UTIL_DIR; \
+       PMTEST_SCRIPT_DIR=$(top_srcdir)/scripts/; export PMTEST_SCRIPT_DIR; \
        PMTEST_SCRIPTLIB_DIR=$(top_srcdir)/scripts/library/; export 
PMTEST_SCRIPTLIB_DIR;
 LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) \
                                                                 
$(top_srcdir)/build-aux/tap-driver.sh
diff --git a/test/scripts/Makefile.am b/test/scripts/Makefile.am
index 8d6bc84..ed1a951 100644
--- a/test/scripts/Makefile.am
+++ b/test/scripts/Makefile.am
@@ -1,6 +1,7 @@
 check_SCRIPTS = \
        parseopts_test.sh \
        pacman-db-upgrade-v9.py \
+       makepkg-template_test.sh \
        human_to_size_test.sh
 
 noinst_SCRIPTS = $(check_SCRIPTS)
diff --git a/test/scripts/makepkg-template-tests/.gitignore 
b/test/scripts/makepkg-template-tests/.gitignore
new file mode 100644
index 0000000..c6fc2ee
--- /dev/null
+++ b/test/scripts/makepkg-template-tests/.gitignore
@@ -0,0 +1,3 @@
+result
+output
+output_full
diff --git a/test/scripts/makepkg-template_test.sh 
b/test/scripts/makepkg-template_test.sh
new file mode 100755
index 0000000..b036b74
--- /dev/null
+++ b/test/scripts/makepkg-template_test.sh
@@ -0,0 +1,86 @@
+#!/bin/bash
+
+declare -i testcount=0 fail=0 pass=0 total=0
+
+# source the library function
+scriptdir=${1:-${PMTEST_SCRIPT_DIR}}
+if [[ -z $scriptdir || ! -f $scriptdir/makepkg-template ]]; then
+       printf "Bail out! makepkg-template executable (%s) could not be 
located\n" "${scriptdir}/makepkg-template"
+       exit 1
+fi
+
+testdir="${0%/*}/makepkg-template-tests"
+
+total=$(find "$testdir" -maxdepth 1 -mindepth 1 -type d | wc -l)
+
+run_test() {
+       local testcase=$1 exitcode
+       local -i failed=0
+
+       (( ++testcount ))
+
+       local -a arguments
+
+       if [[ -f "$testdir/$testcase/arguments" ]]; then
+               arguments=($(cat "$testdir/$testcase/arguments"))
+       fi
+
+       rm -f "$testdir/$testcase/result"
+
+       "$scriptdir/makepkg-template" \
+               --template-dir "$testdir/$testcase/templates" \
+               -p "$testdir/$testcase/PKGBUILD" \
+               -o "$testdir/$testcase/result" \
+               &> "$testdir/$testcase/output_full" "${arguments[@]}"
+       exitcode=$?
+
+       sed "$testdir/$testcase/output_full" >"$testdir/$testcase/output" \
+               -e 's|./test/scripts/|./|' \
+               -e 's| at '$scriptdir'/makepkg-template line [0-9]\+\.$||'
+       printf "%s\n" "$exitcode" >> "$testdir/$testcase/output"
+
+       if [[ -f "$testdir/$testcase/result" ]]; then
+               if ! diff -u "$testdir/$testcase/"{result,expected_result}; then
+                       failed=1
+               fi
+       else
+               if [[ -f "$testdir/$testcase/expected_result" ]]; then
+                       echo "$testcase: Found expected_result file but no 
result file"
+                       failed=1
+               fi
+       fi
+
+       if ! diff -u "$testdir/$testcase/"{output,expected_output}; then
+               failed=1
+       fi
+
+       if ((!failed)); then
+               (( ++pass ))
+               printf "ok %d - %s\n" "$testcount" "$input"
+       else
+               (( ++fail ))
+               printf "not ok %d - %s\n" "$testcount" "$input"
+               printf '# [TEST %3s]: FAIL\n' "$testcount"
+       fi
+}
+
+summarize() {
+       if (( !fail )); then
+               printf '# All %s tests successful\n\n' "$testcount"
+               exit 0
+       else
+               printf '# %s of %s tests failed\n\n' "$fail" "$testcount"
+               exit 1
+       fi
+}
+trap 'summarize' EXIT
+
+printf '# Beginning makepkg-template tests\n'
+
+echo "1..$total"
+
+for dir in "$testdir/"*; do
+       if [[ -d "$dir" ]]; then
+               run_test "${dir##*/}"
+       fi
+done
-- 
2.2.1

Reply via email to