From ce4acbbab664e9ab3432189f88b525f10553f674 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Fri, 10 Apr 2009 23:23:41 +0000 Subject: [PATCH] hush: add function tests --- shell/hush.c | 38 ++++++++++----------- shell/hush_test/hush-misc/func1.right | 6 ++++ shell/hush_test/hush-misc/func1.tests | 16 +++++++++ shell/hush_test/hush-misc/func2.right | 5 +++ shell/hush_test/hush-misc/func2.tests | 9 +++++ shell/hush_test/hush-z_slow/leak_all1.tests | 4 +++ shell/hush_test/hush-z_slow/leak_all2.tests | 6 ++++ 7 files changed, 65 insertions(+), 19 deletions(-) create mode 100644 shell/hush_test/hush-misc/func1.right create mode 100755 shell/hush_test/hush-misc/func1.tests create mode 100644 shell/hush_test/hush-misc/func2.right create mode 100755 shell/hush_test/hush-misc/func2.tests diff --git a/shell/hush.c b/shell/hush.c index 40fcb7be4..a055ec14f 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -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 + * Copyright (C) 2000,2001 Larry Doolittle * Copyright (C) 2008,2009 Denys Vlasenko * * Credits: @@ -68,7 +68,7 @@ #include /* #include */ #if ENABLE_HUSH_CASE -#include +# include #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 diff --git a/shell/hush_test/hush-misc/func1.right b/shell/hush_test/hush-misc/func1.right new file mode 100644 index 000000000..e21665aaf --- /dev/null +++ b/shell/hush_test/hush-misc/func1.right @@ -0,0 +1,6 @@ +Hello +Zero: 0 +One: 1 Param1: World +Zero: 0 Param1: Restored +Multi line function +One: 1 diff --git a/shell/hush_test/hush-misc/func1.tests b/shell/hush_test/hush-misc/func1.tests new file mode 100755 index 000000000..ffb269fad --- /dev/null +++ b/shell/hush_test/hush-misc/func1.tests @@ -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: $? diff --git a/shell/hush_test/hush-misc/func2.right b/shell/hush_test/hush-misc/func2.right new file mode 100644 index 000000000..f2a041da7 --- /dev/null +++ b/shell/hush_test/hush-misc/func2.right @@ -0,0 +1,5 @@ +First 0 +Second 0 +First 1 +Second 1 +Done diff --git a/shell/hush_test/hush-misc/func2.tests b/shell/hush_test/hush-misc/func2.tests new file mode 100755 index 000000000..763203f15 --- /dev/null +++ b/shell/hush_test/hush-misc/func2.tests @@ -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 diff --git a/shell/hush_test/hush-z_slow/leak_all1.tests b/shell/hush_test/hush-z_slow/leak_all1.tests index b26e2df02..d244744a6 100755 --- a/shell/hush_test/hush-z_slow/leak_all1.tests +++ b/shell/hush_test/hush-z_slow/leak_all1.tests @@ -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 diff --git a/shell/hush_test/hush-z_slow/leak_all2.tests b/shell/hush_test/hush-z_slow/leak_all2.tests index 8fb1ca9b4..d51ea8063 100755 --- a/shell/hush_test/hush-z_slow/leak_all2.tests +++ b/shell/hush_test/hush-z_slow/leak_all2.tests @@ -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=$?