--- a/build-aux/testrunner.sh +++ b/build-aux/testrunner.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh # testrunner.sh # # Copyright (C) 2006-2008 Jürg Billeter @@ -26,14 +26,22 @@ EXTRA_ENVIRONMENT_FILE=tests-extra-environment.sh +sanitize_name() { + printf '%s\n' "$1" | tr '/-' '__' +} + +package_flags() { + for package in $PACKAGES; do + printf ' --pkg %s' "$package" + done +} + testfile=$1 -testdirname="$(dirname $testfile)" +testdirname=$(dirname "$testfile") testfile=${testfile#$srcdir/} -testpath=${testfile/.*/} -testpath=${testpath//\//_} -testpath=${testpath//-/_} -if test -f $testdirname/$EXTRA_ENVIRONMENT_FILE; then - source $testdirname/$EXTRA_ENVIRONMENT_FILE +testpath=$(sanitize_name "${testfile%.*}") +if test -f "$testdirname/$EXTRA_ENVIRONMENT_FILE"; then + . "$testdirname/$EXTRA_ENVIRONMENT_FILE" fi vapidir=$abs_top_srcdir/vapi @@ -57,21 +65,25 @@ # Incorporate the TEST_CFLAGS. for cflag in ${TEST_CFLAGS}; do - VALAFLAGS="${VALAFLAGS} -X ${cflag}" + VALAFLAGS="${VALAFLAGS} -X ${cflag}" done # Incorporate the user's CFLAGS. Matters if the user decided to insert # -m32 in CFLAGS, for example. for cflag in ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do - if [[ ! $cflag =~ ^\-O[0-9]$ ]]; then - VALAFLAGS="${VALAFLAGS} -X ${cflag}" - fi + case $cflag in + -O[0-9]) + ;; + *) + VALAFLAGS="${VALAFLAGS} -X ${cflag}" + ;; + esac done -function testheader() { +testheader() { if [ "$1" = "Packages:" ]; then shift - PACKAGES="$PACKAGES $@" + PACKAGES="$PACKAGES $*" elif [ "$*" = "Invalid Code" ]; then INVALIDCODE=1 INHEADER=0 @@ -84,21 +96,19 @@ fi } -function sourceheader() { +sourceheader() { if [ "$1" = "Program:" ]; then if [ "$2" = "server" ]; then ISSERVER=1 fi - ns=$testpath/$2 - ns=${ns//\//_} - ns=${ns//-/_} + ns=$(sanitize_name "$testpath/$2") SOURCEFILE=$ns.vala SOURCEFILES="$SOURCEFILES $SOURCEFILE" - elif [ $GIRWRITERTEST -eq 1 ]; then + elif [ "$GIRWRITERTEST" -eq 1 ]; then if [ "$1" = "Input:" ]; then ns=$testpath SOURCEFILE=$testpath.vala - cat < $SOURCEFILE + cat < "$SOURCEFILE" [CCode (cprefix = "Test", gir_namespace = "Test", gir_version = "1.2", lower_case_cprefix = "test_")] namespace Test { EOF @@ -108,26 +118,26 @@ fi } -function sourceend() { - if [ $INVALIDCODE -eq 1 ]; then - PACKAGEFLAGS=$([ -z "$PACKAGES" ] || echo $PACKAGES | xargs -n 1 echo -n " --pkg") +sourceend() { + if [ "$INVALIDCODE" -eq 1 ]; then + PACKAGEFLAGS=$(package_flags) echo '' > prepare echo "$VALAC $VALAFLAGS $PACKAGEFLAGS -C $SOURCEFILE" > check echo "RET=\$?" >> check echo "if [ \$RET -ne 1 ]; then exit 1; fi" >> check echo "exit 0" >> check - elif [ $GIRWRITERTEST -eq 1 ]; then - if [ $PART -eq 1 ]; then - echo "}" >> $SOURCEFILE + elif [ "$GIRWRITERTEST" -eq 1 ]; then + if [ "$PART" -eq 1 ]; then + echo "}" >> "$SOURCEFILE" fi - PACKAGEFLAGS=$([ -z "$PACKAGES" ] || echo $PACKAGES | xargs -n 1 echo -n " --pkg") + PACKAGEFLAGS=$(package_flags) echo "$VALAC $VALAFLAGS $PACKAGEFLAGS -C --library test -H test.h --gir Test-1.2.gir $ns.vala && tail -n +4 Test-1.2.gir|sed '\$d'|diff -wu Test-1.2.gir.ref -" > check else - PACKAGEFLAGS=$([ -z "$PACKAGES" ] || echo $PACKAGES | xargs -n 1 echo -n " --pkg") + PACKAGEFLAGS=$(package_flags) echo "$VALAC $VALAFLAGS $PACKAGEFLAGS -o $ns$EXEEXT $SOURCEFILE" >> prepare - if [ $DBUSTEST -eq 1 ]; then + if [ "$DBUSTEST" -eq 1 ]; then echo "UPDATE_EXPECTED=$UPDATE_EXPECTED" >> prepare - if [ $ISSERVER -eq 1 ]; then + if [ "$ISSERVER" -eq 1 ]; then echo "if [ -n \"$UPDATE_EXPECTED\" ]; then" >> prepare echo " cp -p ${SOURCEFILE%.*}.c $abs_srcdir/${testfile%.*}_server.c-expected" >> prepare echo "elif [ -f $abs_srcdir/${testfile%.*}_server.c-expected ]; then" >> prepare @@ -152,38 +162,40 @@ unset SOURCEFILE testdir=_test.$$ -rm -rf ./$testdir -mkdir $testdir -cd $testdir +rm -rf "./$testdir" +mkdir "$testdir" +cd "$testdir" case "$testfile" in -*.gs) - SOURCEFILE=$testpath.gs - ;& -*.vala) +*.gs|*.vala) + case "$testfile" in + *.gs) + SOURCEFILE=$testpath.gs + ;; + esac SOURCEFILE=${SOURCEFILE:-$testpath.vala} - cat "$abs_srcdir/$testfile" > ./$SOURCEFILE - PACKAGEFLAGS=$([ -z "$PACKAGES" ] || echo $PACKAGES | xargs -n 1 echo -n " --pkg") - $VALAC $VALAFLAGS $PACKAGEFLAGS -o $testpath$EXEEXT $SOURCEFILE + cat "$abs_srcdir/$testfile" > "./$SOURCEFILE" + PACKAGEFLAGS=$(package_flags) + $VALAC $VALAFLAGS $PACKAGEFLAGS -o "$testpath$EXEEXT" "$SOURCEFILE" if [ -n "$UPDATE_EXPECTED" ]; then - cp -p ${SOURCEFILE%.*}.c $abs_srcdir/${testfile%.*}.c-expected + cp -p "${SOURCEFILE%.*}.c" "$abs_srcdir/${testfile%.*}.c-expected" if [ -f test.h ]; then - cp -p test.h $abs_srcdir/${testfile%.*}.h-expected || exit 1 + cp -p test.h "$abs_srcdir/${testfile%.*}.h-expected" || exit 1 fi - elif [ -f $abs_srcdir/${testfile%.*}.c-expected ]; then - diff -wu $abs_srcdir/${testfile%.*}.c-expected ${SOURCEFILE%.*}.c || exit 1 - if [ -f $abs_srcdir/${testfile%.*}.h-expected ]; then - diff -wu $abs_srcdir/${testfile%.*}.h-expected test.h || exit 1 + elif [ -f "$abs_srcdir/${testfile%.*}.c-expected" ]; then + diff -wu "$abs_srcdir/${testfile%.*}.c-expected" "${SOURCEFILE%.*}.c" || exit 1 + if [ -f "$abs_srcdir/${testfile%.*}.h-expected" ]; then + diff -wu "$abs_srcdir/${testfile%.*}.h-expected" test.h || exit 1 fi fi - ./$testpath$EXEEXT + "./$testpath$EXEEXT" ;; *.gir) SOURCEFILE=$testpath.gir - cat "$abs_srcdir/$testfile" > ./$SOURCEFILE - PACKAGEFLAGS=$([ -z "$PACKAGES" ] || echo $PACKAGES | xargs -n 1 echo -n " --pkg") - $VAPIGEN $VAPIGENFLAGS $PACKAGEFLAGS --library $testpath $SOURCEFILE || exit 1 - tail -n +3 ${SOURCEFILE%.*}.vapi | diff -wu $abs_srcdir/${testfile%.*}.vapi-expected - || exit 1 + cat "$abs_srcdir/$testfile" > "./$SOURCEFILE" + PACKAGEFLAGS=$(package_flags) + $VAPIGEN $VAPIGENFLAGS $PACKAGEFLAGS --library "$testpath" "$SOURCEFILE" || exit 1 + tail -n +3 "${SOURCEFILE%.*}.vapi" | diff -wu "$abs_srcdir/${testfile%.*}.vapi-expected" - || exit 1 ;; *.test) rm -f prepare check @@ -195,37 +207,41 @@ GIRWRITERTEST=0 DBUSTEST=0 ISSERVER=0 - while IFS="" read -r line; do - if [ $PART -eq 0 ]; then + while IFS= read -r line; do + if [ "$PART" -eq 0 ]; then if [ -n "$line" ]; then testheader $line else PART=1 fi else - if [ $INHEADER -eq 1 ]; then + if [ "$INHEADER" -eq 1 ]; then if [ -n "$line" ]; then sourceheader $line else INHEADER=0 fi else - if echo "$line" | grep -q "^[A-Za-z]\+:"; then + if printf '%s\n' "$line" | grep -q '^[A-Za-z][A-Za-z]*:'; then sourceend - PART=$(($PART + 1)) + PART=$((PART + 1)) INHEADER=1 sourceheader $line else - echo "$line" >> $SOURCEFILE + echo "$line" >> "$SOURCEFILE" fi fi fi done < "$abs_srcdir/$testfile" sourceend - cat prepare check > $ns.check - $run_prefix bash $ns.check + cat prepare check > "$ns.check" + if [ -n "$run_prefix" ]; then + $run_prefix sh "$ns.check" + else + sh "$ns.check" + fi ;; esac cd .. -rm -rf ./$testdir +rm -rf "./$testdir"