8.2 KiB
8.2 KiB
antidote-script tests
Setup
% source ./tests/_setup.zsh
% source ./antidote.zsh
%
Script Command
Fails
% antidote-script #=> --exit 1
antidote: error: bundle argument expected
%
Arg style
antidote-script accepts '--arg val', '--arg:val', '--arg=val' syntax
% antidote-script --kind zsh foo/bar #=> --exit 0
% antidote-script --kind:zsh foo/bar #=> --exit 0
% antidote-script --kind=zsh foo/bar #=> --exit 0
% antidote-script --kind+zsh foo/bar #=> --exit 1
%
Scripting types
antidote-script works with local files and directories, as well as remote repos.
Script a file:
% antidote-script $ZDOTDIR/aliases.zsh | subenv ZDOTDIR
source $ZDOTDIR/aliases.zsh
%
Script a lib directory:
% antidote-script $ZDOTDIR/custom/lib | subenv ZDOTDIR
fpath+=( $ZDOTDIR/custom/lib )
source $ZDOTDIR/custom/lib/lib1.zsh
source $ZDOTDIR/custom/lib/lib2.zsh
%
Script a plugin directory:
% antidote-script $ZDOTDIR/custom/plugins/myplugin | subenv ZDOTDIR
fpath+=( $ZDOTDIR/custom/plugins/myplugin )
source $ZDOTDIR/custom/plugins/myplugin/myplugin.plugin.zsh
%
Script repos in antibody style:
% zstyle ':antidote:bundle' use-friendly-names off
% ANTIDOTE_HOME=$HOME/.cache/antibody
% antidote-script foo/bar | subenv ANTIDOTE_HOME #=> --file ./testdata/script-foobar.zsh
% antidote-script https://github.com/foo/bar | subenv ANTIDOTE_HOME #=> --file ./testdata/script-foobar.zsh
% antidote-script https://github.com/foo/bar.git | subenv ANTIDOTE_HOME #=> --file ./testdata/script-foobar.zsh
% antidote-script git@github.com:foo/qux.git | subenv ANTIDOTE_HOME #=> --file ./testdata/script-fooqux.zsh
% zstyle ':antidote:bundle' use-friendly-names on
% ANTIDOTE_HOME=$HOME/.cache/antidote
%
Annotations
kind:clone
Nothing happens when the plugin already exists.
% antidote-script --kind clone foo/bar
%
Clone a missing plugin.
% antidote-script --kind clone bar/foo
# antidote cloning bar/foo...
%
kind:zsh
% antidote-script --kind zsh foo/bar | subenv ANTIDOTE_HOME
fpath+=( $ANTIDOTE_HOME/foo/bar )
source $ANTIDOTE_HOME/foo/bar/bar.plugin.zsh
%
kind:path
% antidote-script --kind path foo/bar | subenv ANTIDOTE_HOME
export PATH="$ANTIDOTE_HOME/foo/bar:$PATH"
%
kind:fpath
% antidote-script --kind fpath foo/bar | subenv ANTIDOTE_HOME
fpath+=( $ANTIDOTE_HOME/foo/bar )
%
kind:autoload
% antidote-script --kind autoload $ZDOTDIR/functions | subenv ZDOTDIR
fpath+=( $ZDOTDIR/functions )
builtin autoload -Uz $fpath[-1]/*(N.:t)
%
kind:defer
% antidote-script --kind defer foo/bar | subenv ANTIDOTE_HOME
if ! (( $+functions[zsh-defer] )); then
fpath+=( $ANTIDOTE_HOME/getantidote/zsh-defer )
source $ANTIDOTE_HOME/getantidote/zsh-defer/zsh-defer.plugin.zsh
fi
fpath+=( $ANTIDOTE_HOME/foo/bar )
zsh-defer source $ANTIDOTE_HOME/foo/bar/bar.plugin.zsh
%
Test defer zstyle settings
% zstyle ':antidote:bundle:*' defer-options '-a'
% zstyle ':antidote:bundle:foo/bar' defer-options '-p'
% antidote-script --kind defer foo/bar | subenv ANTIDOTE_HOME
if ! (( $+functions[zsh-defer] )); then
fpath+=( $ANTIDOTE_HOME/getantidote/zsh-defer )
source $ANTIDOTE_HOME/getantidote/zsh-defer/zsh-defer.plugin.zsh
fi
fpath+=( $ANTIDOTE_HOME/foo/bar )
zsh-defer -p source $ANTIDOTE_HOME/foo/bar/bar.plugin.zsh
%
% # Uses different defer options due to zstyle matching
% antidote-script --kind defer bar/baz | subenv ANTIDOTE_HOME
if ! (( $+functions[zsh-defer] )); then
fpath+=( $ANTIDOTE_HOME/getantidote/zsh-defer )
source $ANTIDOTE_HOME/getantidote/zsh-defer/zsh-defer.plugin.zsh
fi
fpath+=( $ANTIDOTE_HOME/bar/baz )
zsh-defer -a source $ANTIDOTE_HOME/bar/baz/baz.plugin.zsh
% # cleanup
% t_reset
%
path:plugin-dir
% antidote-script --path plugins/extract ohmy/ohmy | subenv ANTIDOTE_HOME
fpath+=( $ANTIDOTE_HOME/ohmy/ohmy/plugins/extract )
source $ANTIDOTE_HOME/ohmy/ohmy/plugins/extract/extract.plugin.zsh
%
path:file
% antidote-script --path lib/lib1.zsh ohmy/ohmy | subenv ANTIDOTE_HOME
source $ANTIDOTE_HOME/ohmy/ohmy/lib/lib1.zsh
%
path:lib-dir
% antidote-script --path lib ohmy/ohmy | subenv ANTIDOTE_HOME
fpath+=( $ANTIDOTE_HOME/ohmy/ohmy/lib )
source $ANTIDOTE_HOME/ohmy/ohmy/lib/lib1.zsh
source $ANTIDOTE_HOME/ohmy/ohmy/lib/lib2.zsh
source $ANTIDOTE_HOME/ohmy/ohmy/lib/lib3.zsh
%
path:theme
% antidote-script --path themes/pretty.zsh-theme ohmy/ohmy | subenv ANTIDOTE_HOME
source $ANTIDOTE_HOME/ohmy/ohmy/themes/pretty.zsh-theme
%
conditional:testfunc
% antidote-script --conditional is-macos --path plugins/macos ohmy/ohmy | subenv ANTIDOTE_HOME
if is-macos; then
fpath+=( $ANTIDOTE_HOME/ohmy/ohmy/plugins/macos )
source $ANTIDOTE_HOME/ohmy/ohmy/plugins/macos/macos.plugin.zsh
fi
%
autoload:funcdir
% antidote-script --path plugins/macos --autoload functions ohmy/ohmy | subenv ANTIDOTE_HOME
fpath+=( $ANTIDOTE_HOME/ohmy/ohmy/plugins/macos/functions )
builtin autoload -Uz $fpath[-1]/*(N.:t)
fpath+=( $ANTIDOTE_HOME/ohmy/ohmy/plugins/macos )
source $ANTIDOTE_HOME/ohmy/ohmy/plugins/macos/macos.plugin.zsh
%
fpath-rule:append/prepend
% # append
% antidote-script --fpath-rule append --path plugins/docker ohmy/ohmy | subenv ANTIDOTE_HOME
fpath+=( $ANTIDOTE_HOME/ohmy/ohmy/plugins/docker )
source $ANTIDOTE_HOME/ohmy/ohmy/plugins/docker/docker.plugin.zsh
% # prepend
% antidote-script --fpath-rule prepend --path plugins/docker ohmy/ohmy | subenv ANTIDOTE_HOME
fpath=( $ANTIDOTE_HOME/ohmy/ohmy/plugins/docker $fpath )
source $ANTIDOTE_HOME/ohmy/ohmy/plugins/docker/docker.plugin.zsh
% # whoops
% antidote-script --fpath-rule foobar --path plugins/docker ohmy/ohmy 2>&1
antidote: error: unexpected fpath rule: 'foobar'
%
pre/post functions
% # pre
% antidote-script --pre run_before foo/bar | subenv ANTIDOTE_HOME
run_before
fpath+=( $ANTIDOTE_HOME/foo/bar )
source $ANTIDOTE_HOME/foo/bar/bar.plugin.zsh
% # post
% antidote-script --post run_after foo/bar | subenv ANTIDOTE_HOME
fpath+=( $ANTIDOTE_HOME/foo/bar )
source $ANTIDOTE_HOME/foo/bar/bar.plugin.zsh
run_after
%
If a plugin is deferred, so is its post event
% antidote-script --pre pre-event --post post-event --kind defer foo/bar | subenv ANTIDOTE_HOME
pre-event
if ! (( $+functions[zsh-defer] )); then
fpath+=( $ANTIDOTE_HOME/getantidote/zsh-defer )
source $ANTIDOTE_HOME/getantidote/zsh-defer/zsh-defer.plugin.zsh
fi
fpath+=( $ANTIDOTE_HOME/foo/bar )
zsh-defer source $ANTIDOTE_HOME/foo/bar/bar.plugin.zsh
zsh-defer post-event
%
Private functions
__antidote_initfiles
setup
% # load __antidote_initfiles from private funcs in antidote-script
% antidote-script -h &>/dev/null
% PLUGINDIR=$T_TEMPDIR/initfiles/myplugin
% mkdir -p $PLUGINDIR
% touch $PLUGINDIR/myplugin.plugin.zsh
% touch $PLUGINDIR/whatever.plugin.zsh
% touch $PLUGINDIR/file.zsh
% touch $PLUGINDIR/file.sh
% touch $PLUGINDIR/file.bash
% touch $PLUGINDIR/mytheme.zsh-theme
% touch $PLUGINDIR/README.md
% touch $PLUGINDIR/file
% mkdir -p $PLUGINDIR/lib
% touch $PLUGINDIR/lib/lib1.zsh
% touch $PLUGINDIR/lib/lib2.zsh
% touch $PLUGINDIR/lib/lib3.zsh
%
myplugin.plugin.zsh
% __antidote_initfiles $PLUGINDIR | subenv PLUGINDIR
$PLUGINDIR/myplugin.plugin.zsh
% rm $PLUGINDIR/myplugin.plugin.zsh
%
whatever.plugin.zsh
% __antidote_initfiles $PLUGINDIR | subenv PLUGINDIR
$PLUGINDIR/whatever.plugin.zsh
% rm $PLUGINDIR/whatever.plugin.zsh
%
file.zsh
% __antidote_initfiles $PLUGINDIR | subenv PLUGINDIR
$PLUGINDIR/file.zsh
% rm $PLUGINDIR/file.zsh
%
file.sh
% __antidote_initfiles $PLUGINDIR | subenv PLUGINDIR
$PLUGINDIR/file.sh
% rm $PLUGINDIR/file.sh
%
mytheme.zsh-theme
% __antidote_initfiles $PLUGINDIR | subenv PLUGINDIR
$PLUGINDIR/mytheme.zsh-theme
% rm $PLUGINDIR/mytheme.zsh-theme
%
lib
% __antidote_initfiles $PLUGINDIR/lib | subenv PLUGINDIR
$PLUGINDIR/lib/lib1.zsh
$PLUGINDIR/lib/lib2.zsh
$PLUGINDIR/lib/lib3.zsh
%
FAIL: no files left that match
% __antidote_initfiles $PLUGINDIR #=> --exit 1
%
FAIL: Empty
% PLUGINDIR=$T_TEMPDIR/initfiles/foo
% mkdir -p $PLUGINDIR
% __antidote_initfiles $PLUGINDIR #=> --exit 1
%
Teardown
% t_teardown
%