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

@ -68,7 +68,7 @@
#include <glob.h> #include <glob.h>
/* #include <dmalloc.h> */ /* #include <dmalloc.h> */
#if ENABLE_HUSH_CASE #if ENABLE_HUSH_CASE
#include <fnmatch.h> # include <fnmatch.h>
#endif #endif
#include "math.h" #include "math.h"
#include "match.h" #include "match.h"
@ -100,31 +100,31 @@
#if defined SINGLE_APPLET_MAIN #if defined SINGLE_APPLET_MAIN
/* STANDALONE does not make sense, and won't compile */ /* STANDALONE does not make sense, and won't compile */
#undef CONFIG_FEATURE_SH_STANDALONE # undef CONFIG_FEATURE_SH_STANDALONE
#undef ENABLE_FEATURE_SH_STANDALONE # undef ENABLE_FEATURE_SH_STANDALONE
#undef USE_FEATURE_SH_STANDALONE # undef USE_FEATURE_SH_STANDALONE
#define SKIP_FEATURE_SH_STANDALONE(...) __VA_ARGS__ # define SKIP_FEATURE_SH_STANDALONE(...) __VA_ARGS__
#define ENABLE_FEATURE_SH_STANDALONE 0 # define ENABLE_FEATURE_SH_STANDALONE 0
#define USE_FEATURE_SH_STANDALONE(...) # define USE_FEATURE_SH_STANDALONE(...)
#define SKIP_FEATURE_SH_STANDALONE(...) __VA_ARGS__ # define SKIP_FEATURE_SH_STANDALONE(...) __VA_ARGS__
#endif #endif
#if !ENABLE_HUSH_INTERACTIVE #if !ENABLE_HUSH_INTERACTIVE
#undef ENABLE_FEATURE_EDITING # undef ENABLE_FEATURE_EDITING
#define ENABLE_FEATURE_EDITING 0 # define ENABLE_FEATURE_EDITING 0
#undef ENABLE_FEATURE_EDITING_FANCY_PROMPT # undef ENABLE_FEATURE_EDITING_FANCY_PROMPT
#define ENABLE_FEATURE_EDITING_FANCY_PROMPT 0 # define ENABLE_FEATURE_EDITING_FANCY_PROMPT 0
#endif #endif
/* Do we support ANY keywords? */ /* Do we support ANY keywords? */
#if ENABLE_HUSH_IF || ENABLE_HUSH_LOOPS || ENABLE_HUSH_CASE #if ENABLE_HUSH_IF || ENABLE_HUSH_LOOPS || ENABLE_HUSH_CASE
#define HAS_KEYWORDS 1 # define HAS_KEYWORDS 1
#define IF_HAS_KEYWORDS(...) __VA_ARGS__ # define IF_HAS_KEYWORDS(...) __VA_ARGS__
#define IF_HAS_NO_KEYWORDS(...) # define IF_HAS_NO_KEYWORDS(...)
#else #else
#define HAS_KEYWORDS 0 # define HAS_KEYWORDS 0
#define IF_HAS_KEYWORDS(...) # define IF_HAS_KEYWORDS(...)
#define IF_HAS_NO_KEYWORDS(...) __VA_ARGS__ # define IF_HAS_NO_KEYWORDS(...) __VA_ARGS__
#endif #endif
/* If you comment out one of these below, it will be #defined later /* 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/*; } { : /bin/*; }
set -- par1_$i par2_$i par3_$i par4_$i set -- par1_$i par2_$i par3_$i par4_$i
trap "echo trap$i" WINCH trap "echo trap$i" WINCH
f() { echo $1; }
f >/dev/null
: $((i++)) : $((i++))
done done
@ -55,6 +57,8 @@ HERE
{ : /bin/*; } { : /bin/*; }
set -- par1_$i par2_$i par3_$i par4_$i set -- par1_$i par2_$i par3_$i par4_$i
trap "echo trap$i" WINCH trap "echo trap$i" WINCH
f() { echo $1; }
f >/dev/null
: $((i++)) : $((i++))
done done

View File

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