#! /bin/bash # Confirm that PBM_TESTPREFIX is set. # PBM_TESTPREFIX is the directory with the Netpbm programs you want to # test. If set to null, executables will be sought from the default # execution path ($PATH). Usually you should explicitly set this. # # You can set it here by de-commenting and modifying the next line: #export PBM_TESTPREFIX="/usr/local/bin/" if [ -z $PBM_TESTPREFIX ] then echo "Warning: PBM_TESTPREFIX is not set." echo "Programs in the default execution path:" echo $PATH echo "will be tested." elif [ ! -d $PBM_TESTPREFIX ] then echo "Error: No directory named $PBM_TESTPREFIX" exit 1 else # append "/" to end of string if necessary export PBM_TESTPREFIX=$(echo $PBM_TESTPREFIX | sed '/\/$/!s@$@/@') fi # Set PBM_BINPREFIX. # PBM_BINPREFIX is the directory where Netpbm programs which play # auxiliary roles in tests (such as image generators for producing # test images, analyzers to summarize output and so forth). # # If testing a fresh install, this should be the same as PBM_TESTPREFIX. # If you are developing a single Netpbm program, you may want to # set this to a directory with stable executables. (Final "/" is # mandatory.) # If set to null, executables in the default execution path will # be used. # export PBM_BINPREFIX="/usr/local/bin/" # export PBM_BINPREFIX="" export PBM_BINPREFIX=${PBM_TESTPREFIX} # Set srcdir, which is the directory which contains Execute-Tests (this # script), programs that run the test, including *.test and helpers that they # invoke, the list of tests to run ('Test-Order'), and *.ok files that # indicate the expected results of tests. srcdir=$(dirname $0) # Provision to run programs under valgrind. # export PBM_TESTPREFIX="valgrind --log-fd=4 "${PBM_TESTPREFIX} # Set tmpdir, which is used in some of the test scripts. By default # this is created by mktemp. The user can override and specify tmpdir, # but in this case it must be an existing directory and must not be # either $srcdir or current work. if [ -z $tmpdir ] then tmpdir_created=$(mktemp -d) || exit 1; export tmpdir=${tmpdir_created} else tmpdir_created=""; if [ ! -d ${tmpdir} ] then echo "Specified temporary directory $tmpdir does not exist." exit 1; elif [ ${tmpdir} -ef ${srcdir} ] then echo "Temporary directory must not be $srcdir." exit 1; elif [ ${tmpdir} -ef $PWD ] then echo "Temporary directory must not be current directory." exit 1; fi fi # If necessary set the RGBDEF environment variable. #export RGBDEF=/etc/rgb.txt #export RGBDEF=/usr/local/netpbm/lib/rgb.txt #export RGBDEF=/usr/share/emacs/*/etc/rgb.txt # Declare arrays used to count and report test results. # For now only "SUCCESS" and "FAILURE" are used. declare -a array=(0 0 0 0 0 0) declare -a status=("SUCCESS" "FAILURE" "UNEXPECTED SUCCESS" "EXPECTED FAILURE" "NOT TESTABLE" "TOTAL TESTABLE") # Copy test files to the current work directory if [ ! -f ./testgrid.pbm ] then cp -v ${srcdir}/testgrid.pbm ./testgrid.pbm fi if [ ! -f ./testimg.ppm ] then cp -v ${srcdir}/testimg.ppm ./testimg.ppm fi # Add PBM_BINPREFIX to PATH. # This is necessary for Netpbm programs that call other Netpbm programs. if [ ! -z $PBM_BINPREFIX ] then export PATH=${PBM_BINPREFIX}:$PATH fi export PATH=${srcdir}:$PATH # Execute the tests, as described in the "Test-Order" file. # # Each test outputs a ".out" file, which is compared against a # corresponding ".ok" file. For example the output from "pbmmake.test" # is "pbmmake.out" and when this matches "pbmmake.ok" we declare the # test a success. # In the error case the ".out" file is retained in the current work # directory. # # All tests are self-contained. # # By default the tests are executed in the order described in the # file Test-Order. Copy this file from the source directory # to the work directory. # # The string "target" is a comma-separated list of target programs. # When set only tests for programs in the list will be run. # # The --no-clobber version comes useful when the user wants a modified # (pared-down) version of Test-Order. if [ ! -z $target ] then echo $target | sed 's/,/\n/g' | \ sed 's/^/\${PBM_TESTPREFIX}/' | \ grep -f - ${srcdir}/*.test -l | \ while read i ; do echo ${i##*/} ; done | grep -f - ${srcdir}/Test-Order > ./Test-Order ; else cp ${srcdir}/Test-Order ./Test-Order ; #cp --no-clobber ${srcdir}/Test-Order ./Test-Order ; fi #let array[5]=0 for t in `grep -v "^#" ./Test-Order | fgrep ".test"` do echo == $t == ${srcdir}/$t > ${t%.test}.out ; let result=$? case $result in 0) cmp -s ${t%.test}.out ${srcdir}/${t%.test}.ok ; if [ $? -eq 0 ] then let result=0; rm ${t%.test}.out ; else let result=1; grep "^##" ${srcdir}/$t # Print failure message. fi let testable=1 ;; 80) let result=4 ; let testable=0;; *) let result=1 ; let testable=1;; esac # Report whether a single test succeeded or failed. # Increment counters. echo $t: ${status[${result}]}; echo let array[${result}]=${array[${result}]}+1 let array[5]=${array[5]}+$testable done # Erase temporary directory and its contents, if it was created. if [ -n $tmpdir_created ] then rm -rf $tmpdir_created fi # Erase test image files in the current (work) directory. # (Do not erase them if we are working from the source directory.) if [ ! $PWD -ef ${srcdir} ] then rm ./testimg.ppm ./testgrid.pbm fi # Calculate success / failure totals and print a summary report. # Report date and time of completion. echo "Test summary:" echo ================== for s in 0 1 2 3 4 5 do if [[ ${array[${s}]} -gt 0 || s -eq 1 || s -eq 5 ]] then echo ${status[${s}]} ${array[${s}]} fi done echo ================== echo "All tests done." date -R -u # Exit with status 0 if all possible tests succeeded, 1 otherwise. if [[ ${array[0]} -eq ${array[5]} ]] then exit 0 else exit 1 fi