summaryrefslogtreecommitdiff
path: root/dotfiles/system/.zsh/modules/Test/A01grammar.ztst
diff options
context:
space:
mode:
Diffstat (limited to 'dotfiles/system/.zsh/modules/Test/A01grammar.ztst')
-rw-r--r--dotfiles/system/.zsh/modules/Test/A01grammar.ztst790
1 files changed, 0 insertions, 790 deletions
diff --git a/dotfiles/system/.zsh/modules/Test/A01grammar.ztst b/dotfiles/system/.zsh/modules/Test/A01grammar.ztst
deleted file mode 100644
index e4b6870..0000000
--- a/dotfiles/system/.zsh/modules/Test/A01grammar.ztst
+++ /dev/null
@@ -1,790 +0,0 @@
-#
-# This file contains tests corresponding to the `Shell Grammar' texinfo node.
-#
-
-%prep
-
- mkdir basic.tmp && cd basic.tmp
-
- touch foo bar
- echo "'" >unmatched_quote.txt
-
-%test
-#
-# Tests for `Simple Commands and Pipelines'
-#
-
- # Test skipping early to ensure we run the remainder...
- if [[ -n $ZTST_test_skip ]]; then
- ZTST_skip="Test system verification for skipping"
- else
- print "This is standard output"
- print "This is standard error" >&2
- false
- fi
-1:Test skipping if ZTST_test_skip is set
->This is standard output
-?This is standard error
-
- echo foo | cat | sed 's/foo/bar/'
-0:Basic pipeline handling
->bar
-
- false | true
-0:Exit status of pipeline with builtins (true)
-
- true | false
-1:Exit status of pipeline with builtins (false)
-
- false
- $nonexistent_variable
-0:Executing command that evaluates to empty resets status
-
- false
- sleep 1 &
- print $?
- # a tidy test is a happy test
- wait $!
-0:Starting background command resets status
->0
-
- false
- . /dev/null
-0:Sourcing empty file resets status
-
- fn() { local foo; read foo; print $foo; }
- coproc fn
- print -p coproc test output
- read -p bar
- print $bar
-0:Basic coprocess handling
->coproc test output
-
- true | false && print true || print false
-0:Basic sublist (i)
->false
-
- false | true && print true || print false
-0:Basic sublist (ii)
->true
-
- (cd /NonExistentDirectory >&/dev/null) || print false
-0:Basic subshell list with error
->false
-
- { cd /NonExistentDirectory >&/dev/null } || print false
-0:Basic current shell list with error
->false
-
-#
-# Tests for `Precommand Modifiers'
-#
- - $ZTST_testdir/../Src/zsh -fc "[[ \$0 = \"-$ZTST_testdir/../Src/zsh\" ]]"
-0:`-' precommand modifier
-
- echo f*
- noglob echo f*
-0:`noglob' precommand modifier
->foo
->f*
-
- (exec /bin/sh; echo bar)
-0:`exec' precommand modifier
-
- (exec -l $ZTST_testdir/../Src/zsh -fc 'echo $0' | sed 's%/.*/%%' )
-0:`exec' with -l option
->-zsh
-
- (exec -a /bin/SPLATTER /bin/sh -c 'echo $0')
-0:`exec' with -a option
->/bin/SPLATTER
-
- (exec -a/bin/SPLOOSH /bin/sh -c 'echo $0')
-0:`exec' with -a option, no space
->/bin/SPLOOSH
-
- (export FOO=bar; exec -c /bin/sh -c 'echo x${FOO}x')
-0:`exec' with -c option
->xx
-
- cat() { echo Function cat executed; }
- command cat && unfunction cat
-0:`command' precommand modifier
-<External command cat executed
->External command cat executed
-
- command -pv cat
- command -pv echo
- command -p -V cat
- command -p -V -- echo
-0:command -p in combination
-*>*/cat
->echo
->cat is /*/cat
->echo is a shell builtin
-
- cd() { echo Not cd at all; }
- builtin cd . && unfunction cd
-0:`builtin' precommand modifier
-
-#
-# Tests for `Complex Commands'
-#
-
- if true; then
- print true-1
- elif true; then
- print true-2
- else
- print false
- fi
-0:`if ...' (i)
->true-1
-
- if false; then
- print true-1
- elif true; then
- print true-2
- else
- print false
- fi
-0:`if ...' (ii)
->true-2
-
- if false; then
- print true-1
- elif false; then
- print true-2
- else
- print false
- fi
-0:`if ...' (iii)
->false
-
- if true;
- :
- fi
-1d:`if ...' (iv)
-?(eval):3: parse error near `fi'
-
- for name in word to term; do
- print $name
- done
-0:`for' loop
->word
->to
->term
-
- for name
- in word to term; do
- print $name
- done
-0:`for' loop with newline before in keyword
->word
->to
->term
-
- for (( name = 0; name < 3; name++ )); do
- print $name
- done
-0:arithmetic `for' loop
->0
->1
->2
-
- for (( $(true); ; )); do break; done
- for (( ; $(true); )); do break; done
- for (( ; ; $(true) )); do break; done
- for (( ; $((1)); )); do break; done
-0:regression test, nested cmdsubst in arithmetic `for' loop
-
- for keyvar valvar in key1 val1 key2 val2; do
- print key=$keyvar val=$valvar
- done
-0:enhanced `for' syntax with two loop variables
->key=key1 val=val1
->key=key2 val=val2
-
- for keyvar valvar stuffvar in keyA valA stuffA keyB valB stuffB; do
- print key=$keyvar val=$valvar stuff=$stuffvar
- done
-0:enhanced `for' syntax with three loop variables
->key=keyA val=valA stuff=stuffA
->key=keyB val=valB stuff=stuffB
-
- for in in in in in stop; do
- print in=$in
- done
-0:compatibility of enhanced `for' syntax with standard syntax
->in=in
->in=in
->in=in
->in=stop
-
- name=0
- while (( name < 3 )); do
- print $name
- (( name++ ))
- done
-0:`while' loop
->0
->1
->2
-
- name=0
- until (( name == 3 )); do
- print $name
- (( name++ ))
- done
-0:`until' loop
->0
->1
->2
-
- repeat 3 do
- echo over and over
- done
-0:`repeat' loop
->over and over
->over and over
->over and over
-
- word=Trinity
- case $word in
- Michaelmas) print 0
- ;;
- Hilary) print 1
- ;;
- Trinity) print 2
- ;;
- *) print 3
- ;;
- esac
-0:`case', old syntax
->2
-
- word=Trinity
- case $word in
- (Michaelmas) print 0
- ;;
- (Hilary) print 1
- ;;
- (Trinity) print 2
- ;;
- (*) print 3
- ;;
- esac
-0:`case', new syntax
->2
-
- word=Hilary
- case $word in
- (Michaelmas) print 0
- ;;
- (Hilary) print 1
- ;&
- (Trinity) print 2
- ;&
- (*) print 3
- ;;
- esac
-0:`case', new syntax, cascaded
->1
->2
->3
-
- case whatever in
- (*) print yeah, right ;&
- esac
- print but well
-0:'case', redundant final ";&"
->yeah, right
->but well
-
-## Select now reads from stdin if the shell is not interactive.
-## Its own output goes to stderr.
- (COLUMNS=80 LINES=3
- PS3="input> "
- select name in one two three; do
- print $name
- done)
-0:`select' loop
-<2
-?1) one 2) two 3) three
-?input> input>
->two
-
- function name1 name2 () { print This is $0; }
- name2
- name1 name2() { print This is still $0; }
- name2
-0:`function' keyword
->This is name2
->This is still name2
-
- (time cat) >&/dev/null
-0:`time' keyword (status only)
-
- if [[ -f foo && -d . && -n $ZTST_testdir ]]; then
- true
- else
- false
- fi
-0:basic [[ ... ]] test
-
-#
-# Current shell execution with try/always form.
-# We put those with errors in subshells so that any unhandled error doesn't
-# propagate.
-#
-
- {
- print The try block.
- } always {
- print The always block.
- }
- print After the always block.
-0:Basic `always' syntax
->The try block.
->The always block.
->After the always block.
-
- ({
- print Position one.
- print ${*this is an error*}
- print Position two.
- } always {
- if (( TRY_BLOCK_ERROR )); then
- print An error occurred.
- else
- print No error occurred.
- fi
- }
- print Position three)
-1:Always block with error not reset
->Position one.
->An error occurred.
-?(eval):3: bad substitution
-
- ({
- print Stelle eins.
- print ${*voici une erreur}
- print Posizione due.
- } always {
- if (( TRY_BLOCK_ERROR )); then
- print Erratum factum est. Retro ponetur.
- (( TRY_BLOCK_ERROR = 0 ))
- else
- print unray touay foay anguageslay
- fi
- }
- print Status after always block is $?.)
-0:Always block with error reset
->Stelle eins.
->Erratum factum est. Retro ponetur.
->Status after always block is 1.
-?(eval):3: bad substitution
-
- fn() { { return } always { echo always 1 }; echo not executed }
- fn
- fn() { { echo try 2 } always { return }; echo not executed }
- fn
-0:Always block interaction with return
->always 1
->try 2
-
-# Outputting of structures from the wordcode is distinctly non-trivial,
-# we probably ought to have more like the following...
- fn1() { { echo foo; } }
- fn2() { { echo foo; } always { echo bar; } }
- fn3() { ( echo foo; ) }
- functions fn1 fn2 fn3
-0:Output of syntactic structures with and without always blocks
->fn1 () {
-> {
-> echo foo
-> }
->}
->fn2 () {
-> {
-> echo foo
-> } always {
-> echo bar
-> }
->}
->fn3 () {
-> (
-> echo foo
-> )
->}
-
-
-#
-# Tests for `Alternate Forms For Complex Commands'
-#
-
- if (true) { print true-1 } elif (true) { print true-2 } else { print false }
- if (false) { print true-1 } elif (true) { print true-2 } else { print false }
- if (false) { print true-1 } elif (false) { print true-2 } else { print false }
-0:Alternate `if' with braces
->true-1
->true-2
->false
-
- if { true } print true
- if { false } print false
-0:Short form of `if'
->true
-
- eval "if"
-1:Short form of `if' can't be too short
-?(eval):1: parse error near `if'
-
- for name ( word1 word2 word3 ) print $name
-0:Form of `for' with parentheses.
->word1
->word2
->word3
-
- for name in alpha beta gamma; print $name
-0:Short form of `for'
->alpha
->beta
->gamma
-
- for (( val = 2; val < 10; val *= val )) print $val
-0:Short arithmetic `for'
->2
->4
-
- foreach name ( verbiage words periphrasis )
- print $name
- end
-0:Csh-like `for'
->verbiage
->words
->periphrasis
-
-# see comment with braces used in if loops
- val=0;
- while (( val < 2 )) { print $((val++)); }
-0:Alternative `while'
->0
->1
-
- val=2;
- until (( val == 0 )) { print $((val--)); }
-0:Alternative `until'
->2
->1
-
- repeat 3 print Hip hip hooray
-0:Short `repeat'
->Hip hip hooray
->Hip hip hooray
->Hip hip hooray
-
- case bravo {
- (alpha) print schmalpha
- ;;
- (bravo) print schmavo
- ;;
- (charlie) print schmarlie
- ;;
- }
-0:`case' with braces
->schmavo
-
- for word in artichoke bladderwort chrysanthemum Zanzibar
- case $word in
- (*der*) print $word contains the forbidden incantation der
- ;;
- (a*) print $word begins with a
- ;&
- ([[:upper:]]*) print $word either begins with a or an upper case letter
- ;|
- ([[:lower:]]*) print $word begins with a lower case letter
- ;|
- (*e*) print $word contains an e
- ;;
- esac
-0:`case' with mixed ;& and ;|
->artichoke begins with a
->artichoke either begins with a or an upper case letter
->artichoke begins with a lower case letter
->artichoke contains an e
->bladderwort contains the forbidden incantation der
->chrysanthemum begins with a lower case letter
->chrysanthemum contains an e
->Zanzibar either begins with a or an upper case letter
-
- print -u $ZTST_fd 'This test hangs the shell when it fails...'
- name=0
-# The number 4375 here is chosen to produce more than 16384 bytes of output
- while (( name < 4375 )); do
- print -n $name
- (( name++ ))
- done < /dev/null | { read name; print done }
-0:Bug regression: `while' loop with redirection and pipeline
->done
-
-# This used to be buggy and print X at the end of each iteration.
- for f in 1 2 3 4; do
- print $f || break
- done && print X
-0:Handling of ||'s and &&'s with a for loop in between
->1
->2
->3
->4
->X
-
-# Same bug for &&, used to print `no' at the end of each iteration
- for f in 1 2 3 4; do
- false && print strange
- done || print no
-0:Handling of &&'s and ||'s with a for loop in between
->no
-
- $ZTST_testdir/../Src/zsh -f unmatched_quote.txt
-1:Parse error with file causes non-zero exit status
-?unmatched_quote.txt:2: unmatched '
-
- $ZTST_testdir/../Src/zsh -f <unmatched_quote.txt
-1:Parse error on standard input causes non-zero exit status
-?zsh: unmatched '
-
- $ZTST_testdir/../Src/zsh -f -c "'"
-1:Parse error on inline command causes non-zero exit status
-?zsh:1: unmatched '
-
- $ZTST_testdir/../Src/zsh -f NonExistentScript
-127q:Non-existent script causes exit status 127
-?$ZTST_testdir/../Src/zsh: can't open input file: NonExistentScript
-
- (setopt nonomatch
- # use this to get stuff at start of line
- contents=$'# comment \'\necho value #with " stuff\n# comment\n#comment
- echo not#comment\n'
- eval 'VAR=$('"$contents"')'
- print -l $VAR)
-0:comments within $(...)
->value
->not#comment
-
- . ./nonexistent
-127: Attempt to "." non-existent file.
-?(eval):.:1: no such file or directory: ./nonexistent
-
- echo '[[' >bad_syntax
- . ./bad_syntax
-126: Attempt to "." file with bad syntax.
-?./bad_syntax:2: parse error near `\n'
-# `
-
- echo 'false' >dot_false
- . ./dot_false
- print $?
- echo 'true' >dot_true
- . ./dot_true
- print $?
-0:Last status of successfully executed "." file is retained
->1
->0
-
- echo 'echo $?' >dot_status
- false
- . ./dot_status
-0:"." file sees status from previous command
->1
-
- mkdir test_path_script
- print "#!/bin/sh\necho Found the script." >test_path_script/myscript
- chmod u+x test_path_script/myscript
- path=($PWD/test_path_script $path)
- export PATH
- $ZTST_testdir/../Src/zsh -f -o pathscript myscript
-0:PATHSCRIPT option
->Found the script.
-
- $ZTST_testdir/../Src/zsh -f myscript
-127q:PATHSCRIPT option not used.
-?$ZTST_testdir/../Src/zsh: can't open input file: myscript
-# '
-
- $ZTST_testdir/../Src/zsh -fc 'echo $0; echo $1' myargzero myargone
-0:$0 is traditionally if bizarrely set to the first argument with -c
->myargzero
->myargone
-
- (setopt shglob
- eval '
- if ! (echo success1); then echo failure1; fi
- if !(echo success2); then echo failure2; fi
- print -l one two | while(read foo)do(print read it)done
- ')
-0:Parentheses in shglob
->success1
->success2
->read it
->read it
-
- (
- mywrap() { echo BEGIN; true; echo END }
- mytest() { { exit 3 } always { mywrap }; print Exited before this }
- mytest
- print Exited before this, too
- )
-3:Exit and always block with functions: simple
->BEGIN
->END
-
- (
- mytrue() { echo mytrue; return 0 }
- mywrap() { echo BEGIN; mytrue; echo END }
- mytest() { { exit 4 } always { mywrap }; print Exited before this }
- mytest
- print Exited before this, too
- )
-4:Exit and always block with functions: nested
->BEGIN
->mytrue
->END
-
- (emulate sh -c '
- fn() {
- case $1 in
- ( one | two | three )
- print Matched $1
- ;;
- ( fo* | fi* | si* )
- print Pattern matched $1
- ;;
- ( []x | a[b]* )
- print Character class matched $1
- ;;
- esac
- }
- '
- which fn
- fn one
- fn two
- fn three
- fn four
- fn five
- fn six
- fn abecedinarian
- fn xylophone)
-0: case word handling in sh emulation (SH_GLOB parentheses)
->fn () {
-> case $1 in
-> (one | two | three) print Matched $1 ;;
-> (fo* | fi* | si*) print Pattern matched $1 ;;
-> ([]x | a[b]*) print Character class matched $1 ;;
-> esac
->}
->Matched one
->Matched two
->Matched three
->Pattern matched four
->Pattern matched five
->Pattern matched six
->Character class matched abecedinarian
-
- case grumph in
- ( no | (grumph) )
- print 1 OK
- ;;
- esac
- case snruf in
- ( fleer | (|snr(|[au]f)) )
- print 2 OK
- ;;
- esac
-0: case patterns within words
->1 OK
->2 OK
-
- case horrible in
- ([a-m])(|[n-z])rr(|ib(um|le|ah)))
- print It worked
- ;;
- esac
- case "a string with separate words" in
- (*with separate*))
- print That worked, too
- ;;
- esac
-0:Unbalanced parentheses and spaces with zsh pattern
->It worked
->That worked, too
-
- case horrible in
- (([a-m])(|[n-z])rr(|ib(um|le|ah)))
- print It worked
- ;;
- esac
- case "a string with separate words" in
- (*with separate*)
- print That worked, too
- ;;
- esac
-0:Balanced parentheses and spaces with zsh pattern
->It worked
->That worked, too
-
- fn() {
- typeset ac_file="the else branch"
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- *.* ) break;;
- *)
- ;;
- esac
- print Stuff here
- }
- which fn
- fn
-0:Long case with parsed alternatives turned back into text
->fn () {
-> typeset ac_file="the else branch"
-> case $ac_file in
-> (*.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj) ;;
-> (*.*) break ;;
-> (*) ;;
-> esac
-> print Stuff here
->}
->Stuff here
-
- (exit 37)
- case $? in
- (37) echo $?
- ;;
- esac
-0:case retains exit status for execution of cases
->37
-
- false
- case stuff in
- (nomatch) foo
- ;;
- esac
- echo $?
-0:case sets exit status to zero if no patterns are matched
->0
-
- case match in
- (match) true; false; (exit 37)
- ;;
- esac
- echo $?
-0:case keeps exit status of last command executed in compound-list
->37
-
- x=1
- x=2 | echo $x
- echo $x
-0:Assignment-only current shell commands in LHS of pipelin
->1
->1