hush: add function tests

This commit is contained in:
Denis Vlasenko 2009-04-10 23:23:41 +00:00
parent 6ba6f546ac
commit ce4acbbab6
7 changed files with 65 additions and 19 deletions

View File

@ -5,7 +5,7 @@
* "small and simple is beautiful" philosophy, which
* incidentally is a good match to today's BusyBox.
*
* Copyright (C) 2000,2001 Larry Doolittle <larry@doolittle.boa.org>
* Copyright (C) 2000,2001 Larry Doolittle <larry@doolittle.boa.org>
* Copyright (C) 2008,2009 Denys Vlasenko <vda.linux@googlemail.com>
*
* Credits:
@ -68,7 +68,7 @@
#include <glob.h>
/* #include <dmalloc.h> */
#if ENABLE_HUSH_CASE
#include <fnmatch.h>
# include <fnmatch.h>
#endif
#include "math.h"
#include "match.h"
@ -100,31 +100,31 @@
#if defined SINGLE_APPLET_MAIN
/* STANDALONE does not make sense, and won't compile */
#undef CONFIG_FEATURE_SH_STANDALONE
#undef ENABLE_FEATURE_SH_STANDALONE
#undef USE_FEATURE_SH_STANDALONE
#define SKIP_FEATURE_SH_STANDALONE(...) __VA_ARGS__
#define ENABLE_FEATURE_SH_STANDALONE 0
#define USE_FEATURE_SH_STANDALONE(...)
#define SKIP_FEATURE_SH_STANDALONE(...) __VA_ARGS__
# undef CONFIG_FEATURE_SH_STANDALONE
# undef ENABLE_FEATURE_SH_STANDALONE
# undef USE_FEATURE_SH_STANDALONE
# define SKIP_FEATURE_SH_STANDALONE(...) __VA_ARGS__
# define ENABLE_FEATURE_SH_STANDALONE 0
# define USE_FEATURE_SH_STANDALONE(...)
# define SKIP_FEATURE_SH_STANDALONE(...) __VA_ARGS__
#endif
#if !ENABLE_HUSH_INTERACTIVE
#undef ENABLE_FEATURE_EDITING
#define ENABLE_FEATURE_EDITING 0
#undef ENABLE_FEATURE_EDITING_FANCY_PROMPT
#define ENABLE_FEATURE_EDITING_FANCY_PROMPT 0
# undef ENABLE_FEATURE_EDITING
# define ENABLE_FEATURE_EDITING 0
# undef ENABLE_FEATURE_EDITING_FANCY_PROMPT
# define ENABLE_FEATURE_EDITING_FANCY_PROMPT 0
#endif
/* Do we support ANY keywords? */
#if ENABLE_HUSH_IF || ENABLE_HUSH_LOOPS || ENABLE_HUSH_CASE
#define HAS_KEYWORDS 1
#define IF_HAS_KEYWORDS(...) __VA_ARGS__
#define IF_HAS_NO_KEYWORDS(...)
# define HAS_KEYWORDS 1
# define IF_HAS_KEYWORDS(...) __VA_ARGS__
# define IF_HAS_NO_KEYWORDS(...)
#else
#define HAS_KEYWORDS 0
#define IF_HAS_KEYWORDS(...)
#define IF_HAS_NO_KEYWORDS(...) __VA_ARGS__
# define HAS_KEYWORDS 0
# define IF_HAS_KEYWORDS(...)
# define IF_HAS_NO_KEYWORDS(...) __VA_ARGS__
#endif
/* If you comment out one of these below, it will be #defined later

View File

@ -0,0 +1,6 @@
Hello
Zero: 0
One: 1 Param1: World
Zero: 0 Param1: Restored
Multi line function
One: 1

View File

@ -0,0 +1,16 @@
f() { echo Hello; }
g () { echo One: $# Param1: $1; }
h ( )
{
echo -n 'Multi ' && echo -n 'line '
echo function
false
}
f
echo Zero: $?
set -- Restored
{ g World; }
echo Zero: $? Param1: $1
( h )
echo One: $?

View File

@ -0,0 +1,5 @@
First 0
Second 0
First 1
Second 1
Done

View File

@ -0,0 +1,9 @@
i=0
while test $i != 2; do
f() { echo First $i; }
f
f() { echo Second $i; }
f
: $((i++))
done
echo Done

View File

@ -27,6 +27,8 @@ HERE
{ : /bin/*; }
set -- par1_$i par2_$i par3_$i par4_$i
trap "echo trap$i" WINCH
f() { echo $1; }
f >/dev/null
: $((i++))
done
@ -55,6 +57,8 @@ HERE
{ : /bin/*; }
set -- par1_$i par2_$i par3_$i par4_$i
trap "echo trap$i" WINCH
f() { echo $1; }
f >/dev/null
: $((i++))
done

View File

@ -27,6 +27,8 @@ HERE
} 1<>/dev/null
while { echo $dev_null >>$dev_null; }; do cat <"$dev_null"; break; done
( until { echo $dev_null >>$dev_null | false; }; do cat <"$dev_null"; break; done ) <$dev_null
f() { echo $1; }
f >/dev/null
memleak
@ -53,6 +55,8 @@ HERE
} 1<>/dev/null
while { echo $dev_null >>$dev_null; }; do cat <"$dev_null"; break; done
( until { echo $dev_null >>$dev_null | false; }; do cat <"$dev_null"; break; done ) <$dev_null
f() { echo $1; }
f >/dev/null
# And same again
@ -77,6 +81,8 @@ HERE
} 1<>/dev/null
while { echo $dev_null >>$dev_null; }; do cat <"$dev_null"; break; done
( until { echo $dev_null >>$dev_null | false; }; do cat <"$dev_null"; break; done ) <$dev_null
f() { echo $1; }
f >/dev/null
memleak
kb=$?