blob: 18ca96145b2220fdca364f41a9e994b2b4ac7b3b [file] [log] [blame]
kate.wardf51c6162008-06-17 16:38:35 +00001#! /bin/sh
kate.ward2f3cad92008-10-21 23:29:23 +00002# vim:et:ft=sh:sts=2:sw=2
kate.wardf51c6162008-06-17 16:38:35 +00003#
kate.ward2f3cad92008-10-21 23:29:23 +00004# shFlags unit test suite runner.
5#
6# This script runs all the unit tests that can be found, and generates a nice
7# report of the tests.
kate.wardf51c6162008-06-17 16:38:35 +00008
9MY_NAME=`basename $0`
10MY_PATH=`dirname $0`
11
kate.ward2fb41e32008-07-10 18:42:46 +000012PREFIX='shflags_test_'
kate.wardf51c6162008-06-17 16:38:35 +000013SHELLS='/bin/sh /bin/bash /bin/dash /bin/ksh /bin/pdksh /bin/zsh'
14TESTS=''
kate.ward2fb41e32008-07-10 18:42:46 +000015for test in ${PREFIX}[a-z]*.sh; do
kate.wardf51c6162008-06-17 16:38:35 +000016 TESTS="${TESTS} ${test}"
17done
18
kate.ward2f3cad92008-10-21 23:29:23 +000019# load libraries
20. ../lib/versions
kate.wardf51c6162008-06-17 16:38:35 +000021. ./shflags_test_helpers
22
23usage()
24{
25 echo "usage: ${MY_NAME} [-e key=val ...] [-s shell(s)] [-t test(s)]"
26}
27
kate.ward1353b6e2008-11-12 23:22:13 +000028env=''
29
kate.wardf51c6162008-06-17 16:38:35 +000030# process command line flags
31while getopts 'e:hs:t:' opt; do
32 case ${opt} in
kate.ward2f3cad92008-10-21 23:29:23 +000033 e) # set an environment variable
kate.wardf51c6162008-06-17 16:38:35 +000034 key=`expr "${OPTARG}" : '\([^=]*\)='`
35 val=`expr "${OPTARG}" : '[^=]*=\(.*\)'`
36 if [ -z "${key}" -o -z "${val}" ]; then
37 usage
38 exit 1
39 fi
40 eval "${key}='${val}'"
41 export ${key}
42 env="${env:+${env} }${key}"
43 ;;
kate.ward2f3cad92008-10-21 23:29:23 +000044 h) usage; exit 0 ;; # help output
45 s) shells=${OPTARG} ;; # list of shells to run
46 t) tests=${OPTARG} ;; # list of tests to run
kate.wardf51c6162008-06-17 16:38:35 +000047 *) usage; exit 1 ;;
48 esac
49done
50shift `expr ${OPTIND} - 1`
51
52# fill shells and/or tests
53shells=${shells:-${SHELLS}}
54tests=${tests:-${TESTS}}
55
56# error checking
57if [ -z "${tests}" ]; then
58 th_error 'no tests found to run; exiting'
59 exit 1
60fi
61
62cat <<EOF
63#------------------------------------------------------------------------------
64# System data
65#
66
67# test run info
68shells="${shells}"
69tests="${tests}"
70EOF
71for key in ${env}; do
72 eval "echo \"${key}=\$${key}\""
73done
74echo
75
76# output system data
77echo "# system info"
78echo "$ date"
79date
80
81echo "$ uname -mprsv"
82uname -mprsv
83
84#
85# run tests
86#
87
88for shell in ${shells}; do
89 echo
90
kate.wardf51c6162008-06-17 16:38:35 +000091 cat <<EOF
92
93#------------------------------------------------------------------------------
94# Running the test suite with ${shell}
95#
96EOF
kate.warda848e772008-11-15 20:06:54 +000097 # check for existance of shell
98 if [ ! -x ${shell} ]; then
99 th_warn "unable to run tests with the ${shell} shell"
100 continue
101 fi
kate.wardf51c6162008-06-17 16:38:35 +0000102
103 shell_name=`basename ${shell}`
kate.ward2f3cad92008-10-21 23:29:23 +0000104 shell_version=`versions_shellVersion "${shell}"`
105
106 echo "shell name: ${shell_name}"
107 echo "shell version: ${shell_version}"
kate.wardf51c6162008-06-17 16:38:35 +0000108
109 # execute the tests
110 for suite in ${tests}; do
kate.ward2fb41e32008-07-10 18:42:46 +0000111 suiteName=`expr "${suite}" : "${PREFIX}\(.*\).sh"`
kate.wardf51c6162008-06-17 16:38:35 +0000112 echo
kate.wardcd0bafa2008-11-12 20:18:46 +0000113 echo "--- Executing the '${suiteName}' test suite ---"
114 ( exec ${shell} ./${suite} 2>&1; )
kate.wardf51c6162008-06-17 16:38:35 +0000115 done
116done