diff --git a/testsuite/busybox.tests b/testsuite/busybox.tests index 7595d061f..b69272593 100755 --- a/testsuite/busybox.tests +++ b/testsuite/busybox.tests @@ -7,15 +7,9 @@ if [ ${#COMMAND} -eq 0 ]; then COMMAND=busybox; fi . testing.sh -# Depends on nothing -_BB_CONFIG_DEP="" - -# We'll assume "cat" is built in, because we need some other command to test. - HELPDUMP=`$COMMAND` -# The gratuitous "\n"s are due to a shell idiosyncrasy: environment variables -# seem to strip trailing whitespace, which makes cmp and diff unhappy. +# We need to test under calling the binary under other names. ln -s `which "$COMMAND"` busybox-suffix ln -s `which "$COMMAND"` unknown @@ -29,15 +23,16 @@ do testing "$i" "" "$HELPDUMP\n\n" "" "" - testing "$i cat" "cat" "moo" "" "moo" - testing "$i unknown" "unknown 2>&1" \ "unknown: applet not found\n" "" "" testing "$i --help" "--help 2>&1" "$HELPDUMP\n\n" "" "" + optional CAT + testing "$i cat" "cat" "moo" "" "moo" testing "$i --help cat" "--help cat 2>&1 | grep prints" \ "Concatenates FILE(s) and prints them to stdout.\n" "" "" + optional "" testing "$i --help unknown" "--help unknown 2>&1" \ "unknown: applet not found\n" "" "" diff --git a/testsuite/egrep.tests b/testsuite/egrep.tests index b634649bb..61ce009d7 100755 --- a/testsuite/egrep.tests +++ b/testsuite/egrep.tests @@ -9,8 +9,7 @@ [ ${#COMMAND} -eq 0 ] && COMMAND=egrep . testing.sh -# Depends on FEATURE_GREP_EGREP_ALIAS -_BB_CONFIG_DEP=FEATURE_GREP_EGREP_ALIAS +optional FEATURE_GREP_EGREP_ALIAS testing "grep is also egrep" "foo" "foo\n" "" "foo\nbar\n" testing "egrep is not case insensitive" "foo ; [ \$? -ne 0 ] && echo yes" \ diff --git a/testsuite/grep.tests b/testsuite/grep.tests index c4f534d1a..2a7a7b901 100755 --- a/testsuite/grep.tests +++ b/testsuite/grep.tests @@ -9,9 +9,6 @@ [ ${#COMMAND} -eq 0 ] && COMMAND=grep . testing.sh -# Depends on grep -_BB_CONFIG_DEP=grep - # testing "test name" "options" "expected result" "file input" "stdin" # file input will be file called "input" # test can create a file "actual" instead of writing to stdout @@ -75,8 +72,7 @@ testing "grep matches NUL" ". input > /dev/null 2>&1 ; echo \$?" "0\n" "\0\n" "" testing "grep handles multiple regexps" "-e one -e two input ; echo \$?" \ "one\ntwo\n0\n" "one\ntwo\n" "" -# Depends on FEATURE_GREP_EGREP_ALIAS -_BB_CONFIG_DEP=FEATURE_GREP_EGREP_ALIAS +optional FEATURE_GREP_EGREP_ALIAS testing "grep -E supports extended regexps" "-E fo+" "foo\n" "" "b\ar\nfoo\nbaz" exit $FAILCOUNT diff --git a/testsuite/pidof.tests b/testsuite/pidof.tests index 0c303cf22..0515522f8 100755 --- a/testsuite/pidof.tests +++ b/testsuite/pidof.tests @@ -16,13 +16,11 @@ testing "pidof (exit with error)" "veryunlikelyoccuringbinaryname ; echo \$?" \ testing "pidof (exit with success)" "pidof > /dev/null; echo \$?" "0\n" "" "" -# Depends on FEATURE_PIDOF_SINGLE -_BB_CONFIG_DEP=FEATURE_PIDOF_SINGLE +optional FEATURE_PIDOF_SINGLE testing "pidof -s" "-s $(basename $0) ; echo -n \$?" \ "$(pidof -s $(basename $0) ; echo -n $?)" "" "" -# Depends on FEATURE_PIDOF_OMIT -_BB_CONFIG_DEP=FEATURE_PIDOF_OMIT +optional FEATURE_PIDOF_OMIT testing "pidof -o %PPID" "$(basename $0) -o %PPID ; echo -n \$?" \ "$(pidof $(basename $0) -o %PPID ; echo -n $?)" "" "" diff --git a/testsuite/runtest b/testsuite/runtest index 9fd2d0f13..c1b1ec2f4 100755 --- a/testsuite/runtest +++ b/testsuite/runtest @@ -91,6 +91,11 @@ else applets=$(ls $srcdir) fi +# Set up option flags so tests can be selective. + +configfile=${bindir:-../../}/.config +export OPTIONFLAGS=:$(echo $(sed -nr 's/^CONFIG_(.*)=.*/\1/p' $configfile) | sed 's/ /:/') + for applet in $applets; do if [ "$applet" = "links" ]; then continue; fi if [ "$applet" != "CVS" -a -d "$srcdir/$applet" ]; then @@ -100,9 +105,18 @@ for applet in $applets; do status=1 fi fi + + # Is this a new-style test? applet=$(echo "$applet" | sed -n 's/\.tests$//p') if [ ${#applet} -ne 0 ] then + appcfg=`grep -i "^# CONFIG_$applet" $configfile` + if [ -n "$appcfg" ] + then + echo "SKIPPED: $applet (is configured out)" + continue + fi + # Setup environment for test. if [ -d links ]; then rm -f links/"$applet" else diff --git a/testsuite/sort.tests b/testsuite/sort.tests index 04d75cfe2..294530988 100755 --- a/testsuite/sort.tests +++ b/testsuite/sort.tests @@ -7,9 +7,6 @@ if [ ${#COMMAND} -eq 0 ]; then COMMAND=sort; fi . testing.sh -# Depends on sort -_BB_CONFIG_DEP=sort - # The basic tests. These should work even with the small busybox. testing "sort" "input" "a\nb\nc\n" "c\na\nb\n" "" @@ -21,6 +18,7 @@ testing "sort reverse" "-r input" "wook\nwalrus\npoint\npabst\naargh\n" \ # These tests require the full option set. +optional FEATURE_SORT_BIG # Longish chunk of data re-used by the next few tests data="42 1 3 woot @@ -48,7 +46,7 @@ egg 1 2 papyrus 999 3 0 algebra " "$data" "" -# Busybox is definitely doing this one wrong just now... +# Busybox is definitely doing this one wrong just now. FIXME testing "sort key range with numeric option and global reverse" \ "-k2,3n -r input" \ diff --git a/testsuite/testing.sh b/testsuite/testing.sh index 83727f6d3..c1002a6aa 100755 --- a/testsuite/testing.sh +++ b/testsuite/testing.sh @@ -4,10 +4,18 @@ # # License is GPLv2, see LICENSE in the busybox tarball for full license text. -# The "testing" function uses one environment variable: -# COMMAND = command to execute +# This file defines two functions, "testing" and "optionflag" + +# The "testing" function must have the following environment variable set: +# COMMAND = command to execute # -# The function takes five arguments: +# The following environment variables may be set to enable optional behavior +# in "testing": +# VERBOSE - Print the diff -u of each failed test case. +# DEBUG - Enable command tracing. +# SKIP - do not perform this test (this is set by "optionflag") +# +# The "testing" function takes five arguments: # $1) Description to display when running command # $2) Command line arguments to command" # $3) Expected result (on stdout)" @@ -17,39 +25,31 @@ # The exit value of testing is the exit value of the command it ran. # # The environment variable "FAILCOUNT" contains a cumulative total of the -# +# number of failed tests. -verbose=0 -debug=0 -force=0 -for x in "$@" ; do - case "$x" in - -v|--verbose) verbose=1; shift;; - -d|--debug) debug=1; shift;; - -f|--force) force=1; shift;; - --) break;; - -*) echo "Unknown option '$x'"; exit 1;; - *) break;; - esac -done - -if [ -n "$VERBOSE" ] ; then - verbose=1 -fi -if [ -n "$DEBUG" ] ; then - debug=1 -fi +# The "optional" function is used to skip certain tests, ala: +# optionflag CONFIG_FEATURE_THINGY +# +# The "optional" function checks the environment variable "OPTIONFLAGS", +# which is either empty (in which case it always clears SKIP) or +# else contains a colon-separated list of features (in which case the function +# clears SKIP if the flag was found, or sets it to 1 if the flag was not found). export FAILCOUNT=0 +export SKIP= # Helper functions -config_is_set () +optional() { - local uc_what=$(echo ${1?} | tr a-z A-Z) - grep -q "^[ ]*CONFIG_${uc_what}" ${bindir:-..}/.config || \ - grep -q "^[ ]*BB_CONFIG_${uc_what}" ${bindir:-..}/.config - return $? + option="$OPTIONFLAGS" | egrep "(^|:)$1(:|\$)" + # Not set? + if [[ -z "$1" || -z "$OPTIONFLAGS" || ${#option} -ne 0 ]] + then + SKIP="" + return + fi + SKIP=1 } # The testing function @@ -62,17 +62,14 @@ testing () exit fi - if [ $debug -eq 1 ] ; then + if [ -n "$DEBUG" ] ; then set -x fi - if [ -n "$_BB_CONFIG_DEP" ] && [ ${force} -eq 0 ] + if [ -n "$SKIP" ] then - if ! config_is_set "$_BB_CONFIG_DEP" - then - echo "SKIPPED: $1" - return 0 - fi + echo "SKIPPED: $1" + return 0 fi echo -ne "$3" > expected @@ -83,18 +80,19 @@ testing () cmp expected actual > /dev/null if [ $? -ne 0 ] then - ((FAILCOUNT++)) - echo "FAIL: $1" - if [ $verbose -eq 1 ] - then - diff -u expected actual - fi + FAILCOUNT=$[$FAILCOUNT+1] + echo "FAIL: $1" + if [ -n "$VERBOSE" ] + then + diff -u expected actual + fi else - echo "PASS: $1" + echo "PASS: $1" fi rm -f input expected actual - if [ $debug -eq 1 ] ; then + if [ -n "$DEBUG" ] + then set +x fi diff --git a/testsuite/uniq.tests b/testsuite/uniq.tests index 27d9561e1..95764740b 100755 --- a/testsuite/uniq.tests +++ b/testsuite/uniq.tests @@ -9,9 +9,6 @@ if [ ${#COMMAND} -eq 0 ]; then COMMAND=uniq; fi . testing.sh -# Depends on uniq -_BB_CONFIG_DEP=uniq - # testing "test name" "options" "expected result" "file input" "stdin" # file input will be file called "input" # test can create a file "actual" instead of writing to stdout