1 # Individual built-in commands
8 AT_CHECK([tcsh -f -c ': foo'])
16 AT_CHECK([tcsh -f -c 'set' > out1 && tcsh -f -c '@' > out2])
17 AT_CHECK([diff out1 out2 | tail -n +2], ,
23 AT_CHECK([tcsh -f -c '@ var=2 * 3; echo $var'], ,
27 AT_CHECK([[tcsh -f -c 'set var=(1 2); @ var[2] = 5; echo $var']], ,
31 AT_CHECK([tcsh -f -c 'set var=1; @ var++; echo $var; @ var--; echo $var'], ,
36 AT_CHECK([[tcsh -f -c \
37 'set var=(0 1); @ var[2]++; echo $var; @ var[2]--; echo $var']], ,
47 AT_CHECK([tcsh -f -c 'alias'])
49 AT_CHECK([tcsh -f -c 'alias foo echo bar; alias; alias foo'], ,
54 AT_CHECK([tcsh -f -c 'alias foo "echo bar"; alias; alias foo'], ,
59 AT_CHECK([tcsh -f -c 'alias alias alias'], 1, [],
60 [alias: Too dangerous to alias that.
63 AT_CHECK([tcsh -f -c 'alias unalias unalias'], 1, [],
64 [unalias: Too dangerous to alias that.
67 # Alias expansion happens only on the next input line
69 [[alias foo echo bar; foo
72 AT_CHECK([tcsh -f alias.csh 2>&1], ,
73 [foo: Command not found.
80 TCSH_UNTESTED([alloc])
82 TCSH_UNTESTED([bindkey])
83 #TCSH_UNTESTED([bs2cmd])
88 # Evaluating the rest of the line is incredibly ugly
100 foreach name (foo bar baz)
107 AT_CHECK([tcsh -f break.csh], ,
114 # Ugly tends to imply buggy
115 AT_DATA([break2.csh],
125 AT_CHECK([tcsh -f break2.csh], ,
133 TCSH_UNTESTED([builtins])
140 [[set current=`/bin/pwd`
145 /bin/pwd | sed "s,$current,,"
148 /bin/pwd | sed "s,$current,,"
151 /bin/pwd | sed "s,$current,,"
154 /bin/pwd | sed "s,$current,,"
157 set cdpath=($current)
160 /bin/pwd | sed "s,$current,,"
163 /bin/pwd | sed "s,$current,,"
165 cd -p | sed "s,$current,,"
167 cd -l | sed "s,$current,,"
172 sed 's/^cd /chdir /; s/^(cd /(chdir /' < cd.csh > chdir.csh
194 AT_CHECK([tcsh -f cd.csh], , [expout],
195 [[Usage: cd [-plvn][-|<dir>].
196 Usage: cd [-plvn][-|<dir>].
198 AT_CHECK([tcsh -f chdir.csh], , [expout],
199 [[Usage: chdir [-plvn][-|<dir>].
200 Usage: chdir [-plvn][-|<dir>].
208 # We check only that the strings are preserved
209 AT_DATA([complete.csh],
211 complete foo 'n/A/t:*/_' 'n/[^A]/t:*/_'
215 AT_CHECK([tcsh -f complete.csh], ,
216 [[foo 'n/A/t:*/_' 'n/[^A]/t:*/_'
217 'n/A/t:*/_' 'n/[^A]/t:*/_'
225 # See comments in tests of 'break'
226 AT_DATA([continue.csh],
237 foreach name (foo bar baz)
244 AT_CHECK([tcsh -f continue.csh], ,
251 AT_DATA([continue2.csh],
261 AT_CHECK([tcsh -f continue2.csh], ,
272 [[set current=`/bin/pwd`
283 dirs -l | sed "s,$current,CWD,g"
287 dirs -lv | sed "s,$current,CWD,g"
288 dirs -S $current/saved
291 dirs | sed "s,$current,CWD,g"
293 dirs -L $current/saved
294 dirs | sed "s,$current,CWD,g"
297 dirs | sed "s,$current,CWD,g"
302 AT_CHECK([tcsh -f dirs.csh], ,
326 [[Usage: dirs [-plvnSLc].
327 Usage: dirs [-plvnSLc].
329 AT_CHECK([echo x"`/bin/pwd`"x > /tmp/x && sed "s,`/bin/pwd`,CWD,g" < saved], ,
340 # Other functionality tested with $echo_style
341 AT_CHECK([tcsh -f -c 'echo OK'], ,
348 TCSH_UNTESTED([echotc])
353 AT_CHECK([tcsh -f -c 'set cmd="echo OK"; eval $cmd'], ,
362 AT_CHECK([tcsh -f -c 'exec echo OK'], ,
371 AT_CHECK([tcsh -f -c 'exit (50 * 4)'], 200)
373 AT_CHECK([tcsh -f -c '(exit 50); exit'], 0)
387 AT_CHECK([tcsh -f -c 'filetest -r file1 file2'], ,
391 AT_CHECK([tcsh -f -c 'filetest -w file1 file2'], ,
395 AT_CHECK([tcsh -f -c 'filetest -x file1 file2'], ,
399 AT_CHECK([tcsh -f -c 'filetest -X ls unknown_command'], ,
403 AT_CHECK([tcsh -f -c 'filetest -e file1 nonexistent'], ,
407 AT_CHECK([tcsh -f -c 'filetest -o file1'], ,
412 AT_CHECK([tcsh -f -c 'filetest -z file1 nonempty'], ,
416 AT_CHECK([tcsh -f -c 'filetest -s file1 nonempty'], ,
425 AT_CHECK([tcsh -f -c 'filetest -f file1 dir'], ,
429 AT_CHECK([tcsh -f -c 'filetest -d dir file1'], ,
433 AT_CHECK([tcsh -f -c 'filetest -l link file1'], ,
437 AT_CHECK([tcsh -f -c 'filetest -p pipe file1'], ,
441 AT_CHECK([tcsh -f -c 'filetest -u file1 file2'], ,
445 AT_CHECK([tcsh -f -c 'filetest -g file1 file2'], ,
449 AT_CHECK([tcsh -f -c 'filetest -k dir file2'], ,
453 AT_CHECK([tcsh -f -c 'filetest -t 0' < /dev/null], ,
457 AT_CHECK([tcsh -f -c 'filetest -f link'], ,
460 AT_CHECK([tcsh -f -c 'filetest -Lf link'], ,
464 AT_CHECK([tcsh -f -c 'filetest -rwx file1'], ,
468 # -A, -A:, -M, -M:, -C, -C:, -D, -I, -F, -U, -U:, -G, -G: not tested
470 AT_CHECK([tcsh -f -c 'filetest -L link'], ,
475 AT_CHECK([tcsh -f -c 'filetest -N file1 file2'], ,
479 # S_ISVTX is masked out
480 AT_CHECK([tcsh -f -c 'filetest -P file1'], ,
483 AT_CHECK([tcsh -f -c 'filetest -P: file1'], ,
486 AT_CHECK([tcsh -f -c 'filetest -P111 file1'], ,
489 AT_CHECK([tcsh -f -c 'filetest -P111: file1'], ,
493 AT_CHECK([tcsh -f -c 'filetest -Z file1 nonempty'], ,
497 AT_CHECK([tcsh -f -c 'filetest -N unknown'], ,
506 AT_DATA([foreach.csh],
507 [[foreach var (a b c)
511 AT_CHECK([tcsh -f foreach.csh], ,
520 TCSH_UNTESTED([getspath])
521 TCSH_UNTESTED([getxvers])
526 AT_CHECK([[tcsh -f -c 'glob a b c' | od -c] dnl
527 [| sed 's/[ ][ ]*/ /g; s/ $//']], ,
528 [[0000000 a \0 b \0 c
550 AT_CHECK([tcsh -f goto.csh], ,
560 TCSH_UNTESTED([hashstat])
565 AT_DATA([history.csh],
582 set savehist=(5 merge)
594 AT_CHECK([[tcsh -f -q -i < history.csh] dnl
595 [| sed 's/ [^ ]* / TIME /']], ,
626 13 TIME history -S hist1
627 14 TIME set savehist= ( 1 )
628 15 TIME history -S hist2
629 16 TIME history -S hist3
630 17 TIME set savehist= ( 5 merge )
631 18 TIME history -S hist3
632 19 TIME history -M hist2
636 22 TIME history -L hist2
637 23 TIME history -S hist2
645 AT_CHECK([[sed 's/^#+[0123456789]*$/#+STAMP/' < hist1]], ,
673 AT_CHECK([[sed 's/^#+[0123456789]*$/#+STAMP/' < hist2]], ,
677 AT_CHECK([[sed 's/^#+[0123456789]*$/#+STAMP/' < hist3]], ,
685 set savehist= ( 5 merge )
702 # onintr - is necessary to keep setintr == 0; should dohup () be checking
704 AT_CHECK([tcsh -f -c 'onintr -; nohup tcsh -f hup.csh' < /dev/null], ignore,
710 # The prefix form requires job control and is not tested
757 # skipping over an empty line
762 AT_CHECK([tcsh -f if.csh], ,
774 TCSH_UNTESTED([inlib])
775 TCSH_UNTESTED([jobs])
780 # Nested to ensure consistent output
785 AT_CHECK([tcsh -f -c 'tcsh -f -i -q < kill.csh'], ignore,
790 # kill %job, kill -l untested untested
795 TCSH_UNTESTED([limit])
801 [[set watch=(this_user_does_not_exist)
804 AT_CHECK([tcsh -f log.csh])
809 TCSH_UNTESTED([login])
814 AT_CHECK([tcsh -f -c 'logout'], 1, [],
824 touch file exec .hidden
829 ln -s nowhere lnowhere
832 AT_CHECK([tcsh -f -c 'ls-F' | grep -vF testsuite.log], ,
842 AT_CHECK([tcsh -f -c 'set listlinks; ls-F' | grep -vF testsuite.log], ,
852 AT_CHECK([tcsh -f -c 'set listflags=x; ls-F' | grep -vF testsuite.log], ,
862 AT_CHECK([tcsh -f -c 'set listflags=A; ls-F' | grep -vF testsuite.log], ,
873 AT_CHECK([tcsh -f -c 'set listflags=xa; ls-F' | grep -vF testsuite.log], ,
889 TCSH_UNTESTED([migrate])
890 TCSH_UNTESTED([newgrp])
895 # Nothing really tested
896 AT_CHECK([tcsh -f -c 'nice set var=1; echo $?var'], ,
913 # See commends in [hup]
914 AT_CHECK([tcsh -f -c 'onintr -; nohup tcsh -f nohup.csh' < /dev/null], ,
921 TCSH_UNTESTED([notify])
926 AT_DATA([onintr.csh],
938 AT_CHECK([tcsh -f onintr.csh], ,
949 [[set current=`/bin/pwd`
963 pushd /; echo ---; popd -p
968 AT_CHECK([tcsh -f popd.csh | sed "s,`/bin/pwd`,CWD,"], ,
984 [[Usage: popd [-plvn] [-|+<n>].
985 Usage: popd [-plvn] [-|+<n>].
993 AT_CHECK([env_var=value tcsh -f -c 'printenv env_var'], ,
997 AT_CHECK([env_var=value tcsh -f -c 'printenv' | grep env_var], ,
1006 AT_DATA([pushd.csh],
1007 [[set home=`/bin/pwd`
1039 AT_CHECK([tcsh -f pushd.csh | sed "s,`/bin/pwd`,CWD,g"], ,
1064 [[Usage: pushd [-plvn] [-|<dir>|+<n>].
1065 Usage: pushd [-plvn] [-|<dir>|+<n>].
1073 AT_CHECK([tcsh -f -c 'rehash'])
1080 AT_CHECK([tcsh -f -c 'repeat 3 echo OK'], ,
1086 AT_CHECK([tcsh -f -c 'repeat 0 echo > file' && test -f file -a ! -s file])
1091 TCSH_UNTESTED([rootnode])
1092 TCSH_UNTESTED([sched]) # We don't want to wait for minutes, so ...
1101 set my_var2=(val2a val2b)
1104 echo $?my_var3 ">$my_var3<"
1105 set -r my_var4=(file* `echo foo bar`)
1106 echo $#my_var4 $my_var4
1109 set -f my_var5=(a b c 1 b 2)
1111 set -l my_var5=(a b c 1 b 2)
1113 set my_var2[2]=val2x
1115 set var6=val6 var7 var8 = val8
1116 echo ">$var6<" ">$var7<" ">$var8<"
1118 AT_CHECK([tcsh -f set.csh], ,
1120 my_var2 (val2a val2b)
1122 4 file1 file2 foo bar
1123 my_var4 (file1 file2 foo bar)
1129 [set: $my_var4 is read-only.
1137 AT_CHECK([env_var=value tcsh -f -c 'setenv' | grep env_var], ,
1141 AT_DATA([output.sh],
1145 AT_CHECK([tcsh -f -c 'setenv env_var; ./output.sh'], ,
1149 AT_CHECK([tcsh -f -c 'setenv env_var value; ./output.sh'], ,
1156 TCSH_UNTESTED([setpath])
1157 TCSH_UNTESTED([setspath])
1158 TCSH_UNTESTED([settc])
1159 TCSH_UNTESTED([setty])
1160 TCSH_UNTESTED([setxvers])
1165 AT_DATA([shift.csh],
1184 AT_CHECK([tcsh -f shift.csh A B], ,
1193 shift: No more words.
1196 shift: No more words.
1205 AT_DATA([script.csh],
1208 AT_CHECK([[tcsh -i -f -c 'source -h script.csh foo; history' \
1209 | sed 's/ [^ ]* / TIME /']], ,
1210 [ 1 TIME source -h script.csh foo ; history
1214 AT_CHECK([tcsh -f -c 'source -h script.csh foo; echo $var'], 1, [],
1215 [var: Undefined variable.
1218 AT_DATA([script2.csh],
1220 echo $this_does_not_exist
1223 AT_DATA([script3.csh],
1224 [[source script2.csh
1227 AT_CHECK([tcsh -f -c 'source script3.csh'], 1,
1230 [this_does_not_exist: Undefined variable.
1233 AT_DATA([unreadable.csh],
1236 chmod 000 unreadable.csh
1237 AT_CHECK([tcsh -f -c 'source unreadable.csh'], 1, [], [ignore])
1242 TCSH_UNTESTED([stop])
1243 TCSH_UNTESTED([suspend])
1249 AT_DATA([switch.csh],
1289 AT_CHECK([tcsh -f switch.csh], ,
1302 TCSH_UNTESTED([telltc])
1303 TCSH_UNTESTED([termname])
1304 TCSH_UNTESTED([time])
1309 AT_DATA([umask.csh],
1319 AT_CHECK([tcsh -f umask.csh], ,
1331 AT_DATA([unalias.csh],
1337 AT_CHECK([tcsh -f unalias.csh])
1342 AT_SETUP([uncomplete])
1344 AT_DATA([uncomplete.csh],
1346 complete foo 'n/A/t:*/_' 'n/[^A]/t:*/_'
1350 AT_CHECK([tcsh -f uncomplete.csh])
1357 AT_CHECK([tcsh -f -c 'unhash'])
1362 TCSH_UNTESTED([universe])
1363 TCSH_UNTESTED([unlimit])
1368 AT_DATA([unset.csh],
1374 AT_CHECK([tcsh -f unset.csh], ,
1381 AT_SETUP([unsetenv])
1383 AT_DATA([unsetenv.csh],
1386 sh -c 'echo ${env_bar+set}'
1388 AT_CHECK([env_bar=value tcsh -f unsetenv.csh], ,
1395 TCSH_UNTESTED([ver])
1401 AT_CHECK([tcsh -f -c 'wait'])
1406 TCSH_UNTESTED([warp])
1407 TCSH_UNTESTED([watchlog])
1414 AT_DATA([where.csh],
1415 [[alias ls-F foo bar
1416 set path=(`/bin/pwd`)
1418 where this_does_not_exist
1420 AT_CHECK([tcsh -f where.csh | sed "s,`/bin/pwd`,CWD,"], ,
1421 [ls-F is aliased to foo bar
1422 ls-F is a shell built-in
1432 chmod a+x my_command
1433 AT_DATA([which.csh],
1434 [[alias my_alias my alias
1435 set path=(`/bin/pwd`)
1439 which this_does_not_exist
1440 alias echo echo_alias
1443 AT_CHECK([tcsh -f which.csh | sed "s,`/bin/pwd`,CWD,"], ,
1445 my_alias: aliased to my alias
1446 echo: shell built-in command.
1447 this_does_not_exist: Command not found.
1448 echo: aliased to echo_alias
1456 AT_DATA([while.csh],
1464 AT_CHECK([tcsh -f while.csh], ,
1474 AT_SETUP([jobs output])
1476 AT_DATA([jobs_stdout.csh],
1481 if ( -z ./stdout ) then
1482 echo "FAIL: 'jobs' output is not being displayed to stdout!"
1488 AT_CHECK([tcsh -f jobs_stdout.csh], 0, [ignore])
1492 AT_SETUP([time output])
1495 AT_DATA([time_output.csh],
1497 set time_output=`time sleep 1 > /dev/null`
1498 echo $time_output > ./output_result
1500 if ( -z ./output_result) then
1501 echo "FAIL: 'time' output is not being displayed to stdout!"
1507 AT_CHECK([tcsh -f time_output.csh], 0, [ignore])