diff options
Diffstat (limited to 'tests/variables.at')
-rw-r--r-- | tests/variables.at | 1055 |
1 files changed, 1055 insertions, 0 deletions
diff --git a/tests/variables.at b/tests/variables.at new file mode 100644 index 000000000000..424e4da3396b --- /dev/null +++ b/tests/variables.at @@ -0,0 +1,1055 @@ +# Special shell variables + +# The space after $ is to avoid expanding the variables in testsuite output, +# to work-around a bug in autotest + +# Not testing any functionality +m4_define([VAR_UNSET], +[AT_SETUP([$ $1]) +AT_CHECK([tcsh -f -c 'echo $?$1'], , +[0 +]) +AT_CLEANUP +]) +m4_define([ENV_SET], +[AT_SETUP([$ $1]) +AT_CHECK([tcsh -f -c 'printenv $1'], 0, [ignore]) +AT_CLEANUP +]) +m4_define([ENV_UNSET], +[AT_SETUP([$ $1]) +AT_CHECK([tcsh -f -c 'printenv $1'], 1, +[0 +]) +AT_CLEANUP +]) + + +AT_SETUP([$ addsuffix]) + +AT_CHECK([tcsh -f -c 'echo $?addsuffix'], , +[1 +]) +# Nothing more + +AT_CLEANUP + + +VAR_UNSET([afsuser]) +VAR_UNSET([ampm]) + + +AT_SETUP([$ argv]) + +AT_CHECK([tcsh -f -c 'echo $argv; echo $2' foo bar baz], , +[foo bar baz +bar +]) + +AT_CLEANUP + + +VAR_UNSET([autocorrect]) +VAR_UNSET([autoexpand]) +VAR_UNSET([autolist]) +TCSH_UNTESTED([$ autologout]) + + +AT_SETUP([$ backslash_quote]) + +AT_DATA([backslash.csh], +[[echo $?backslash_quote +set echo_style=none +echo 'foo\\bar' +echo "foo\\bar" +echo 'foo\bar' +echo "foo\bar" +set backslash_quote +echo 'foo\\bar' +echo "foo\\bar" +echo 'foo\'bar' +echo 'foo\"bar' +echo "foo\"bar" +echo "foo\'bar" +echo 'foo\bar' +echo "foo\bar" +]]) +AT_CHECK([tcsh -f backslash.csh], , +[0 +foo\\bar +foo\\bar +foo\bar +foo\bar +foo\bar +foo\bar +foo'bar +foo"bar +foo"bar +foo'bar +foo\bar +foo\bar +]) + +AT_CLEANUP + + +VAR_UNSET([catalog]) + + +AT_SETUP([$ cdpath]) + +AT_DATA([cdpath.csh], +[[echo $?cdpath +set cdpath=($cwd /) +set home=$cwd +mkdir tcsh_test_dir +cd dev +cd tcsh_test_dir +]]) +AT_CHECK([tcsh -f cdpath.csh], , +[0 +/dev @&t@ +~/tcsh_test_dir @&t@ +]) + +AT_CLEANUP + + +VAR_UNSET([color]) +VAR_UNSET([colorcat]) + + +AT_SETUP([$ command]) + +AT_CHECK([tcsh -f -c 'echo $command'], , +[echo $command +]) + +AT_DATA([command.csh], +[[echo $?command +]]) +AT_CHECK([tcsh -f command.csh], , +[0 +]) + +AT_CLEANUP + + +VAR_UNSET([complete]) +VAR_UNSET([continue]) +VAR_UNSET([continue_args]) +VAR_UNSET([correct]) + + +AT_SETUP([$ csubstnonl]) + +touch test_file + +AT_DATA([csubstnonl.csh], +[[echo $?csubstnonl +echo `echo fail \ +| sed 's/fail/OK/'` +sh -c 'echo 1 >&2' +(echo `echo fail | \\ +sed 's/fail/OK/'`) +sh -c 'echo 2 >&2' +echo `echo a\ +b` +unset csubstnonl +sh -c 'echo 3 >&2' +(echo `echo fail \ +| sed 's/fail/OK/'`) +sh -c 'echo 4 >&2' +echo `echo fail | \\ +sed 's/fail/OK/'` +echo `echo \\ +?est_file` +echo `cat << END\ +OK\ +END` +]]) +AT_CHECK([tcsh -f csubstnonl.csh], , +[1 +OK + +a b +fail +OK +test_file +OK +], +[1 + sed: Command not found. +2 +3 +Invalid null command. +4 +]) + +AT_CLEANUP + + +AT_SETUP([$ cwd]) + +AT_DATA([cwd.csh], +[[echo $?cwd +printenv PWD +cd / +echo $cwd +pushd /dev +echo $cwd +popd +echo $cwd +printenv PWD +setenv PWD foo +echo $cwd +set cwd=bar +printenv PWD +]]) +AT_CHECK([tcsh -f cwd.csh | sed "s,$PWD,CWD,"], , +[1 +CWD +/ +/dev / @&t@ +/dev +/ @&t@ +/ +/ +/ +foo +]) + +AT_CLEANUP + + +VAR_UNSET([dextract]) # Behavior tested with pushd +VAR_UNSET([dirsfile]) + + +AT_SETUP([$ dirstack]) + +AT_DATA([dirstack.csh], +[[echo $dirstack +set home=$cwd +pushd / +echo $dirstack +set dirstack=(/ /dev $home) +# The first popd does nothing, looks like a bug +popd +popd +echo $dirstack +]]) +AT_CHECK([tcsh -f dirstack.csh | sed "s,$PWD,CWD,g"], , +[CWD +/ ~ @&t@ +/ CWD +/ /dev ~ @&t@ +/dev ~ @&t@ +/dev CWD +]) + +AT_CLEANUP + + +TCSH_UNTESTED([$ dspmbyte]) +VAR_UNSET([dunique]) # Behavior tested with pushd + + +AT_SETUP([$ echo]) + +touch some_file; + +AT_CHECK([tcsh -f -c 'echo $?echo'], , +[0 +]) + +AT_CHECK([tcsh -f -x -c 'echo $?echo'], , +[1 +], +[echo 1 +]) + +AT_DATA([echo.csh], +[[ls some_* +set echo +ls some_* $echo +echo some_* $echo +]]) +AT_CHECK([tcsh -f echo.csh], , +[some_file +some_file +some_file +], +[ls some_file +echo some_* +]) + +AT_CLEANUP + + +AT_SETUP([$ echo_style]) + +AT_DATA([echo_style.csh], +[[echo $?echo_style +set echo_style=bsd +echo -n foo +echo 'b\tr' +set echo_style=sysv +echo -n foo +echo 'b\tr' +set echo_style=both +echo -n foo +echo 'b\tr' +set echo_style=none +echo -n foo +echo 'b\tr' +]]) +AT_CHECK([tcsh -f echo_style.csh], , +[1 +foob\tr +-n foo +b r +foob r +-n foo +b\tr +]) + +AT_CLEANUP + + +AT_SETUP([$ edit]) + +AT_CHECK([TERM=something tcsh -f -c 'echo $?edit'], , +[1 +]) + +AT_CHECK([TERM=dumb tcsh -f -c 'echo $?edit'], , +[0 +]) + +AT_CLEANUP + + +AT_SETUP([$ ellipsis]) + +AT_DATA([ellipsis0.csh], +[[echo $?ellipsis +set home=$cwd +mkdir -p a/b +cd a/b +set prompt='%c01 ' +]]) +AT_CHECK([tcsh -f -i -q < ellipsis0.csh], , +[> 0 +~/<1>b exit +]) + +AT_DATA([ellipsis0.csh], +[[set ellipsis +set home=$cwd +mkdir -p a/b +cd a/b +set prompt='%c01 ' +]]) +AT_CHECK([tcsh -f -i -q < ellipsis0.csh], , +[> ~...b exit +]) + +AT_CLEANUP + + +VAR_UNSET([fignore]) +VAR_UNSET([filec]) + + +AT_SETUP([$ gid]) + +AT_CHECK([(tcsh -f -c 'echo $gid'; id -gr) | uniq | wc -l | tr -d ' \t'], , +[1 +]) + +AT_CLEANUP + + +AT_SETUP([$ group]) + +AT_DATA([group.csh], +[[echo $?group +set group=foo +printenv GROUP +setenv GROUP bar +echo $group +]]) +AT_CHECK([tcsh -f group.csh], , +[1 +foo +bar +]) + +AT_CLEANUP + + +AT_SETUP([$ histchars]) + +AT_DATA([histchars.csh], +[[echo $?histchars +set histchars='/+' +echo OK +/3 ++K+k +]]) +AT_CHECK([tcsh -f -q -i < histchars.csh], , +[> 0 +OK +OK +Ok +> exit +], +[echo OK +echo Ok +]) + +AT_CLEANUP + + +AT_SETUP([$ histdup]) + +AT_DATA([histdup.csh], +[[echo $?histdup +history -c +: 1 +: 2 +: 1 +history +set histdup=all +history -c +: 1 +: 2 +: 1 +history +set histdup=prev +history -c +: 1 +: 2 +: 1 +: 3 +: 3 +history +set histdup=erase +history -c +: 1 +: 2 +: 1 +history +]]) +AT_CHECK([[tcsh -f -q -i < histdup.csh] dnl + [| sed 's/ [^ ]* / TIME /']], , +[> 0 + 3 TIME : 1 + 4 TIME : 2 + 5 TIME : 1 + 6 TIME history + 9 TIME : 1 + 10 TIME : 2 + 11 TIME history + 14 TIME : 1 + 15 TIME : 2 + 16 TIME : 1 + 17 TIME : 3 + 18 TIME history + 22 TIME : 2 + 23 TIME : 1 + 24 TIME history +> exit +]) + +AT_CLEANUP + + +VAR_UNSET([histfile]) + + +AT_SETUP([$ histlit]) + +AT_DATA([histlit.csh], +[[echo $?histlit +echo OK +!! +history +history -S hist1 +set histlit +history +history -S hist2 +]]) +AT_CHECK([[tcsh -f -q -i < histlit.csh] dnl + [| sed 's/ [^ ]* / TIME /']], , +[> 0 +OK +OK + 1 TIME echo $?histlit + 2 TIME echo OK + 3 TIME echo OK + 4 TIME history + 1 TIME echo $?histlit + 2 TIME echo OK + 3 TIME !! + 4 TIME history + 5 TIME history -S hist1 + 6 TIME set histlit + 7 TIME history +> exit +], +[echo OK +]) +AT_CHECK([[sed 's/^#+[0123456789]*$/#+STAMP/' < hist1]], , +[#+STAMP +echo $?histlit +#+STAMP +echo OK +#+STAMP +echo OK +#+STAMP +history +#+STAMP +history -S hist1 +]) +AT_CHECK([[sed 's/^#+[0123456789]*$/#+STAMP/' < hist2]], , +[#+STAMP +echo $?histlit +#+STAMP +echo OK +#+STAMP +!! +#+STAMP +history +#+STAMP +history -S hist1 +#+STAMP +set histlit +#+STAMP +history +#+STAMP +history -S hist2 +]) + +AT_CLEANUP + + +AT_SETUP([$ history]) + +AT_DATA([history.csh], +[[echo $#history $history +set home=$cwd +set var=value +set history=(1 '%/,%~,%h,%\!,\!,%%,%j,%$var,%#,%R\n') +: OK +history +]]) +AT_CHECK([tcsh -f -i -q < history.csh | sed "s,$PWD,CWD,"], , +[> 1 100 +CWD,~, 6, 6, 6,%,0,value,>,history +> exit +]) + +AT_CLEANUP + + +AT_SETUP([$ home]) + +AT_DATA([home.csh], +[[echo $?home +(echo $home; echo ~) | uniq | wc -l | tr -d ' \t' +set home=/foo +printenv HOME +setenv HOME /bar +echo $home +]]) +AT_CHECK([tcsh -f home.csh], , +[1 +1 +/foo +/bar +]) + +AT_CHECK([(unset HOME; tcsh -f -c 'echo $?home; printenv HOME')], 1, +[0 +]) + +AT_CLEANUP + + +VAR_UNSET([ignoreeof]) + + +AT_SETUP([$ implicitcd]) + +AT_DATA([implicitcd.csh], +[[echo $?implicitcd +mkdir subdir +set home=$cwd +sh -c 'echo 1 >&2' +(subdir) +sh -c 'echo 2 >&2' +(~/subdir) +sh -c 'echo 3 >&2' +set implicitcd +subdir +/bin/pwd +.. +~/subdir +/bin/pwd +cd +set implicitcd=verbose +subdir +.. +~/subdir +]]) +(echo 1; echo 'subdir: Command not found.'; + echo 2; echo "$PWD/subdir: Permission denied."; echo 3) > experr +AT_CHECK([tcsh -f -i -q < implicitcd.csh | sed "s,`/bin/pwd`,CWD,"], , +[> 0 +CWD/subdir +CWD/subdir +cd subdir +cd .. +cd ~/subdir +> exit +], [experr]) + +AT_CLEANUP + + +VAR_UNSET([inputmode]) +VAR_UNSET([killdup]) + + +AT_SETUP([$ killring]) + +AT_CHECK([tcsh -f -c 'echo $killring'], , +[30 +]) +# Nothing more + +AT_CLEANUP + + +AT_SETUP([$ listflags]) + +# First word checked with ls-F +AT_DATA([listflags.csh], +[[echo $?listflags +set listflags=(-xA $cwd/args.sh) +ls-F -something . +]]) +AT_DATA([args.sh], +[[echo "$@" +]]) +chmod a+x args.sh +AT_CHECK([tcsh -f listflags.csh], , +[0 +-xFA -something . +]) + +AT_CLEANUP + + +VAR_UNSET([listjobs]) +VAR_UNSET([listlinks]) # Functionality tested with ls-F +VAR_UNSET([listmax]) +VAR_UNSET([listmaxrows]) +VAR_UNSET([loginsh]) # Can't test the other case +VAR_UNSET([logout]) + + +AT_SETUP([$ mail]) + +AT_DATA([mail.csh], +[[echo $?mail +mkdir maildir +touch spool +set mail=(0 spool maildir) +echo > maildir/1 +echo > maildir/2 +echo >> spool +echo >> spool +]]) +AT_CHECK([tcsh -f mail.csh], , +[0 +]) + +AT_CLEANUP + + +VAR_UNSET([matchbeep]) +VAR_UNSET([nobeep]) +VAR_UNSET([noclobber]) # Functionality tested with "Command execution" +VAR_UNSET([noding]) +# Functionality tested with "Filename substitution" and +# "Directory stack substitution" +VAR_UNSET([noglob]) +VAR_UNSET([nostat]) +VAR_UNSET([notify]) +TCSH_UNTESTED([$ oid]) + + +AT_SETUP([$ owd]) + +AT_DATA([owd.csh], +[[echo $owd +cd / +echo $owd +pushd /bin +echo $owd +popd +echo $owd +]]) +AT_CHECK([tcsh -f owd.csh | sed "s,$PWD,CWD,"], , +[ +CWD +/bin / @&t@ +/ +/ @&t@ +/bin +]) + +AT_CLEANUP + + +AT_SETUP([$ path]) + +mkdir subdir +AT_DATA([script.sh], +[[echo home +]]) +AT_DATA([subdir/script.sh], +[[echo subdir +]]) +chmod a+x script.sh subdir/script.sh +AT_DATA([path.csh], +[[echo $?path +set path=(. subdir) +script.sh +set path=(subdir .) +script.sh +printenv PATH +setenv PATH :foo::bar: +echo $path +]]) +AT_CHECK([tcsh -f path.csh], , +[1 +home +subdir +subdir:. +. foo . bar . +]) + +AT_CLEANUP + + +AT_SETUP([$ printexitvalue]) + +AT_DATA([printexitvalue.csh], +[[echo $?printexitvalue +set printexitvalue +false +(exit 3 >/dev/null) +: +]]) +AT_CHECK([tcsh -f printexitvalue.csh], , +[0 +Exit 1 +Exit 3 +]) + +AT_CLEANUP + + +AT_SETUP([$ prompt]) + +AT_DATA([prompt.csh], +[[echo "$prompt" +set home=$cwd +mkdir -p a/b +cd a/b +set var=value +set prompt='%/,%~,%c,%.,%c2,%.2,%c01,%.01,%C,%h,%\!,\!,%%,%j,%$var,%#,%? ' +(exit 50) +]]) +AT_CHECK([tcsh -f -i -q < prompt.csh | sed "s,$PWD,CWD,"], , +[> %# @&t@ +CWD/a/b,~/a/b,b,b,~/a/b,~/a/b,~/<1>b,~/<1>b,b,8,8,8,%,0,value,>,50 exit +]) + +AT_CLEANUP + + +AT_SETUP([$ prompt2]) + +AT_CHECK([echo 'echo "$prompt2"' | tcsh -f], , +[%R? @&t@ +]) + +AT_CLEANUP + + +AT_SETUP([$ prompt3]) + +AT_CHECK([echo 'echo "$prompt3"' | tcsh -f], , +[CORRECT>%R (y|n|e|a)? @&t@ +]) + +AT_CLEANUP + +AT_SETUP([$ promptchars]) + +AT_DATA([promptchars.csh], +[[echo $?promptchars +set promptchars=_x +]]) +AT_CHECK([tcsh -f -i -q < promptchars.csh], , +[> 0 +_ exit +]) + +AT_CLEANUP + + +VAR_UNSET([pushdtohome]) # Functionality tested with pushd +VAR_UNSET([pushdsilent]) # Functionality tested with pushd +VAR_UNSET([recexact]) +VAR_UNSET([recognize_only_executablers]) +VAR_UNSET([rmstar]) + + +AT_SETUP([$ rprompt]) + +AT_DATA([rprompt.csh], +[[echo $?rprompt +set home=$cwd +mkdir -p a/b +cd a/b +set var=value +set rprompt='%/,%~,%c,%.,%c2,%.2,%c01,%.01,%C,%h,%\!,\!,%%,%j,%$var,%#,%?' +(exit 50) +]]) +AT_CHECK([tcsh -f -i -q < rprompt.csh | sed "s,$PWD,CWD,"], , +[> 0 +> CWD/a/b,~/a/b,b,b,~/a/b,~/a/b,~/<1>b,~/<1>b,b,8,8,8,%,0,value,>,50 exit +]) + +AT_CLEANUP + + +VAR_UNSET([savedirs]) +VAR_UNSET([savehist]) +VAR_UNSET([sched]) + + +AT_SETUP([$ shell]) + +AT_CHECK([tcsh -f -c 'echo $?shell'], , +[1 +]) + +AT_CHECK([SHELL=foo/tcsh tcsh -f -c 'echo $shell'], , +[foo/tcsh +]) + +AT_CLEANUP + + +AT_SETUP([$ shlvl]) + +AT_DATA([shlvl.csh], +[[echo $shlvl +set shlvl=8 +printenv SHLVL +setenv SHLVL 2 +echo $shlvl +tcsh -f -c 'echo $shlvl' +]]) +AT_CHECK([SHLVL=5 tcsh -f shlvl.csh], , +[6 +8 +2 +3 +]) + +AT_CLEANUP + + +AT_SETUP([$ status]) + +AT_DATA([status.csh], +[[echo $status +sh -c 'kill -ABRT $$' +if ( $status > 128 ) echo OK +true +echo $status +]]) +AT_CHECK([tcsh -f status.csh | sed 's/Abort (core dumped)/Abort/'], , +[0 +Abort +OK +0 +]) + +AT_CLEANUP + + +AT_SETUP([$ symlinks]) + +AT_DATA([symlinks.csh], +[[echo $?symlinks +set home=$cwd +mkdir -p a/b +ln -s a/b link +set symlinks=chase +cd link +echo $cwd +cd +set symlinks=ignore +cd link +echo $cwd +cd .. +echo $cwd +set symlinks=expand +cd a +(echo ../a; echo $cwd) | uniq | wc -l | tr -d ' \t' +]]) +AT_CHECK([tcsh -f symlinks.csh | sed "s,`tcsh -f -c echo\\ \\$PWD`,CWD,"], , +[0 +CWD/a/b +CWD/link +CWD +1 +]) + +AT_CLEANUP + + +AT_SETUP([$ tcsh]) + +AT_CHECK([tcsh -f -c 'echo $?tcsh'], , +[1 +]) + +AT_CLEANUP + + +AT_SETUP([$ term]) + +AT_DATA([term.csh], +[[echo $term +set term=foo +printenv TERM +setenv TERM bar +echo $term +]]) +AT_CHECK([TERM=something tcsh -f term.csh], , +[something +foo +bar +]) + +AT_CHECK([(unset TERM; tcsh -f -c 'echo $?term; printenv TERM')], 1, +[0 +]) + +AT_CLEANUP + + +VAR_UNSET([time]) +VAR_UNSET([tperiod]) + + +AT_SETUP([$ tty]) + +AT_CHECK([tcsh -f -c 'echo ">$tty<"' < /dev/null], , +[>< +]) + +AT_CLEANUP + + +AT_SETUP([$ uid]) + +AT_CHECK([(tcsh -f -c 'echo $uid'; id -ru) | uniq | wc -l | tr -d ' \t'], , +[1 +]) + +AT_CLEANUP + + +AT_SETUP([$ user]) + +AT_DATA([user.csh], +[[echo $?user +set user=foo +printenv USER +setenv USER bar +echo $user +]]) +AT_CHECK([tcsh -f user.csh], , +[1 +foo +bar +]) + +AT_CHECK([(unset USER; LOGNAME=foo tcsh -f -c 'echo $user; printenv USER')], , +[foo +foo +]) + +AT_CHECK([(unset LOGNAME; USER=foo tcsh -f -c 'echo $user; printenv LOGNAME')], + , +[foo +foo +]) + +AT_CLEANUP + + +AT_SETUP([$ verbose]) + +AT_CHECK([tcsh -f -v -c 'echo $verbose'], , [ +], +[echo $verbose +]) + +AT_DATA([verbose.csh], +[[echo $?verbose +set verbose +echo $verbose +!! +]]) +AT_CHECK([tcsh -f -i -q < verbose.csh], , +[> 0 + + +> exit +], +[echo $verbose +echo $verbose +]) + +AT_CLEANUP + + +AT_SETUP([$ version]) + +AT_CHECK([tcsh -f -c 'echo $?version'], , +[1 +]) + +AT_CLEANUP + + +VAR_UNSET([visiblebell]) +VAR_UNSET([watch]) +VAR_UNSET([who]) +VAR_UNSET([wordchars]) + + +# Nothing to test for environment variables, except for the synchronization +# above |