Make sure all files that should be present are present.
This commit is contained in:
248
test/harness/runall.sh
Executable file
248
test/harness/runall.sh
Executable file
@ -0,0 +1,248 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# See http://live.gnome.org/Cthulhu/RegressionTesting for more info.
|
||||
#
|
||||
# runall.sh can take the following optional parameters:
|
||||
#
|
||||
# -a <appDir> - absolute path to directory with tests for a single app
|
||||
# -c - analyze test coverage instead of regression testing
|
||||
# -h|--help - print a usage message.
|
||||
# -k <keystrokesDir> - alternate keystroke directory (default is ../keystrokes).
|
||||
# -p - create profile information instead of regression testing
|
||||
# -r <resultsDir> - alternate results directory (default is ../results).
|
||||
# -s - require the tester to press return between each test
|
||||
#
|
||||
|
||||
OPERATING_SYSTEMS="SunOS Linux"
|
||||
foo=`dirname $0`
|
||||
harnessDir=`cd $foo; pwd`
|
||||
keystrokesDir=$harnessDir/../keystrokes
|
||||
resultsDir=$harnessDir/../results
|
||||
|
||||
# OpenOffice 2.2 executables are installed in
|
||||
# /usr/lib/openoffice/program
|
||||
#
|
||||
export PATH=$harnessDir/bin:$PATH:/usr/lib/openoffice/program
|
||||
|
||||
coverageMode=0
|
||||
profileMode=0
|
||||
runCthulhuOnce=0
|
||||
|
||||
process_cl () {
|
||||
while [ $# != 0 ]; do
|
||||
case "$1" in
|
||||
-a )
|
||||
shift
|
||||
if [ $# == 0 ]; then
|
||||
echo "Option -a requires an argument."
|
||||
exit 1
|
||||
fi
|
||||
testDirs=$1
|
||||
;;
|
||||
-c )
|
||||
coverageMode=1
|
||||
;;
|
||||
-k )
|
||||
shift
|
||||
if [ $# == 0 ]; then
|
||||
echo "Option -k requires an argument."
|
||||
exit 1
|
||||
fi
|
||||
keystrokesDir=$1
|
||||
;;
|
||||
-p )
|
||||
profileMode=1
|
||||
;;
|
||||
-r )
|
||||
shift
|
||||
if [ $# == 0 ]; then
|
||||
echo "Option -r requires an argument."
|
||||
exit 1
|
||||
fi
|
||||
resultsDir=$1
|
||||
;;
|
||||
-s )
|
||||
stepMode=1
|
||||
;;
|
||||
-h|--help)
|
||||
echo "Usage: $0 [options]"
|
||||
echo "options:"
|
||||
echo " -a appDir run tests only from appDir (absolute path)"
|
||||
echo " -c perform code coverage analysis"
|
||||
echo " -h, --help print this usage message"
|
||||
echo " -k keystrokeDir specify an alternate keystrokes directory"
|
||||
echo " -p create profile information"
|
||||
echo " -r resultsDir specify an alternate results directory"
|
||||
echo " -s require a return to be pressed between keystrokes files"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "Unknown option: $1"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
}
|
||||
|
||||
# Process the users command line options.
|
||||
#
|
||||
process_cl "${@}"
|
||||
|
||||
if [ "$coverageMode" -eq 1 ]
|
||||
then
|
||||
runCthulhuOnce=1
|
||||
export HARNESS_ASSERT=0
|
||||
echo generating coverage map...
|
||||
coverageDir=../coverage/`date +%Y-%m-%d_%H:%M:%S`
|
||||
mkdir -p $coverageDir
|
||||
cp $harnessDir/user-settings.conf.in user-settings.conf
|
||||
#echo $harnessDir/user-settings.conf.in
|
||||
trace2html.py -o $coverageDir -w cthulhu -r $harnessDir/runcthulhu.py &
|
||||
trace_pid=$!
|
||||
sleep 10
|
||||
fi
|
||||
|
||||
if [ "$profileMode" -eq 1 ]
|
||||
then
|
||||
runCthulhuOnce=1
|
||||
export HARNESS_ASSERT=0
|
||||
echo generating profile information...
|
||||
cp $harnessDir/user-settings.conf.in user-settings.conf
|
||||
python $harnessDir/runprofiler.py&
|
||||
profiler_pid=$!
|
||||
sleep 10
|
||||
fi
|
||||
|
||||
# Look in the keystrokes directory for directories.
|
||||
# The name of each directory under the keystrokes directory
|
||||
# is expected to be the name of an application to run. For
|
||||
# example, the gnome-terminal keystrokes should live under
|
||||
# a directory called gnome-terminal. If there isn't an
|
||||
# application associated with the directory name, we just
|
||||
# assume the test should apply to the desktop in general.
|
||||
#
|
||||
# There is expected to be a keystrokes file in each of the
|
||||
# found sub-directories. We go ahead and run this using our
|
||||
# runone.sh script.
|
||||
#
|
||||
dirprefix=`date +%Y-%m-%d_%H:%M:%S`
|
||||
|
||||
if [ "x$testDirs" == "x" ]
|
||||
then
|
||||
testDirs=`find $keystrokesDir -type d | grep -v "[.]svn" | sort`
|
||||
fi
|
||||
|
||||
for testDir in $testDirs
|
||||
do
|
||||
application=`basename $testDir`
|
||||
if [ $application != ".svn" ] && [ $application != `basename $keystrokesDir` ]
|
||||
then
|
||||
|
||||
# (Bug #359919). Check to see if the application exists.
|
||||
# If it does, then supply that as the $2 parameter to the runone.sh command.
|
||||
# If it doesn't exist see if the name is in a list of system types that
|
||||
# we care about (currently "SunOS" and "Linux").
|
||||
# If it is, then compare the directory name against the result of running
|
||||
# `uname`.
|
||||
# If they match, then run the scripts in that directory.
|
||||
# If they don't match, ignore that directory.
|
||||
# If it isn't, then don't supply a $2 parameter to the runone.sh command.
|
||||
|
||||
oldifs="$IFS"
|
||||
IFS=:
|
||||
found=0
|
||||
for dir in $PATH; do
|
||||
test -x "$dir/$application" && {
|
||||
found=1
|
||||
break
|
||||
}
|
||||
done
|
||||
IFS="$oldifs"
|
||||
outputdir=$dirprefix/$application
|
||||
currentdir=`pwd`
|
||||
|
||||
# We run under ./tmp as a means to help provide consistent
|
||||
# output for things that expose directory paths.
|
||||
#
|
||||
mkdir -p ./tmp/$application
|
||||
cd ./tmp/$application
|
||||
for testFile in `find $testDir -xtype f -name "*.py" | sort`; do
|
||||
echo ========================================
|
||||
echo Running $testFile
|
||||
if [ "$found" -gt 0 ]
|
||||
then
|
||||
$harnessDir/runone.sh $testFile $application $runCthulhuOnce
|
||||
else
|
||||
osType=`uname`
|
||||
for os in $OPERATING_SYSTEMS; do
|
||||
if [ $application == $os ]
|
||||
then
|
||||
found=1
|
||||
if [ $osType == $os ]
|
||||
then
|
||||
$harnessDir/runone.sh $testFile $runCthulhuOnce
|
||||
fi
|
||||
fi
|
||||
done
|
||||
if [ "$found" -eq 0 ]
|
||||
then
|
||||
$harnessDir/runone.sh $testFile $runCthulhuOnce
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$runCthulhuOnce" -eq 0 ]
|
||||
then
|
||||
# Copy the results (.cthulhu) file to the output directory.
|
||||
# This is the file that will be used for regression
|
||||
# testing.
|
||||
newResultsFile=`basename $testFile .py`
|
||||
mkdir -p $currentdir/$outputdir
|
||||
|
||||
# Filter the results...
|
||||
#
|
||||
# For braille, get rid of spurious "Desktop Frame" lines which
|
||||
# happen when there's enough of a pause for nautilus to think
|
||||
# it has focus.
|
||||
#
|
||||
# For speech, we do the same thing, but we need to get rid of
|
||||
# several lines in a row. So, we use sed.
|
||||
#
|
||||
grep -v "Desktop Frame" $newResultsFile.braille > $currentdir/$outputdir/$newResultsFile.braille
|
||||
mv $newResultsFile.braille $currentdir/$outputdir/$newResultsFile.braille.unfiltered
|
||||
sed "/speech.speakUtterances utterance='Desktop frame'/,/speech.speakUtterances utterance='Icon View layered pane'/ d" $newResultsFile.speech > $currentdir/$outputdir/$newResultsFile.speech
|
||||
mv $newResultsFile.speech $currentdir/$outputdir/$newResultsFile.speech.unfiltered
|
||||
mv $newResultsFile.debug $currentdir/$outputdir
|
||||
rm -rf *
|
||||
fi
|
||||
|
||||
echo Finished running $testFile.
|
||||
if [ "x$stepMode" == "x1" ]
|
||||
then
|
||||
echo Press Return to continue...
|
||||
read foo
|
||||
fi
|
||||
echo ========================================
|
||||
done
|
||||
cd $currentdir
|
||||
rm -rf ./tmp/$application
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$coverageMode" -eq 1 ]
|
||||
then
|
||||
rm user-settings.conf
|
||||
echo ...finished generating coverage map.
|
||||
fi
|
||||
|
||||
if [ "$profileMode" -eq 1 ]
|
||||
then
|
||||
rm -f user-settings.conf
|
||||
mkdir -p ../profile
|
||||
profileFilePrefix=../profile/`date +%Y-%m-%d_%H:%M:%S`
|
||||
python -c "import pstats; pstats.Stats('cthulhuprof').sort_stats('cumulative').print_stats()" > $profileFilePrefix.txt
|
||||
mv cthulhuprof $profileFilePrefix.cthulhuprof
|
||||
echo ...finished generating profile information.
|
||||
fi
|
||||
|
||||
echo $dirprefix completed at `date +%Y-%m-%d_%H:%M:%S`
|
Reference in New Issue
Block a user