#!/bin/bash # Print some helpful messages. usage() { echo "Run bash-completion tests" echo echo "The 'tool' is determined automatically from filenames." echo "Unrecognized options are passed through to dejagnu by default." echo echo "If you're impatient you can try --timeout 1 --fast-sync, but beware of strange failures from race conditions" echo echo "Interesting options:" echo " --tool_exec= Test against a different bash executable." echo " --debug Create a dbg.log in the test directory with detailed expect match information." echo " --timeout Change expect timeout from the default of 10 seconds." echo " --debug-xtrace Create an xtrace.log in the test directory with set -x output. Requires bash 4.1." echo " --fast-sync Remove sleep statements from the sync_after_int function" echo echo "Example run: ./run unit/_get_cword.exp unit/compgen.exp" } # Try to set the tool variable; or fail if trying to set different values. set_tool() { if [[ $tool ]]; then if [[ $tool != $1 ]]; then echo "Tool spec mismatch ('$tool' and '$1'). See --usage." exit 1 fi else tool=$1 fi } cd "${BASH_SOURCE[0]%/*}" # Loop over the arguments. args=() while [[ $# > 0 ]]; do case "$1" in --help|--usage) usage; exit 1;; --debug-xtrace) args+=(OPT_BASH_XTRACE=1);; --fast-sync) args+=(OPT_FAST_SYNC=1);; --timeout) shift; timeout=$1;; --timeout=*) timeout=${1/--timeout=};; --tool=*) set_tool "${1#/--tool=}";; --tool) shift; set_tool "$1";; */completion/*.exp|*/unit/*.exp) arg=${1%/*} set_tool "${arg##*/}" args+=("${1##*/}") ;; *) args+=("$1") esac shift done [[ -n $timeout ]] && args+=("OPT_TIMEOUT=$timeout") [[ -z $tool ]] && { echo "Must specify tool somehow"; exit 1; } runtest --outdir log --tool $tool "${args[@]}"