summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Test/.distfiles2
-rw-r--r--Test/V01zmodload.ztst146
3 files changed, 152 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 67fb9dcc9..851c7ba0c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2001-05-18 Bart Schaefer <schaefer@zsh.org>
+
+ * unposted: Test/.distfiles, Test/V01zmodload.ztst: Add the basic
+ tests of zmodload functionality.
+
2001-05-18 Clint Adams <clint@zsh.org>
* 14378: Completion/Unix/Type/_tex: also work for
diff --git a/Test/.distfiles b/Test/.distfiles
index 1daff4871..6148efa85 100644
--- a/Test/.distfiles
+++ b/Test/.distfiles
@@ -7,6 +7,6 @@ A02alias.ztst C03traps.ztst E02xtrace.ztst
A03quoting.ztst C04funcdef.ztst Makefile.in ztst.zsh
A04redirect.ztst D01prompt.ztst V02zregexparse.ztst
A05execution.ztst D02glob.ztst Y01completion.ztst
-D06subscript.ztst
+D06subscript.ztst V01zmodload.ztst
README
'
diff --git a/Test/V01zmodload.ztst b/Test/V01zmodload.ztst
new file mode 100644
index 000000000..2575b271c
--- /dev/null
+++ b/Test/V01zmodload.ztst
@@ -0,0 +1,146 @@
+# 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=()
+ while read name modfile link auto load funcs
+ do
+ [[ $name == \#* ]] && continue
+ eval "$name $modfile $link $auto $load"
+ [[ $link == no ]] && continue
+ mods=($mods $name)
+ done < $ZTST_testdir/../config.modules
+
+%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 fond 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 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 :
+ 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
+
+# Remove all inter-module dependencies so that we can unload in any order.
+# Skip the two modules that are required by the test system!
+
+ mods[(r)zsh/main]=()
+ mods[(r)zsh/parameter]=()
+ for m in $mods
+ do
+ zmodload -ud $m
+ done
+0d:Remove module dependecies
+
+# Unload all the modules again (except the two we skipped, of course).
+
+ zmodload -u $mods
+0d:Unload the modules loaded by this test suite
+
+%clean
+
+ unset name modfile link auto load funcs mods m