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
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" "" ""
[ ${#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" \
[ ${#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
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
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 $?)" "" ""
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
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
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" ""
# 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
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" \
#
# 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 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 function takes five arguments:
+# The "testing" function takes five arguments:
# $1) Description to display when running command
# $2) Command line arguments to command"
# $3) Expected result (on stdout)"
# The exit value of testing is the exit value of the command it ran.
#
# The environment variable "FAILCOUNT" contains a cumulative total of the
-#
-
-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
+# number of failed tests.
-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
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
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
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