#! /bin/sh
# vim:et:ft=sh:sts=2:sw=2
#
# This script runs the provided unit tests and sends the output to the
# appropriate file.
# Treat unset variables as an error.
set -u
die() {
[ $# -gt 0 ] && echo "error: $@" >&2
exit 1
}
BASE_DIR="`dirname $0`/.."
LIB_DIR="${BASE_DIR}/lib"
# Load libraries.
. ${LIB_DIR}/shflags || die 'unable to load shflags library'
. ${LIB_DIR}/shlib || die 'unable to load shlib library'
. ${LIB_DIR}/versions || die 'unable to load versions library'
# Redefining BASE_DIR now that we have the shlib functions.
BASE_DIR=`shlib_relToAbsPath "${BASE_DIR}"`
BIN_DIR="${BASE_DIR}/bin"
SRC_DIR="${BASE_DIR}/src"
os_name=`versions_osName |sed 's/ /_/g'`
os_version=`versions_osVersion`
# Load external flags.
. ${BIN_DIR}/gen_test_results.flags
# Define flags.
DEFINE_boolean force false 'force overwrite' f
DEFINE_string output_dir "`pwd`" 'output dir' d
DEFINE_string output_file "${os_name}-${os_version}.txt" 'output file' o
DEFINE_boolean dry_run false "supress logging to a file" n
main() {
# Determine output filename.
output="${FLAGS_output_dir:+${FLAGS_output_dir}/}${FLAGS_output_file}"
output=`shlib_relToAbsPath "${output}"`
# Checks.
[ -n "${FLAGS_suite:-}" ] || die 'suite flag missing'
if [ ${FLAGS_dry_run} -eq ${FLAGS_FALSE} -a -f "${output}" ]; then
if [ ${FLAGS_force} -eq ${FLAGS_TRUE} ]; then
rm -f "${output}"
else
echo "not overwriting '${output}'" >&2
exit ${FLAGS_ERROR}
fi
fi
if [ ${FLAGS_dry_run} -eq ${FLAGS_FALSE} ]; then
touch "${output}" 2>/dev/null || die "unable to write to '${output}'"
fi
# Run tests.
(
cd "${SRC_DIR}";
if [ ${FLAGS_dry_run} -eq ${FLAGS_FALSE} ]; then
./${FLAGS_suite} |tee "${output}"
else
./${FLAGS_suite}
fi
)
if [ ! ${FLAGS_dry_run} ]; then
echo >&2
echo "output written to '${output}'" >&2
fi
}
FLAGS "$@" || exit $?
[ ${FLAGS_help} -eq ${FALSE} ] || exit
eval set -- "${FLAGS_ARGV}"
main "$@"