#!/bin/bash source "$(dirname "$0")"/../tap.sh || exit 1 script=${1:-${PMTEST_SCRIPT_DIR}makepkg-template} if ! type -p "$script" &>/dev/null; then tap_bail "makepkg-template executable (%s) could not be located" "${script}" exit 1 fi TMPDIR="$(mktemp -d "/tmp/${0##*/}.XXXXXX")" trap "rm -rf '${TMPDIR}'" EXIT TERM cp -r "${0%/*}/makepkg-template-tests" "$TMPDIR/makepkg-template-tests" # normalize paths script="$(readlink -f $(type -p "$script"))" cd "$TMPDIR" testdir="./makepkg-template-tests" total=$(find "$testdir" -maxdepth 1 -mindepth 1 -type d | wc -l) if [[ -z "$total" ]]; then tap_bail "unable to determine total number of tests" exit 1 fi tap_plan "$((total*3))" run_test() { local testcase=$1 exitcode expected_result expected_output local -a arguments local -i expected_exitcode=-1 [[ -f "$testdir/$testcase/testcase-config" ]] || continue source "$testdir/$testcase/testcase-config" mkdir "$TMPDIR/$testcase" touch "$TMPDIR/$testcase/result" # work around autotools not putting symlinks into the release tarball [[ -d "$TMPDIR/$testdir/$testcase/templates" ]] || mkdir "$TMPDIR/$testdir/$testcase/templates" if type -t _setup_testcase >/dev/null; then cd "$TMPDIR/$testdir/$testcase" _setup_testcase unset -f _setup_testcase cd "$TMPDIR" fi LC_ALL=C "$script" \ --template-dir "$testdir/$testcase/templates" \ -p "$testdir/$testcase/PKGBUILD" \ -o "$TMPDIR/$testcase/result" \ &> "$TMPDIR/$testcase/output" "${arguments[@]}" exitcode=$? tap_is_int "$exitcode" "$expected_exitcode" "$testcase exitcode" tap_diff "$TMPDIR/$testcase/output" <(printf "%s" "$expected_output") "$testcase output" tap_diff "$TMPDIR/$testcase/result" <(printf "%s" "$expected_result") "$testcase resulting PKGBUILD" } for dir in "$testdir/"*; do if [[ -d "$dir" ]]; then run_test "${dir##*/}" fi done tap_finish