From 5a00fc9b9cfd4da4daff717d77f1b9122a72ff7f Mon Sep 17 00:00:00 2001 From: Bart Schaefer Date: Mon, 8 Oct 2001 10:08:00 +0000 Subject: Module dependencies for unloading in tests. --- Test/V01zmodload.ztst | 165 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 Test/V01zmodload.ztst (limited to 'Test') diff --git a/Test/V01zmodload.ztst b/Test/V01zmodload.ztst new file mode 100644 index 000000000..f349f5652 --- /dev/null +++ b/Test/V01zmodload.ztst @@ -0,0 +1,165 @@ +# Test basic module loading + +%prep +# Figure out which modules it ought to be possible to load by looking at +# the config.modules file. This differs for static vs. dynamic builds. + + mods=() + deps="$(zmodload -Ld)" + while read name modfile link auto load funcs + do + [[ $name == \#* ]] && continue + eval "$name $modfile $link $auto $load" + [[ $link == no ]] && continue + mods=($mods $name) + moddeps= + modfile=$ZTST_srcdir/../$modfile + eval ${${${(f)"$(<$modfile)"}[(r)moddeps=*]}:-:} + [[ -n $moddeps ]] && zmodload -d $name $=moddeps + done < $ZTST_testdir/../config.modules + + zmodunload() { + local m n=$# + (( n == 0 )) && return 0 + for m + do + if [[ -z ${(M)${(f)"$(zmodload -d)"}:#*:* $m( *|)} ]] + then + zmodload -u $m && zmodload -ud $m || return 1 + shift + else + set $@[2,-1] $m + fi + done + if (( $# < n )) + then + zmodunload $* + else + zmodload -u $* + fi + } + +%test + +# This first test depends on knowing that zsh is run with +Z from the +# Makefile, and that ztst.zsh loads the parameter module. + + zmodload -L +0:List the loaded modules +>zmodload zsh/main +>zmodload zsh/parameter + + zmodload zsh/main +1:Test reloading an already-loaded module +?ZTST_execchunk:zmodload:2: module zsh/main already loaded. + +# Loop over the modules found above and attempt to load each one. Use +# the -i flag in case dependencies cause multiple modules to be loaded, +# or in case some previous test suite loaded a module. + + for m in $mods + do + zmodload -i $m || mods[(r)$m]=() + done +0d:Test loading of all compiled modules + + zmodload -e $mods +0d:Check that zsh believes the modules did load + +# Now check for proper failure conditions by trying some operations on +# a nonexistent module. + + zmodload -i bogus/notamodule +1D:Check that loading a nonexistent module fails + + zmodload -u bogus/notamodule +1D:Check that unloading a nonexistent module fails + +# Test adding and removing autoloads, using a nonexistent module. + + zmodload -ab bogus + zmodload -ub bogus +0:Add/remove autoloaded builtin + + zmodload -ac bogus + zmodload -uc bogus +0:Add/remove autoloaded condition + + zmodload -ap bogus + zmodload -up bogus +0:Add/remove autoloaded parameter + + zmodload -af bogus + zmodload -uf bogus +0:Add/remove autoloaded math function + +# If the "example" module is available, test various autoloading behavior. + + if [[ $mods[(r)zsh/example] == zsh/example ]]; then + zmodload -u zsh/example + zmodload -ab zsh/example example + builtin example + zmodload -e zsh/example + else print -u8 Warning: zsh/example not linked: not checking autoloading + fi +0d:Autoload a module via a builtin + + if [[ $mods[(r)zsh/example] == zsh/example ]]; then + zmodload -u zsh/example + zmodload -ac -I zsh/example ex + [[ exam -ex ple ]] + zmodload -e zsh/example + else : + fi +0d:Autoload a module via a condition + + if [[ $mods[(r)zsh/example] == zsh/example ]]; then + zmodload -u zsh/example + zmodload -ap zsh/example exint + : $exint + zmodload -e zsh/example + else : + fi +0d:Autoload a module via a parameter + + if [[ $mods[(r)zsh/example] == zsh/example ]]; then + zmodload -u zsh/example + zmodload -af zsh/example sum + (( sum(1) )) + zmodload -e zsh/example + else : + fi +0d:Autoload a module via a math function + +# Test module aliases + + zmodload -A example=zsh/example + zmodload -A +0:Test creating a module alias +>example -> zsh/example + + if [[ $mods[(r)zsh/example] == zsh/example ]]; then + zmodload -u example + zmodload -ab example + builtin example + zmodload -e example + else : + fi +0d:Unload/autoload the module via its alias + + zmodload -R example + zmodload -e example +1:Delete the module alias again + +# Don't unload the two modules that are required by the test system! + + mods[(r)zsh/main]=() + mods[(r)zsh/parameter]=() + zmodunload $mods +0d:Unload the modules loaded by this test suite + +%clean + + eval "$deps" + unset deps name modfile link auto load funcs mods moddeps + unfunction zmodunload -- cgit 1.4.1