summaryrefslogtreecommitdiff
path: root/dotfiles/system/.zsh/modules/Test/E01options.ztst
diff options
context:
space:
mode:
Diffstat (limited to 'dotfiles/system/.zsh/modules/Test/E01options.ztst')
-rw-r--r--dotfiles/system/.zsh/modules/Test/E01options.ztst1313
1 files changed, 0 insertions, 1313 deletions
diff --git a/dotfiles/system/.zsh/modules/Test/E01options.ztst b/dotfiles/system/.zsh/modules/Test/E01options.ztst
deleted file mode 100644
index 2bd4fdb..0000000
--- a/dotfiles/system/.zsh/modules/Test/E01options.ztst
+++ /dev/null
@@ -1,1313 +0,0 @@
-# Test various shell options.
-# Interactive options not tested here:
-# ALWAYS_LAST_PROMPT
-# ALWAYS_TO_END
-# APPEND_HISTORY (history not maintained)
-# AUTO_LIST
-# AUTO_MENU
-# AUTO_NAME_DIRS (named directory table not maintained)
-# AUTO_PARAM_KEYS
-# AUTO_PARAM_SLASH
-# AUTO_REMOVE_SLASH
-# AUTO_RESUME
-# BANG_HIST
-# BASH_AUTO_LIST
-# BEEP (!)
-# BG_NICE
-# CHECK_JOBS
-# COMPLETE_ALIASES
-# COMPLETE_IN_WORD
-# CORRECT
-# CORRECT_ALL
-# CSH_JUNKIE_HISTORY
-# DVORAK
-# EXTENDED_HISTORY
-# FLOW_CONTROL
-# GLOB_COMPLETE
-# HIST_ALLOW_CLOBBER
-# HIST_BEEP
-# HIST_EXPIRE_DUPS_FIRST
-# HIST_FIND_NO_DUPS
-# HIST_IGNORE_ALL_DUPS
-# HIST_IGNORE_DUPS (-h)
-# HIST_IGNORE_SPACE (-g)
-# HIST_NO_FUNCTIONS
-# HIST_NO_STORE
-# HIST_REDUCE_BLANKS
-# HIST_SAVE_NO_DUPS
-# HIST_VERIFY
-# HUP
-# IGNORE_EOF
-# INC_APPEND_HISTORY
-# INTERACTIVE
-# INTERACTIVE_COMMENTS
-# LIST_AMBIGUOUS
-# LIST_BEEP
-# LIST_PACKED
-# LIST_ROWS_FIRST
-# LIST_TYPES
-# LOGIN
-# LONG_LIST_JOBS
-# MAIL_WARNING
-# MENU_COMPLETE
-# MONITOR
-# NOTIFY
-# OVERSTRIKE
-# PRINT_EIGHT_BIT
-# PROMPT_CR
-# PUSHD_SILENT
-# REC_EXACT
-# RM_STAR_SILENT
-# RM_STAR_WAIT
-# SHARE_HISTORY
-# SINGLE_LINE_ZLE
-# SUN_KEYBOARD_HACK
-# ZLE
-# The following require SHINSTDIN and are not (yet) tested:
-# AUTO_CD
-# SHINSTDIN
-#
-# Other difficult things I haven't done:
-# GLOBAL_RCS (uses fixed files outside build area)
-# HASH_CMDS )
-# HASH_DIRS ) fairly seriously internal, hard to test at all
-# HASH_LIST_ALL )
-# PRINT_EXIT_STATUS haven't worked out what this does yet, although
-# Bart suggested a fix.
-# PRIVILEGED (similar to GLOBAL_RCS)
-# RCS ( " " " " )
-# SH_OPTION_LETTERS even I found this too dull to set up a test for
-# SINGLE_COMMAND kills shell
-# VERBOSE hard because done on input (c.f. SHINSTDIN).
-
-%prep
- mkdir options.tmp && cd options.tmp
-
- mkdir tmpcd homedir
-
- touch tmpfile1 tmpfile2
-
- mydir=$PWD
- mydirt=`print -P %~`
- mydirhome=`export HOME=$mydir/homedir; print -P %~`
- catpath=$(which cat)
- lspath==ls
-
-%test
-
- alias echo='print foo'
- unsetopt aliases
- # use eval else aliases are all parsed at start
- eval echo bar
- setopt aliases
- eval echo bar
- unalias echo
-0:ALIASES option
->bar
->foo bar
-
- setopt allexport
- testpm1=exported
- unsetopt allexport
- testpm2=unexported
- print ${(t)testpm1}
- print ${(t)testpm2}
-0:ALL_EXPORT option
->scalar-export
->scalar
-
- # Count the number of directories on the stack. Don't care what they are.
- dircount() { dirs -v | tail -1 | awk '{ print $1 + 1}'; }
- unsetopt autopushd
- cd tmpcd
- dircount
- cd ..
- setopt autopushd
- cd tmpcd
- dircount
- unsetopt autopushd
- popd >/dev/null
-0:AUTO_PUSHD option
->1
->2
-
- unsetopt badpattern
- print [a
- setopt badpattern
- print [b
-1:BAD_PATTERN option
->[a
-?(eval):4: bad pattern: [b
-
- unsetopt bareglobqual nomatch
- print *(.)
- setopt bareglobqual nomatch
- print *(.)
-0:BARE_GLOB_QUAL option
->*(.)
->tmpfile1 tmpfile2
-
- setopt braceccl
- print {abcd}
- unsetopt braceccl
- print {abcd}
-0:BRACE_CCL option
->a b c d
->{abcd}
-
-# Don't use NUL as a field separator in the following.
- setopt braceccl
- print {$'\0'-$'\5'} | IFS=' ' read -A chars
- for c in $chars; do print $(( #c )); done
- unsetopt braceccl
-0:BRACE_CCL option starting from NUL
->0
->1
->2
->3
->4
->5
-
- setopt bsdecho
- echo "histon\nimpington"
- echo -e "girton\ncottenham"
- unsetopt bsdecho
- echo "newnham\ncomberton"
-0:BSD_ECHO option
->histon\nimpington
->girton
->cottenham
->newnham
->comberton
-
- unsetopt c_bases
- print $(( [#16]15 ))
- print $(( [#8]9 ))
- setopt c_bases
- print $(( [#16]31 ))
- print $(( [#8]17 ))
- setopt octal_zeroes
- print $(( [#8]19 ))
- unsetopt c_bases octal_zeroes
-0:C_BASES option
->16#F
->8#11
->0x1F
->8#21
->023
-
- setopt cdablevars
- # only absolute paths are eligible for ~-expansion
- cdablevar1=tmpcd
- (cd cdablevar1)
- cdablevar2=$PWD/tmpcd
- cd cdablevar2
- cd ..
- print back in ${PWD:t}
- unsetopt cdablevars
- cd cdablevar2
-1q:CDABLE_VARS option
->back in options.tmp
-?(eval):cd:4: no such file or directory: cdablevar1
-?(eval):cd:10: no such file or directory: cdablevar2
-
-# CHASE_DOTS should go with CHASE_LINKS in B01cd.ztst
-# which saves me having to write it here.
-
- setopt noclobber
- rm -f foo1 bar1 rod1
- echo waterbeach >foo1
- (echo landbeach >foo1)
- cat foo1
- (echo lode >>bar1)
- [[ -f bar1 ]] && print That shouldn\'t be there.
- echo denny >rod1
- echo wicken >>rod1
- cat rod1
- unsetopt noclobber
- rm -f foo2 bar2 rod2
- echo ely >foo2
- echo march >foo2
- cat foo2
- echo wimpole >>bar2
- cat bar2
- echo royston >rod2
- echo foxton >>rod2
- cat rod2
- rm -f foo* bar* rod*
-0:CLOBBER option
->waterbeach
->denny
->wicken
->march
->wimpole
->royston
->foxton
-?(eval):4: file exists: foo1
-?(eval):6: no such file or directory: bar1
-
- setopt cshjunkieloops
- eval 'for f in swaffham bulbeck; print $f; end'
- print next one should fail >&2
- unsetopt cshjunkieloops
- eval 'for f in chesterton arbury; print $f; end'
-1:CSH_JUNKIE_LOOPS option (for loop)
->swaffham
->bulbeck
-?next one should fail
-?(eval):1: parse error near `end'
-
-# ` emacs deconfusion
-
- setopt cshjunkiequotes
- print this should cause an error >&2
- eval "print 'line one
- line two'"
- print this should not >&2
- eval "print 'line three\\
- line four'"
- unsetopt cshjunkiequotes
-0:CSH_JUNKIE_QUOTES option
->line three
-> line four
-?this should cause an error
-?(eval):1: unmatched '
-?this should not
-
-# ' emacs deconfusion
-
- nullcmd() { print '$NULLCMD run'; }
- readnullcmd() { print 'Running $READNULLCMD'; cat; }
- NULLCMD=nullcmd
- READNULLCMD=readnullcmd
- setopt cshnullcmd
- rm -f foo
- print "This should fail" >&2
- (>foo)
- print "This should succeed" >&2
- print "These are the contents of foo" >foo
- cat foo
- print "This should also fail" >&2
- (<foo)
- unsetopt cshnullcmd
- rm -f foo
- >foo
- <foo
- rm -f foo
-0:CSH_NULL_CMD option
->These are the contents of foo
->Running $READNULLCMD
->$NULLCMD run
-?This should fail
-?(eval):8: redirection with no command
-?This should succeed
-?This should also fail
-?(eval):13: redirection with no command
-
-# nomatch should be overridden by cshnullglob
- setopt nomatch cshnullglob
- print tmp* nothing* blah
- print -n 'hoping for no match: ' >&2
- (print nothing* blah)
- print >&2
- unsetopt cshnullglob nomatch
- print tmp* nothing* blah
- print nothing* blah
-0:CSH_NULL_GLOB option
->tmpcd tmpfile1 tmpfile2 blah
->tmpcd tmpfile1 tmpfile2 nothing* blah
->nothing* blah
-?hoping for no match: (eval):4: no match
-?
-
-# The trick is to avoid =cat being expanded in the output while $catpath is.
- setopt NO_equals
- print -n trick; print =cat
- setopt equals
- print -n trick; print =cat
-0q:EQUALS option
->trick=cat
->trick$catpath
-
-# explanation of expected TRAPZERR output: from false and from
-# testfn() with ERR_EXIT on (hmm, should we really get a second one from
-# the function exiting?), then from the false only with ERR_EXIT off.
- TRAPZERR() { print ZERR trapped; }
- testfn() { setopt localoptions $2; print $1 before; false; print $1 after; }
- (testfn on errexit)
- testfn off
- unfunction TRAPZERR testfn
-0:ERR_EXIT option
->on before
->ZERR trapped
->ZERR trapped
->off before
->ZERR trapped
->off after
-
- (print before; setopt noexec; print after)
-0:NO_EXEC option
->before
-
- (setopt noexec
- typeset -A hash
- hash['this is a string'])
-0:NO_EXEC option should not attempt to parse subscripts
-
- (setopt noexec nomatch
- echo *NonExistentFile*)
-0:NO_EXEC option should not do globbing
-
- (setopt noexec
- echo ${unset_var?Not an error})
-0:NO_EXEC should not test for unset variables
-
- (setopt noexec
- : ${${string%[aeiou]*}/(#m)?(#e)/${(U)MATCH}} Rule 1
- : ${array[4,5][1][2,3]} Rule 2
- : ${${(P)foo[1,6]}[1,3]} Rule 3
- : "${${(@)array}[1,2]}" Rule 5
- : "${(@)${(@)array}[1,2]#?}" Rule 6
- : ${(el.20..X.)${bar}} Rule 11 success case)
-0:NO_EXEC handles parameter substitution examples
-
- (setopt noexec
- : ${(el.20..X.)$bar} Rule 11 failure case)
-1:NO_EXEC does recognize bad substitution syntax
-*?* bad substitution
-
- setopt NO_eval_lineno
- eval 'print $LINENO'
- setopt eval_lineno
- eval 'print $LINENO'
-0:EVAL_LINENO option
->2
->1
-
- # The EXTENDED_GLOB test doesn't test globbing fully --- it just tests
- # that certain patterns are treated literally with the option off
- # and as patterns with the option on.
- testfn() { print -n "$1 $2 $3 "; if [[ $1 = ${~2} ]];
- then print yes; else print no; fi; }
- tests=('a#' '?~b' '^aa')
- strings=('a' 'aa' 'b' 'a#' '?~b' '^aa')
- for opt in noextendedglob extendedglob; do
- setopt $opt
- for test in $tests; do
- for string in $strings; do
- testfn $string $test $opt
- done
- done
- done
-0:EXTENDED_GLOB option
->a a# noextendedglob no
->aa a# noextendedglob no
->b a# noextendedglob no
->a# a# noextendedglob yes
->?~b a# noextendedglob no
->^aa a# noextendedglob no
->a ?~b noextendedglob no
->aa ?~b noextendedglob no
->b ?~b noextendedglob no
->a# ?~b noextendedglob no
->?~b ?~b noextendedglob yes
->^aa ?~b noextendedglob no
->a ^aa noextendedglob no
->aa ^aa noextendedglob no
->b ^aa noextendedglob no
->a# ^aa noextendedglob no
->?~b ^aa noextendedglob no
->^aa ^aa noextendedglob yes
->a a# extendedglob yes
->aa a# extendedglob yes
->b a# extendedglob no
->a# a# extendedglob no
->?~b a# extendedglob no
->^aa a# extendedglob no
->a ?~b extendedglob yes
->aa ?~b extendedglob no
->b ?~b extendedglob no
->a# ?~b extendedglob no
->?~b ?~b extendedglob no
->^aa ?~b extendedglob no
->a ^aa extendedglob yes
->aa ^aa extendedglob no
->b ^aa extendedglob yes
->a# ^aa extendedglob yes
->?~b ^aa extendedglob yes
->^aa ^aa extendedglob yes
-
- foo() { print My name is $0; }
- unsetopt functionargzero
- foo
- setopt functionargzero
- foo
- unfunction foo
-0:FUNCTION_ARGZERO option
->My name is (anon)
->My name is foo
-
- setopt _NO_glob_
- print tmp*
- set -o glob
- print tmp*
-0:GLOB option
->tmp*
->tmpcd tmpfile1 tmpfile2
-
- showit() { local v;
- for v in first second third; do
- eval print \$$v \$\{\(t\)$v\}
- done;
- }
- setit() { typeset -x first=inside1;
- typeset +g -x second=inside2;
- typeset -g -x third=inside3;
- showit;
- }
- first=outside1 second=outside2 third=outside3
- unsetopt globalexport
- setit
- showit
- setopt globalexport
- setit
- showit
- unfunction setit showit
-0:GLOBAL_EXPORT option
->inside1 scalar-local-export
->inside2 scalar-local-export
->inside3 scalar-export
->outside1 scalar
->outside2 scalar
->inside3 scalar-export
->inside1 scalar-export
->inside2 scalar-local-export
->inside3 scalar-export
->inside1 scalar-export
->outside2 scalar
->inside3 scalar-export
-
-# GLOB_ASSIGN is tested in A06assign.ztst.
-
- mkdir onlysomefiles
- touch onlysomefiles/.thisfile onlysomefiles/thatfile
- setopt globdots
- print onlysomefiles/*
- unsetopt globdots
- print onlysomefiles/*
- rm -rf onlysomefiles
-0:GLOB_DOTS option
->onlysomefiles/.thisfile onlysomefiles/thatfile
->onlysomefiles/thatfile
-
- # we've tested this enough times already...
- # could add some stuff for other sorts of expansion
- foo='tmp*'
- setopt globsubst
- print ${foo}
- unsetopt globsubst
- print ${foo}
-0:GLOB_SUBST option
->tmpcd tmpfile1 tmpfile2
->tmp*
-
- setopt histsubstpattern
- print *(:s/t??/TING/)
- foo=(tmp*)
- print ${foo:s/??p/THUMP/}
- foo=(one.c two.c three.c)
- print ${foo:s/#%(#b)t(*).c/T${match[1]}.X/}
- print *(#q:s/#(#b)tmp(*e)/'scrunchy${match[1]}'/)
- unsetopt histsubstpattern
-0:HIST_SUBST_PATTERN option
->TINGcd TINGfile1 TINGfile2 homedir
->THUMPcd THUMPfile1 THUMPfile2
->one.c Two.X Three.X
->homedir scrunchyfile1 scrunchyfile2 tmpcd
-
- setopt ignorebraces
- echo X{a,b}Y
- unsetopt ignorebraces
- echo X{a,b}Y
-0:IGNORE_BRACES option
->X{a,b}Y
->XaY XbY
-
- setopt ksh_arrays
- array=(one two three)
- print $array $array[2]
- print ${array[0]} ${array[1]} ${array[2]} ${array[3]}
- unsetopt ksh_arrays
- print $array $array[2]
- print ${array[0]} ${array[1]} ${array[2]} ${array[3]}
- unset array
-0:KSH_ARRAYS option
->one one[2]
->one two three
->one two three two
->one two three
-
- fpath=(.)
- echo >foo 'echo foo loaded; foo() { echo foo run; }'
- echo >bar 'bar() { echo bar run; }'
- setopt kshautoload
- autoload foo bar
- foo
- bar
- unfunction foo bar
- unsetopt kshautoload
- autoload foo bar
- foo
- bar
-0:KSH_AUTOLOAD option
->foo loaded
->foo run
->bar run
->foo loaded
->bar run
-
-# ksh_glob is tested by the glob tests.
-
- setopt kshoptionprint globassign
- print set
- setopt | grep kshoptionprint
- setopt | grep globassign
- unsetopt kshoptionprint
- print unset
- setopt | grep kshoptionprint
- setopt | grep globassign
- unsetopt globassign
-0:KSH_OPTION_PRINT option
->set
->kshoptionprint on
->globassign on
->unset
->globassign
-
- # This test is now somewhat artificial as
- # KSH_TYPESET only applies to the builtin
- # interface. Tests to the more standard
- # reserved word interface appear elsewhere.
- (
- # reserved words are handled during parsing,
- # hence eval...
- disable -r typeset
- eval '
- setopt kshtypeset
- ktvars=(ktv1 ktv2)
- typeset ktfoo=`echo arg1 arg2` $ktvars
- print $+ktv1 $+ktv2 $+ktv3
- print $ktfoo
- unsetopt kshtypeset
- typeset noktfoo=`echo noktarg1 noktarg2`
- print $noktfoo
- print $+noktarg1 $+noktarg2
- unset ktfoo ktv1 ktv2 noktfoo noktarg2
- '
- )
-0:KSH_TYPESET option
->1 1 0
->arg1 arg2
->noktarg1
->0 1
-
- showopt() { setopt | egrep 'localoptions|ksharrays'; }
- f1() { setopt localoptions ksharrays; showopt }
- f2() { setopt ksharrays; showopt }
- setopt kshoptionprint
- showopt
- f1
- showopt
- f2
- showopt
- unsetopt ksh_arrays
-0:LOCAL_OPTIONS option
->ksharrays off
->localoptions off
->ksharrays on
->localoptions on
->ksharrays off
->localoptions off
->ksharrays on
->localoptions off
->ksharrays on
->localoptions off
-
-# LOCAL_TRAPS was tested in C03traps (phew).
-
- fn() {
- local HOME=/any/old/name
- print -l var=~ 'anything goes/here'=~ split=`echo maybe not`;
- }
- setopt magicequalsubst
- fn
- setopt kshtypeset
- fn
- unsetopt magicequalsubst kshtypeset
- fn
-0:MAGIC_EQUAL_SUBST option
->var=/any/old/name
->anything goes/here=/any/old/name
->split=maybe
->not
->var=/any/old/name
->anything goes/here=/any/old/name
->split=maybe not
->var=~
->anything goes/here=~
->split=maybe
->not
-
- setopt MARK_DIRS
- print tmp*
- unsetopt MARK_DIRS
- print tmp*
-0:MARK_DIRS option
->tmpcd/ tmpfile1 tmpfile2
->tmpcd tmpfile1 tmpfile2
-
-# maybe should be in A04redirect
- print "This is in1" >in1
- print "This is in2" >in2
- unsetopt multios
- print Test message >foo1 >foo2
- print foo1: $(<foo1)
- print foo2: $(<foo2)
- cat <in1 <in2
- setopt multios
- print Test message >foo1 >foo2
- sleep 1 # damn, race in multios
- print foo1: $(<foo1)
- print foo2: $(<foo2)
- cat <in1 <in2
- rm -f foo1 foo2 in1 in2
-0:MULTIOS option
->foo1:
->foo2: Test message
->This is in2
->foo1: Test message
->foo2: Test message
->This is in1
->This is in2
-
-# This is trickier than it looks. There's a hack at the end of
-# execcmd() to catch the multio processes attached to the
-# subshell, which otherwise sort of get lost in the general turmoil.
-# Without that, the multios aren't synchronous with the subshell
-# or the main shell starting the "cat", so the output files appear
-# empty.
- setopt multios
- ( echo hello ) >multio_out1 >multio_out2 && cat multio_out*
-0:Multios attached to a subshell
->hello
->hello
-
-# This tests for another race in multios.
- print -u $ZTST_fd 'This test hangs the shell when it fails...'
- setopt multios
- echo These are the contents of the file >multio_race.out
- multio_race_fn() { cat; }
- multio_race_fn <$(echo multio_race.out multio_race.out)
-0:Fix for race with input multios
->These are the contents of the file
->These are the contents of the file
-
-# tried this with other things, but not on its own, so much.
- unsetopt nomatch
- print with nonomatch: flooble*
- setopt nomatch
- print with nomatch flooble*
-1:NOMATCH option
->with nonomatch: flooble*
-?(eval):4: no matches found: flooble*
-
-# NULL_GLOB should override NONOMATCH...
- setopt nullglob nomatch
- print frooble* tmp*
- unsetopt nullglob nomatch
- print frooble* tmp*
-0:NULL_GLOB option
->tmpcd tmpfile1 tmpfile2
->frooble* tmpcd tmpfile1 tmpfile2
-
- touch ngs1.txt ngs2.txt ngs10.txt ngs20.txt ngs100.txt ngs200.txt
- setopt numericglobsort
- print -l ngs*
- unsetopt numericglobsort
- print -l ngs*
-0:NUMERIC_GLOB_SORT option
->ngs1.txt
->ngs2.txt
->ngs10.txt
->ngs20.txt
->ngs100.txt
->ngs200.txt
->ngs1.txt
->ngs10.txt
->ngs100.txt
->ngs2.txt
->ngs20.txt
->ngs200.txt
-
- typeset -i 10 oznum
- setopt octalzeroes
- (( oznum = 012 + 013 ))
- print $oznum
- unsetopt octalzeroes
- (( oznum = 012 + 013 ))
- print $oznum
- unset oznum
-0:OCTAL_ZEROES options
->21
->25
-
- typeset -a oldpath
- oldpath=($path)
- mkdir pdt_topdir pathtestdir pdt_topdir/pathtestdir
- print "#!/bin/sh\necho File in upper dir" >pathtestdir/findme
- print "#!/bin/sh\necho File in lower dir" >pdt_topdir/pathtestdir/findme
- chmod u+x pathtestdir/findme pdt_topdir/pathtestdir/findme
- pathtestdir/findme
- rm -f pathtestdir/findme
- setopt pathdirs
- path=($PWD $PWD/pdt_topdir)
- pathtestdir/findme
- print unsetting option...
- unsetopt pathdirs
- pathtestdir/findme
- path=($oldpath)
- unset oldpath
- rm -rf pdt_topdir pathtestdir
-0:PATH_DIRS option
->File in upper dir
->File in lower dir
->unsetting option...
-?(eval):14: no such file or directory: pathtestdir/findme
-
- (setopt pathdirs; path+=( /usr/bin ); type ./env)
-1:whence honours PATH_DIRS option
->./env not found
-
- setopt posixbuiltins
- PATH= command -v print
- PATH= command -V print
- PATH= command print foo
- unsetopt posixbuiltins
- print unsetting...
- PATH= command -V print
- PATH= command print foo
-127:POSIX_BUILTINS option
->print
->print is a shell builtin
->foo
->unsetting...
->print is a shell builtin
-?(eval):8: command not found: print
-
- # With non-special command: original value restored
- # With special builtin: new value kept
- # With special builtin preceeded by "command": original value restored.
- (setopt posixbuiltins
- FOO=val0
- FOO=val1 true; echo $FOO
- FOO=val2 times 1>/dev/null 2>&1; echo $FOO
- FOO=val3 command times 1>/dev/null 2>&1; echo $FOO)
-0:POSIX_BUILTINS and restoring variables
->val0
->val2
->val2
-
-# PRINTEXITVALUE only works if shell input is coming from standard input.
-# Goodness only knows why.
- $ZTST_testdir/../Src/zsh -f <<<'
- setopt printexitvalue
- func() {
- false
- }
- func
- '
-1:PRINT_EXIT_VALUE option
-?zsh: exit 1
-
- $ZTST_testdir/../Src/zsh -f <<<'
- setopt printexitvalue
- () { false; }
- '
-1:PRINT_EXIT_VALUE option for anonymous function
-?zsh: exit 1
-
- setopt promptbang
- print -P !
- setopt nopromptbang
- print -P !
-0:PROMPT_BANG option
->0
->!
-
- unsetopt promptpercent
- print -P '%/'
- setopt promptpercent
- print -P '%/'
-0q:PROMPT_PERCENT option
->%/
->$mydir
-
- setopt promptsubst
- print -P '`echo waaah`'
- unsetopt promptsubst
- print -P '`echo waaah`'
-0:PROMPT_SUBST option
->waaah
->`echo waaah`
-
- dirs
- pushd $mydir/tmpcd
- dirs
- pushd $mydir/tmpcd
- dirs
- setopt pushdignoredups
- pushd $mydir/tmpcd
- dirs
- unsetopt pushdignoredups
- popd >/dev/null
- popd >/dev/null
-0q:PUSHD_IGNOREDUPS option
->$mydirt
->$mydirt/tmpcd $mydirt
->$mydirt/tmpcd $mydirt/tmpcd $mydirt
->$mydirt/tmpcd $mydirt/tmpcd $mydirt
-
- mkdir newcd
- cd $mydir
- pushd $mydir/tmpcd
- pushd $mydir/newcd
- dirs
- pushd -0
- dirs
- setopt pushdminus pushdsilent
- pushd -0
- dirs
- unsetopt pushdminus
- popd >/dev/null
- popd >/dev/null
- cd $mydir
-0q:PUSHD_MINUS option
->$mydirt/newcd $mydirt/tmpcd $mydirt
->$mydirt $mydirt/newcd $mydirt/tmpcd
->$mydirt $mydirt/newcd $mydirt/tmpcd
-
-# Do you have any idea how dull this is?
-
- (export HOME=$mydir/homedir
- pushd $mydir/tmpcd
- pushd
- dirs
- setopt pushdtohome
- pushd
- dirs
- unsetopt pushdtohome
- popd
- pushd
- popd
- dirs)
-0q:PUSHD_TO_HOME option
->$mydirhome $mydirhome/tmpcd
->~ $mydirhome $mydirhome/tmpcd
->$mydirhome
-
- array=(one two three four)
- setopt rcexpandparam
- print aa${array}bb
- unsetopt rcexpandparam
- print aa${array}bb
-0:RC_EXPAND_PARAM option
->aaonebb aatwobb aathreebb aafourbb
->aaone two three fourbb
-
- setopt rcquotes
- # careful, this is done when parsing a complete block
- eval "print 'one''quoted''expression'"
- unsetopt rcquotes
- eval "print 'another''quoted''expression'"
-0:RC_QUOTES option
->one'quoted'expression
->anotherquotedexpression
-
-# too lazy to test jobs -Z and ARGV0.
- (setopt restricted; cd /)
- (setopt restricted; PATH=/bin:/usr/bin)
- (setopt restricted; /bin/ls)
- (setopt restricted; hash ls=/bin/ls)
- (setopt restricted; print ha >outputfile)
- (setopt restricted; exec ls)
- (setopt restricted; unsetopt restricted)
- :
-0:RESTRICTED option
-?(eval):cd:1: restricted
-?(eval):2: PATH: restricted
-?(eval):3: /bin/ls: restricted
-?(eval):hash:4: restricted: /bin/ls
-?(eval):5: writing redirection not allowed in restricted mode
-?(eval):exec:6: ls: restricted
-?(eval):unsetopt:7: can't change option: restricted
-
-# ' emacs deconfusion
-
- fn() {
- print =ls ={ls,}
- local foo='=ls'
- print ${~foo}
- }
- setopt shfileexpansion
- fn
- unsetopt shfileexpansion
- fn
-0q:SH_FILE_EXPANSION option
->$lspath =ls =
->=ls
->$lspath $lspath =
->$lspath
-
- testpat() {
- if [[ $1 = ${~2} ]]; then print $1 $2 yes; else print $1 $2 no; fi
- }
- print option on
- setopt shglob
- repeat 2; do
- for str in 'a(b|c)' ab; do
- testpat $str 'a(b|c)'
- done
- for str in 'a<1-10>' a9; do
- testpat $str 'a<1-10>'
- done
- [[ ! -o shglob ]] && break
- print option off
- unsetopt shglob
- done
-0:SH_GLOB option
->option on
->a(b|c) a(b|c) yes
->ab a(b|c) no
->a<1-10> a<1-10> yes
->a9 a<1-10> no
->option off
->a(b|c) a(b|c) no
->ab a(b|c) yes
->a<1-10> a<1-10> no
->a9 a<1-10> yes
-
- print this is bar >bar
- fn() {
- local NULLCMD=cat READNULLCMD=cat
- { echo hello | >foo } 2>/dev/null
- cat foo
- <bar
- }
- setopt shnullcmd
- print option set
- fn
- unsetopt shnullcmd
- print option unset
- fn
- rm -f foo bar
-0:SH_NULLCMD option
->option set
->option unset
->hello
->this is bar
-
- fn() {
- eval 'for f in foo bar; print $f'
- eval 'for f (word1 word2) print $f'
- eval 'repeat 3 print nonsense'
- }
- unsetopt shortloops
- print option unset
- fn
- setopt shortloops
- print option set
- fn
-0:SHORT_LOOPS option
->option unset
->option set
->foo
->bar
->word1
->word2
->nonsense
->nonsense
->nonsense
-?(eval):1: parse error near `print'
-?(eval):1: parse error near `print'
-?(eval):1: parse error near `print'
-
- fn() { print -l $*; }
- setopt shwordsplit
- print option set
- repeat 2; do
- foo='two words'
- fn $foo
- fn "${=foo}"
- [[ ! -o shwordsplit ]] && break
- unsetopt shwordsplit
- print option unset
- done
-0:SH_WORD_SPLIT option
->option set
->two
->words
->two
->words
->option unset
->two words
->two
->words
-
- fn() { unset foo; print value is $foo; }
- setopt nounset
- print option unset unset by setting nounset
- eval fn
- print option unset reset
- setopt unset
- fn
-0:UNSET option
->option unset unset by setting nounset
->option unset reset
->value is
-?fn: foo: parameter not set
-
- fn1() { unset foo; print value 1 is ${foo#bar}; }
- fn2() { unset foo; print value 2 is ${foo%bar}; }
- fn3() { unset foo; print value 3 is ${foo/bar}; }
- setopt nounset
- print option unset unset by setting nounset
- eval fn1
- eval fn2
- eval fn3
- print option unset reset
- setopt unset
- fn1
- fn2
- fn3
-0:UNSET option with operators
->option unset unset by setting nounset
->option unset reset
->value 1 is
->value 2 is
->value 3 is
-?fn1: foo: parameter not set
-?fn2: foo: parameter not set
-?fn3: foo: parameter not set
-
- fn() {
- emulate -L zsh
- setopt warncreateglobal
- foo1=bar1
- unset foo1
- foo1=bar2
- local foo2=bar3
- unset foo2
- foo2=bar4
- typeset -g foo3
- foo3=bar5
- fn2() {
- foo3=bar6
- }
- foo4=bar7 =true
- (( foo5=8 ))
- integer foo6=9
- (( foo6=10 ))
- }
- # don't pollute the test environment with the variables...
- (fn)
-0:WARN_CREATE_GLOBAL option
-?fn:3: scalar parameter foo1 created globally in function fn
-?fn:5: scalar parameter foo1 created globally in function fn
-?fn:15: numeric parameter foo5 created globally in function fn
-
- fn() {
- emulate -L zsh
- setopt warncreateglobal
- TZ=UTC date >&/dev/null
- local um=$(TZ=UTC date 2>/dev/null)
- }
- fn
-0:WARN_CREATE_GLOBAL negative cases
-
- (
- foo1=global1 foo2=global2 foo3=global3 foo4=global4
- integer foo5=5
- # skip foo6, defined in fn_wnv
- foo7=(one two)
- fn_wnv() {
- # warns
- foo1=bar1
- # doesn't warn
- local foo2=bar3
- unset foo2
- # still doesn't warn
- foo2=bar4
- # doesn't warn
- typeset -g foo3=bar5
- # warns
- foo3=bar6
- fn2() {
- # warns if global option, not attribute
- foo3=bar6
- }
- fn2
- # doesn't warn
- foo4=bar7 =true
- # warns
- (( foo5=8 ))
- integer foo6=9
- # doesn't warn
- (( foo6=10 ))
- foo7[3]=three
- foo7[4]=(four)
- }
- print option off >&2
- fn_wnv
- print option on >&2
- setopt warnnestedvar
- fn_wnv
- unsetopt warnnestedvar
- print function attribute on >&2
- functions -W fn_wnv
- fn_wnv
- print all off again >&2
- functions +W fn_wnv
- fn_wnv
- )
-0:WARN_NESTED_VAR option
-?option off
-?option on
-?fn_wnv:2: scalar parameter foo1 set in enclosing scope in function fn_wnv
-?fn_wnv:11: scalar parameter foo3 set in enclosing scope in function fn_wnv
-?fn2:2: scalar parameter foo3 set in enclosing scope in function fn2
-?fn_wnv:20: numeric parameter foo5 set in enclosing scope in function fn_wnv
-?function attribute on
-?fn_wnv:2: scalar parameter foo1 set in enclosing scope in function fn_wnv
-?fn_wnv:11: scalar parameter foo3 set in enclosing scope in function fn_wnv
-?fn_wnv:20: numeric parameter foo5 set in enclosing scope in function fn_wnv
-?all off again
-
-
- (
- setopt warnnestedvar
- () {
- typeset -A a
- : ${a[hello world]::=foo}
- print ${(t)a}
- key="hello world"
- print $a[$key]
- }
- )
-0:No false positive on parameter used with subscripted assignment
->association-local
->foo
-
- (
- setopt warnnestedvar
- () {
- local var=(one two)
- () { var=three; }
- print $var
- }
- )
-0:Warn when changing type of nested variable: array to scalar.
-?(anon): scalar parameter var set in enclosing scope in function (anon)
->three
-
- (
- setopt warnnestedvar
- () {
- local var=three
- () { var=(one two); }
- print $var
- }
- )
-0:Warn when changing type of nested variable: scalar to array.
-?(anon): array parameter var set in enclosing scope in function (anon)
->one two
-
-# This really just tests if XTRACE is egregiously broken.
-# To test it properly would need a full set of its own.
- fn() { print message; }
- PS4='+%N:%i> '
- setopt xtrace
- fn
- unsetopt xtrace
- fn
-0:XTRACE option
->message
->message
-?+(eval):4> fn
-?+fn:0> print message
-?+(eval):5> unsetopt xtrace
-
- setopt ignoreclosebraces
- eval "icb_test() { echo this is OK; }"
- icb_test
- icb_args() { print $#; }
- eval "icb_args { this, is, ok, too }"
-0:IGNORE_CLOSE_BRACES option
->this is OK
->6
-
- (setopt pipefail
- true | true | true
- print $?
- true | false | true
- print $?
- exit 2 | false | true
- print $?
- false | exit 2 | true
- print $?)
-0:PIPE_FAIL option
->0
->1
->1
->2
-
- for (( i = 0; i < 10; i++ )); do
- () {
- print $i
- break
- }
- done
-0:NO_LOCAL_LOOPS
->0
-
- () {
- emulate -L zsh
- setopt localloops
- for (( i = 0; i < 10; i++ )); do
- () {
- setopt nolocalloops # ignored in parent
- print $i
- break
- }
- done
- }
-0:LOCAL_LOOPS
->0
->1
->2
->3
->4
->5
->6
->7
->8
->9
-?(anon):4: `break' active at end of function scope
-?(anon):4: `break' active at end of function scope
-?(anon):4: `break' active at end of function scope
-?(anon):4: `break' active at end of function scope
-?(anon):4: `break' active at end of function scope
-?(anon):4: `break' active at end of function scope
-?(anon):4: `break' active at end of function scope
-?(anon):4: `break' active at end of function scope
-?(anon):4: `break' active at end of function scope
-?(anon):4: `break' active at end of function scope