wine/tools/runtest

150 lines
3.9 KiB
Bash
Executable File

#!/bin/sh
#
# Wrapper script to run tests from inside the Wine tree
#
# Usage: runtest [options] input_file
#
# Copyright 2002 Alexandre Julliard
# Copyright 2002 Dimitrie O. Paun
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
#
usage()
{
cat >&2 <<EOF
Usage: $0 [options] [input_file]
input_file: the source code for the test program
Options:
-q quiet mode
-v verbose mode (can be specified multiple times)
-i interactive mode (runs even more tests)
-s announce successful tests
-p prog name of the program to run for C tests
-P name set the current platform name
-M names set the module names to be tested
-T dir set Wine tree top directory (autodetected if not specified)
EOF
exit 1
}
# Default values
platform=$WINETEST_PLATFORM
WINETEST_DEBUG=${WINETEST_DEBUG:-1}
# parse command-line options
while [ "$#" -gt 0 ]; do
case "$1" in
-h)
usage
;;
-p)
shift; program="$1"
;;
-q)
WINETEST_DEBUG=0
;;
-v)
WINETEST_DEBUG=`expr $WINETEST_DEBUG + 1`
;;
-i)
WINETEST_INTERACTIVE=1
export WINETEST_INTERACTIVE
;;
-s)
WINETEST_REPORT_SUCCESS=1
export WINETEST_REPORT_SUCCESS
;;
-P)
shift; platform="$1"
;;
-M)
shift; modules="$1"
;;
-T)
shift; topobjdir="$1"
if [ ! -d "$topobjdir" ]; then usage; fi
;;
*)
break
;;
esac
shift
done
if [ -z "$program" ]; then
# try to autodetect the test program name based on the working directory
working_path=`pwd`
case $working_path in
*/dlls/*/tests)
parent_path=`dirname "$working_path"`
program=`basename "$parent_path"`_test.exe.so
;;
*/dlls/*)
program=tests/`basename "$working_path"`_test.exe.so
;;
*/programs/*/tests)
parent_path=`dirname "$working_path"`
program=`basename "$parent_path"`.exe_test.exe.so
;;
*/programs/*)
program=tests/`basename "$working_path"`.exe_test.exe.so
;;
esac
fi
if [ ! -f "$program" ]; then
echo "Can't find the test program, use the -p argument to specify one" 1>&2
usage
fi
# check/detect topobjdir
if [ -n "$topobjdir" ]; then
if [ ! -f "$topobjdir/server/wineserver" ]
then
echo "Wrong -T argument, $topobjdir/server/wineserver does not exist" 1>&2
usage
fi
else
if [ -f "./server/wineserver" ]; then topobjdir="."
elif [ -f "../server/wineserver" ]; then topobjdir=".."
elif [ -f "../../server/wineserver" ]; then topobjdir="../.."
elif [ -f "../../../server/wineserver" ]; then topobjdir="../../.."
else
echo "Can't find the top of the Wine tree (use the -T argument)" 1>&2
usage
fi
fi
# set environment variables needed for Wine
if [ -n "$modules" ]; then
WINEDLLOVERRIDES="$WINEDLLOVERRIDES;$modules=b"
export WINEDLLOVERRIDES
fi
WINETEST_PLATFORM=${platform:-wine}
export WINETEST_PLATFORM WINETEST_DEBUG
# WINETEST_WRAPPER is normally empty, but can be set by caller, e.g.
# WINETEST_WRAPPER=time
# would give data about how long each test takes, and
# WINETEST_WRAPPER=valgrind
# would run the tests under valgrind to look for memory errors.
exec $WINETEST_WRAPPER "$topobjdir/wine" "$program" "$@"