From b47a74f4e773dee93c60116dd34c002c7c118d0b Mon Sep 17 00:00:00 2001 From: Bernhard Reutner-Fischer Date: Fri, 23 Sep 2005 15:44:46 +0000 Subject: [PATCH] - introduce variable _BB_CONFIG_DEP to the new test harness. This is used to see if given tests should be run (are available) or not. Print "UNTESTED: descr" if the applet or feature is not available. - add _BB_CONFIG_DEP to existing new.tests - move old grep test to new test infrastructure and add a few more test for grep. --- testsuite/busybox.tests | 3 + testsuite/egrep.tests | 20 +++++ testsuite/grep.tests | 82 +++++++++++++++++++ testsuite/grep/egrep-is-not-case-insensitive | 2 - .../grep/egrep-supports-extended-regexps | 2 - testsuite/grep/grep-handles-binary-files | 1 - testsuite/grep/grep-handles-multiple-regexps | 1 - testsuite/grep/grep-is-also-egrep | 2 - testsuite/grep/grep-matches-NUL | 8 -- testsuite/runtest | 11 +-- testsuite/sort.tests | 3 + testsuite/testing.sh | 21 ++++- testsuite/uniq.tests | 3 + 13 files changed, 137 insertions(+), 22 deletions(-) create mode 100755 testsuite/egrep.tests create mode 100644 testsuite/grep.tests delete mode 100644 testsuite/grep/egrep-is-not-case-insensitive delete mode 100644 testsuite/grep/egrep-supports-extended-regexps delete mode 100644 testsuite/grep/grep-handles-binary-files delete mode 100644 testsuite/grep/grep-handles-multiple-regexps delete mode 100644 testsuite/grep/grep-is-also-egrep delete mode 100644 testsuite/grep/grep-matches-NUL diff --git a/testsuite/busybox.tests b/testsuite/busybox.tests index 91dbc797e..7595d061f 100755 --- a/testsuite/busybox.tests +++ b/testsuite/busybox.tests @@ -7,6 +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` diff --git a/testsuite/egrep.tests b/testsuite/egrep.tests new file mode 100755 index 000000000..b634649bb --- /dev/null +++ b/testsuite/egrep.tests @@ -0,0 +1,20 @@ +#!/bin/sh + +# egrep tests. +# Copyright 2005 by Rob Landley +# Licensed under GPL v2, see file LICENSE for details. + +# AUDIT: + +[ ${#COMMAND} -eq 0 ] && COMMAND=egrep +. testing.sh + +# Depends on FEATURE_GREP_EGREP_ALIAS +_BB_CONFIG_DEP=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" \ + "yes\n" "" "FOO\n" + + +exit $FAILCOUNT diff --git a/testsuite/grep.tests b/testsuite/grep.tests new file mode 100644 index 000000000..c4f534d1a --- /dev/null +++ b/testsuite/grep.tests @@ -0,0 +1,82 @@ +#!/bin/sh + +# grep tests. +# Copyright 2005 by Rob Landley +# Licensed under GPL v2, see file LICENSE for details. + +# AUDIT: + +[ ${#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 + +# Test exit status + +testing "grep (exit with error)" "nonexistent 2> /dev/null ; echo \$?" \ + "1\n" "" "" +testing "grep (exit success)" "grep $0 > /dev/null 2>&1 ; echo \$?" "0\n" \ + "" "" +# Test various data sources and destinations + +testing "grep (default to stdin)" "two" "two\n" "" \ + "one\ntwo\nthree\nthree\nthree\n" +testing "grep - (specify stdin)" "two -" "two\n" "" \ + "one\ntwo\nthree\nthree\nthree\n" +testing "grep input (specify file)" "two input" "two\n" \ + "one\ntwo\nthree\nthree\nthree\n" "" + +# Note that this assumes actual is empty. +testing "grep input actual (two files)" "two input actual 2> /dev/null" \ + "input:two\n" "one\ntwo\nthree\nthree\nthree\n" "" + +testing "grep - infile (specify stdin and file)" "two - input" \ + "(standard input):two\ninput:two\n" "one\ntwo\nthree\n" \ + "one\ntwo\ntoo\nthree\nthree\n" + +# Check if we see the correct return value if both stdin and non-existing file +# are given. +testing "grep - nofile (specify stdin and nonexisting file)" \ + "two - nonexistent 2> /dev/null ; echo \$?" \ + "(standard input):two\n(standard input):two\n2\n" \ + "" "one\ntwo\ntwo\nthree\nthree\nthree\n" +testing "grep -q - nofile (specify stdin and nonexisting file, no match)" \ + "-q nomatch - nonexistent 2> /dev/null ; echo \$?" \ + "2\n" "" "one\ntwo\ntwo\nthree\nthree\nthree\n" +# SUSv3: If the -q option is specified, the exit status shall be zero +# if an input line is selected, even if an error was detected. +testing "grep -q - nofile (specify stdin and nonexisting file, match)" \ + "-q two - nonexistent ; echo \$?" \ + "0\n" "" "one\ntwo\ntwo\nthree\nthree\nthree\n" + +# Test various command line options +# -s no error messages +testing "grep -s nofile (nonexisting file, no match)" \ + "-s nomatch nonexistent ; echo \$?" "2\n" "" "" +testing "grep -s nofile - (stdin and nonexisting file, match)" \ + "-s domatch nonexistent - ; echo \$?" "(standard input):domatch\n2\n" \ + "" "nomatch\ndomatch\nend\n" + +# This doesn't match GNU behaviour (Binary file input matches) +# acts like GNU grep -a +testing "grep handles binary files" "foo input" "foo\n" "\0foo\n\n" "" +# This doesn't match GNU behaviour (Binary file (standard input) matches) +# acts like GNU grep -a +testing "grep handles binary stdin" "foo" "foo\n" "" "\0foo\n\n" + +testing "grep matches NUL" ". input > /dev/null 2>&1 ; echo \$?" "0\n" "\0\n" "" + +# -e regex +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 +testing "grep -E supports extended regexps" "-E fo+" "foo\n" "" "b\ar\nfoo\nbaz" + +exit $FAILCOUNT diff --git a/testsuite/grep/egrep-is-not-case-insensitive b/testsuite/grep/egrep-is-not-case-insensitive deleted file mode 100644 index 881607393..000000000 --- a/testsuite/grep/egrep-is-not-case-insensitive +++ /dev/null @@ -1,2 +0,0 @@ -# FEATURE: CONFIG_FEATURE_GREP_EGREP_ALIAS -test x`echo foo | busybox egrep FOO` = x diff --git a/testsuite/grep/egrep-supports-extended-regexps b/testsuite/grep/egrep-supports-extended-regexps deleted file mode 100644 index 6ef8b9159..000000000 --- a/testsuite/grep/egrep-supports-extended-regexps +++ /dev/null @@ -1,2 +0,0 @@ -# FEATURE: CONFIG_FEATURE_GREP_EGREP_ALIAS -echo foo | busybox egrep fo+ diff --git a/testsuite/grep/grep-handles-binary-files b/testsuite/grep/grep-handles-binary-files deleted file mode 100644 index edb2042e7..000000000 --- a/testsuite/grep/grep-handles-binary-files +++ /dev/null @@ -1 +0,0 @@ -echo -e '\0foo' | busybox grep foo diff --git a/testsuite/grep/grep-handles-multiple-regexps b/testsuite/grep/grep-handles-multiple-regexps deleted file mode 100644 index 5c1b8de1f..000000000 --- a/testsuite/grep/grep-handles-multiple-regexps +++ /dev/null @@ -1 +0,0 @@ -echo foo | busybox grep -e foo -e bar diff --git a/testsuite/grep/grep-is-also-egrep b/testsuite/grep/grep-is-also-egrep deleted file mode 100644 index 2e6977c28..000000000 --- a/testsuite/grep/grep-is-also-egrep +++ /dev/null @@ -1,2 +0,0 @@ -# FEATURE: CONFIG_FEATURE_GREP_EGREP_ALIAS -echo foo | busybox egrep foo diff --git a/testsuite/grep/grep-matches-NUL b/testsuite/grep/grep-matches-NUL deleted file mode 100644 index 082bd8700..000000000 --- a/testsuite/grep/grep-matches-NUL +++ /dev/null @@ -1,8 +0,0 @@ -set +e -echo -e '\0' | busybox grep . -if [ $? != 0 ] ; then - exit 0; -fi - -exit 1; - diff --git a/testsuite/runtest b/testsuite/runtest index 7411aec64..32ff462d7 100755 --- a/testsuite/runtest +++ b/testsuite/runtest @@ -90,21 +90,22 @@ else fi for applet in $applets; do - if [ "$applet" == links ]; then continue; fi - if [ "$applet" != CVS -a -d "$srcdir/$applet" ]; then + if [ "$applet" = "links" ]; then continue; fi + if [ "$applet" != "CVS" -a -d "$srcdir/$applet" ]; then if run_applet_tests $applet; then : else status=1 fi fi - applet=`echo "$applet" | sed -n 's/\.tests$//p'` - if [ ${#applet} != 0 ] + applet=$(echo "$applet" | sed -n 's/\.tests$//p') + if [ ${#applet} -ne 0 ] then mkdir links 2>/dev/null rm -f links/"$applet" ln -s ${bindir:-../..}/busybox links/"$applet" - PATH="$srcdir:$PATH" COMMAND="links/$applet" "${srcdir:-.}/$applet".tests + PATH="$srcdir:$PATH" COMMAND="links/$applet" \ + "${srcdir:-.}/$applet".tests if [ $? -ne 0 ]; then status=1; fi fi diff --git a/testsuite/sort.tests b/testsuite/sort.tests index b23cf4312..04d75cfe2 100755 --- a/testsuite/sort.tests +++ b/testsuite/sort.tests @@ -7,6 +7,9 @@ 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" "" diff --git a/testsuite/testing.sh b/testsuite/testing.sh index 0925d090d..420cfa1ef 100755 --- a/testsuite/testing.sh +++ b/testsuite/testing.sh @@ -28,9 +28,19 @@ fi export FAILCOUNT=0 +# Helper functions + +config_is_set () +{ + 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 $? +} + # The testing function -function testing() +testing() { if [ $# -ne 5 ] then @@ -38,6 +48,15 @@ function testing() exit fi + if [ ${force_tests:-0} -ne 1 -a -n "$_BB_CONFIG_DEP" ] + then + if ! config_is_set "$_BB_CONFIG_DEP" + then + echo "UNTESTED: $1" + return 0 + fi + fi + f=$FAILCOUNT echo -ne "$3" > expected echo -ne "$4" > input diff --git a/testsuite/uniq.tests b/testsuite/uniq.tests index 95764740b..27d9561e1 100755 --- a/testsuite/uniq.tests +++ b/testsuite/uniq.tests @@ -9,6 +9,9 @@ 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