]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - tests/commands.at
Update vendor/tcsh to git 83c5be0:
[FreeBSD/FreeBSD.git] / tests / commands.at
1 # Individual built-in commands
2
3 TCSH_UNTESTED([%])
4
5
6 AT_SETUP([:])
7
8 AT_CHECK([tcsh -f -c ': foo'])
9
10 AT_CLEANUP
11
12
13 AT_SETUP([@])
14
15 # Not testing much...
16 AT_CHECK([tcsh -f -c 'set' > out1 && tcsh -f -c '@' > out2])
17 AT_CHECK([diff out1 out2 | tail -n +2], ,
18 [< command      set
19 ---
20 > command       @
21 ])
22
23 AT_CHECK([tcsh -f -c '@ var=2 * 3; echo $var'], ,
24 [6
25 ])
26
27 AT_CHECK([[tcsh -f -c 'set var=(1 2); @ var[2] = 5; echo $var']], ,
28 [1 5
29 ])
30
31 AT_CHECK([tcsh -f -c 'set var=1; @ var++; echo $var; @ var--; echo $var'], ,
32 [2
33 1
34 ])
35
36 AT_CHECK([[tcsh -f -c \
37 'set var=(0 1); @ var[2]++; echo $var; @ var[2]--; echo $var']], ,
38 [0 2
39 0 1
40 ])
41
42 AT_CLEANUP
43
44
45 AT_SETUP([alias])
46
47 AT_CHECK([tcsh -f -c 'alias'])
48
49 AT_CHECK([tcsh -f -c 'alias foo echo bar; alias; alias foo'], ,
50 [foo    (echo bar)
51 echo bar
52 ])
53
54 AT_CHECK([tcsh -f -c 'alias foo "echo bar"; alias; alias foo'], ,
55 [foo    echo bar
56 echo bar
57 ])
58
59 AT_CHECK([tcsh -f -c 'alias alias alias'], 1, [],
60 [alias: Too dangerous to alias that.
61 ])
62
63 AT_CHECK([tcsh -f -c 'alias unalias unalias'], 1, [],
64 [unalias: Too dangerous to alias that.
65 ])
66
67 # Alias expansion happens only on the next input line
68 AT_DATA([alias.csh],
69 [[alias foo echo bar; foo
70 foo
71 ]])
72 AT_CHECK([tcsh -f alias.csh 2>&1], ,
73 [foo: Command not found.
74 bar
75 ])
76
77 AT_CLEANUP
78
79
80 TCSH_UNTESTED([alloc])
81 TCSH_UNTESTED([bg])
82 TCSH_UNTESTED([bindkey])
83 #TCSH_UNTESTED([bs2cmd])
84
85
86 AT_SETUP([break])
87
88 # Evaluating the rest of the line is incredibly ugly
89 AT_DATA([break.csh],
90 [[while (1)
91   echo foo
92   break
93   echo bar
94 end
95 while (1)
96   echo Foo
97   break; echo Bar
98   echo Baz
99 end
100 foreach name (foo bar baz)
101   echo $name
102   while (1)
103     break; break
104   end
105 end
106 ]])
107 AT_CHECK([tcsh -f break.csh], ,
108 [foo
109 Foo
110 Bar
111 foo
112 ])
113
114 # Ugly tends to imply buggy
115 AT_DATA([break2.csh],
116 [[while (1)
117     break; cat << EOF
118 Line 1
119 EOF
120   end
121   cat << EOF
122 Line 2
123 EOF
124 ]])
125 AT_CHECK([tcsh -f break2.csh], ,
126 [  cat << EOF
127 Line 2
128 ])
129
130 AT_CLEANUP
131
132
133 TCSH_UNTESTED([builtins])
134 TCSH_UNTESTED([bye])
135
136
137 AT_SETUP([cd])
138
139 AT_DATA([cd.csh],
140 [[set current=`/bin/pwd`
141 set home=$current
142 mkdir -p a
143 echo ---
144 cd a
145 /bin/pwd | sed "s,$current,,"
146 echo ---
147 cd
148 /bin/pwd | sed "s,$current,,"
149 echo ---
150 cd "$current/a"
151 /bin/pwd | sed "s,$current,,"
152 echo ---
153 cd -
154 /bin/pwd | sed "s,$current,,"
155 echo ---
156 cd a
157 set cdpath=($current)
158 echo ---
159 cd a
160 /bin/pwd | sed "s,$current,,"
161 echo ---
162 cd current
163 /bin/pwd | sed "s,$current,,"
164 echo ---
165 cd -p | sed "s,$current,,"
166 echo ---
167 cd -l | sed "s,$current,,"
168 (cd -z)
169 (cd - foo)
170 :
171 ]])
172 sed 's/^cd /chdir /; s/^(cd /(chdir /' < cd.csh > chdir.csh
173 AT_DATA([expout],
174 [[---
175 /a
176 ---
177
178 ---
179 /a
180 ---
181
182 ---
183 ---
184 ~/a @&t@
185 /a
186 ---
187 ~ @&t@
188
189 ---
190 ~ @&t@
191 ---
192  @&t@
193 ]])
194 AT_CHECK([tcsh -f cd.csh], , [expout],
195 [[Usage: cd [-plvn][-|<dir>].
196 Usage: cd [-plvn][-|<dir>].
197 ]])
198 AT_CHECK([tcsh -f chdir.csh], , [expout],
199 [[Usage: chdir [-plvn][-|<dir>].
200 Usage: chdir [-plvn][-|<dir>].
201 ]])
202
203 AT_CLEANUP
204
205
206 AT_SETUP([complete])
207
208 # We check only that the strings are preserved
209 AT_DATA([complete.csh],
210 [[complete
211 complete foo 'n/A/t:*/_' 'n/[^A]/t:*/_'
212 complete
213 complete foo
214 ]])
215 AT_CHECK([tcsh -f complete.csh], ,
216 [[foo   'n/A/t:*/_' 'n/[^A]/t:*/_'
217 'n/A/t:*/_' 'n/[^A]/t:*/_'
218 ]])
219
220 AT_CLEANUP
221
222
223 AT_SETUP([continue])
224
225 # See comments in tests of 'break'
226 AT_DATA([continue.csh],
227 [[foreach var (1)
228   echo foo
229   break
230   echo bar
231 end
232 foreach var (1)
233   echo Foo
234   break; echo Bar
235   echo Baz
236 end
237 foreach name (foo bar baz)
238   echo $name
239   while (1)
240     continue; break
241   end
242 end
243 ]])
244 AT_CHECK([tcsh -f continue.csh], ,
245 [foo
246 Foo
247 Bar
248 foo
249 ])
250
251 AT_DATA([continue2.csh],
252 [[foreach var (1)
253     continue; cat << EOF
254 Line 1
255 EOF
256   end
257   cat << EOF
258 Line 2
259 EOF
260 ]])
261 AT_CHECK([tcsh -f continue2.csh], ,
262 [  cat << EOF
263 Line 2
264 ])
265
266 AT_CLEANUP
267
268
269 AT_SETUP([dirs])
270
271 AT_DATA([dirs.csh],
272 [[set current=`/bin/pwd`
273 set home=$current
274 mkdir a
275 echo ---
276 dirs
277 echo ---
278 pushd a
279 dirs
280 echo ---
281 dirs -p
282 echo ---
283 dirs -l | sed "s,$current,CWD,g"
284 echo ---
285 dirs -v
286 echo ---
287 dirs -lv | sed "s,$current,CWD,g"
288 dirs -S $current/saved
289 echo ---
290 pushd /
291 dirs | sed "s,$current,CWD,g"
292 echo ---
293 dirs -L $current/saved
294 dirs | sed "s,$current,CWD,g"
295 echo ---
296 dirs -c
297 dirs | sed "s,$current,CWD,g"
298 (dirs -z)
299 (dirs - foo)
300 :
301 ]])
302 AT_CHECK([tcsh -f dirs.csh], ,
303 [---
304 ~ @&t@
305 ---
306 ~/a ~ @&t@
307 ~/a ~ @&t@
308 ---
309 ~/a ~ @&t@
310 ---
311 CWD/a CWD @&t@
312 ---
313 0       ~/a
314 1       ~
315 ---
316 0       CWD/a
317 1       CWD
318 ---
319 / ~/a ~ @&t@
320 / ~/a ~ @&t@
321 ---
322 ~/a ~ ~/a ~ @&t@
323 ---
324 ~/a @&t@
325 ],
326 [[Usage: dirs [-plvnSLc].
327 Usage: dirs [-plvnSLc].
328 ]])
329 AT_CHECK([echo x"`/bin/pwd`"x > /tmp/x && sed "s,`/bin/pwd`,CWD,g" < saved], ,
330 [cd CWD
331 pushd CWD/a
332 ])
333
334 AT_CLEANUP
335
336
337
338 AT_SETUP([echo])
339
340 # Other functionality tested with $echo_style
341 AT_CHECK([tcsh -f -c 'echo OK'], ,
342 [OK
343 ])
344
345 AT_CLEANUP
346
347
348 TCSH_UNTESTED([echotc])
349
350
351 AT_SETUP([eval])
352
353 AT_CHECK([tcsh -f -c 'set cmd="echo OK"; eval $cmd'], ,
354 [OK
355 ])
356
357 AT_CLEANUP
358
359
360 AT_SETUP([exec])
361
362 AT_CHECK([tcsh -f -c 'exec echo OK'], ,
363 [OK
364 ])
365
366 AT_CLEANUP
367
368
369 AT_SETUP([exit])
370
371 AT_CHECK([tcsh -f -c 'exit (50 * 4)'], 200)
372
373 AT_CHECK([tcsh -f -c '(exit 50); exit'], 0)
374
375 AT_CLEANUP
376
377
378 TCSH_UNTESTED([fg])
379
380
381 AT_SETUP([filetest])
382
383 touch file1 file2
384 chmod 6777 file1
385 chmod 000 file2
386
387 AT_CHECK([tcsh -f -c 'filetest -r file1 file2'], ,
388 [1 0
389 ])
390
391 AT_CHECK([tcsh -f -c 'filetest -w file1 file2'], ,
392 [1 0
393 ])
394
395 AT_CHECK([tcsh -f -c 'filetest -x file1 file2'], ,
396 [1 0
397 ])
398
399 AT_CHECK([tcsh -f -c 'filetest -X ls unknown_command'], ,
400 [1 0
401 ])
402
403 AT_CHECK([tcsh -f -c 'filetest -e file1 nonexistent'], ,
404 [1 0
405 ])
406
407 AT_CHECK([tcsh -f -c 'filetest -o file1'], ,
408 [1
409 ])
410
411 echo > nonempty
412 AT_CHECK([tcsh -f -c 'filetest -z file1 nonempty'], ,
413 [1 0
414 ])
415
416 AT_CHECK([tcsh -f -c 'filetest -s file1 nonempty'], ,
417 [0 1
418 ])
419
420 mkdir dir
421 chmod +t dir
422 ln -s file2 link
423 mkfifo pipe
424
425 AT_CHECK([tcsh -f -c 'filetest -f file1 dir'], ,
426 [1 0
427 ])
428
429 AT_CHECK([tcsh -f -c 'filetest -d dir file1'], ,
430 [1 0
431 ])
432
433 AT_CHECK([tcsh -f -c 'filetest -l link file1'], ,
434 [1 0
435 ])
436
437 AT_CHECK([tcsh -f -c 'filetest -p pipe file1'], ,
438 [1 0
439 ])
440
441 AT_CHECK([tcsh -f -c 'filetest -u file1 file2'], ,
442 [1 0
443 ])
444
445 AT_CHECK([tcsh -f -c 'filetest -g file1 file2'], ,
446 [1 0
447 ])
448
449 AT_CHECK([tcsh -f -c 'filetest -k dir file2'], ,
450 [1 0
451 ])
452
453 AT_CHECK([tcsh -f -c 'filetest -t 0' < /dev/null], ,
454 [0
455 ])
456
457 AT_CHECK([tcsh -f -c 'filetest -f link'], ,
458 [1
459 ])
460 AT_CHECK([tcsh -f -c 'filetest -Lf link'], ,
461 [0
462 ])
463
464 AT_CHECK([tcsh -f -c 'filetest -rwx file1'], ,
465 [1
466 ])
467
468 # -A, -A:, -M, -M:, -C, -C:, -D, -I, -F, -U, -U:, -G, -G: not tested
469
470 AT_CHECK([tcsh -f -c 'filetest -L link'], ,
471 [file2
472 ])
473
474 ln file2 file2link
475 AT_CHECK([tcsh -f -c 'filetest -N file1 file2'], ,
476 [1 2]
477 )
478
479 # S_ISVTX is masked out
480 AT_CHECK([tcsh -f -c 'filetest -P file1'], ,
481 [6777
482 ])
483 AT_CHECK([tcsh -f -c 'filetest -P: file1'], ,
484 [06777
485 ])
486 AT_CHECK([tcsh -f -c 'filetest -P111 file1'], ,
487 [111
488 ])
489 AT_CHECK([tcsh -f -c 'filetest -P111: file1'], ,
490 [0111
491 ])
492
493 AT_CHECK([tcsh -f -c 'filetest -Z file1 nonempty'], ,
494 [0 1
495 ])
496
497 AT_CHECK([tcsh -f -c 'filetest -N unknown'], ,
498 [-1
499 ])
500
501 AT_CLEANUP
502
503
504 AT_SETUP([foreach])
505
506 AT_DATA([foreach.csh],
507 [[foreach var (a b c)
508   echo $var
509 end
510 ]])
511 AT_CHECK([tcsh -f foreach.csh], ,
512 [a
513 b
514 c
515 ])
516
517 AT_CLEANUP
518
519
520 TCSH_UNTESTED([getspath])
521 TCSH_UNTESTED([getxvers])
522
523
524 AT_SETUP([glob])
525
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
529 0000005
530 ]])
531
532 AT_CLEANUP
533
534
535 AT_SETUP([goto])
536
537 AT_DATA([goto.csh],
538 [[goto first
539 echo fail
540   first:
541 again:
542 echo Here
543 if $?again == 0 then
544   echo First
545   set again=1
546   goto again
547 endif
548 echo OK
549 ]])
550 AT_CHECK([tcsh -f goto.csh], ,
551 [Here
552 First
553 Here
554 OK
555 ])
556
557 AT_CLEANUP
558
559
560 TCSH_UNTESTED([hashstat])
561
562
563 AT_SETUP([history])
564
565 AT_DATA([history.csh],
566 [[: cmd 1
567 : cmd 2
568 echo ---
569 history
570 echo ---
571 history 2
572 echo ---
573 history -h 2
574 echo ---
575 history -T 2
576 echo ---
577 history -r 2
578 history -S hist1
579 set savehist=(1)
580 history -S hist2
581 history -S hist3
582 set savehist=(5 merge)
583 history -S hist3
584 history -M hist2
585 echo ---
586 history
587 history -L hist2
588 echo ---
589 history 4
590 history -c
591 echo ---
592 history
593 ]])
594 AT_CHECK([[tcsh -f -q -i < history.csh] dnl
595           [| sed 's/    [^      ]*      / TIME /']], ,
596 [> ---
597      1 TIME : cmd 1
598      2 TIME : cmd 2
599      3 TIME echo ---
600      4 TIME history
601 ---
602      5 TIME echo ---
603      6 TIME history 2
604 ---
605 echo ---
606 history -h 2
607 ---
608      9 TIME echo ---
609     10 TIME history -T 2
610 ---
611     12 TIME history -r 2
612     11 TIME echo ---
613 ---
614      1 TIME : cmd 1
615      2 TIME : cmd 2
616      3 TIME echo ---
617      4 TIME history
618      5 TIME echo ---
619      6 TIME history 2
620      7 TIME echo ---
621      8 TIME history -h 2
622      9 TIME echo ---
623     10 TIME history -T 2
624     11 TIME echo ---
625     12 TIME history -r 2
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
633     20 TIME echo ---
634     21 TIME history
635 ---
636     22 TIME history -L hist2
637     23 TIME history -S hist2
638     24 TIME echo ---
639     25 TIME history 4
640 ---
641     27 TIME echo ---
642     28 TIME history
643 > exit
644 ])
645 AT_CHECK([[sed 's/^#+[0123456789]*$/#+STAMP/' < hist1]], ,
646 [#+STAMP
647 : cmd 1
648 #+STAMP
649 : cmd 2
650 #+STAMP
651 echo ---
652 #+STAMP
653 history
654 #+STAMP
655 echo ---
656 #+STAMP
657 history 2
658 #+STAMP
659 echo ---
660 #+STAMP
661 history -h 2
662 #+STAMP
663 echo ---
664 #+STAMP
665 history -T 2
666 #+STAMP
667 echo ---
668 #+STAMP
669 history -r 2
670 #+STAMP
671 history -S hist1
672 ])
673 AT_CHECK([[sed 's/^#+[0123456789]*$/#+STAMP/' < hist2]], ,
674 [#+STAMP
675 history -S hist2
676 ])
677 AT_CHECK([[sed 's/^#+[0123456789]*$/#+STAMP/' < hist3]], ,
678 [#+STAMP
679 set savehist= ( 1 )
680 #+STAMP
681 history -S hist2
682 #+STAMP
683 history -S hist3
684 #+STAMP
685 set savehist= ( 5 merge )
686 #+STAMP
687 history -S hist3
688 ])
689
690 AT_CLEANUP
691
692
693 AT_SETUP([hup])
694
695 AT_DATA([hup.csh],
696 [[kill -s HUP $$
697 echo OK
698 hup
699 kill -s HUP $$
700 echo fail
701 ]])
702 # onintr - is necessary to keep setintr == 0; should dohup () be checking
703 # something else?
704 AT_CHECK([tcsh -f -c 'onintr -; nohup tcsh -f hup.csh' < /dev/null], ignore,
705 [[OK
706 ]],
707 [[Hangup]]
708 )
709
710 # The prefix form requires job control and is not tested
711
712 AT_CLEANUP
713
714
715 AT_SETUP([if])
716
717 AT_DATA([if.csh],
718 [[if (0) echo fail
719 if (1) echo OK
720 if (0) then
721   echo fail
722 else if (0) then
723   echo fail
724 else
725   echo OK
726 endif
727 if (0) then
728   echo fail
729 else if (1) then
730   echo OK
731 else
732   echo fail
733 endif
734 if (0) then
735   echo fail
736 else if (0) then
737   echo fail
738 else if (1) then
739   echo OK
740 else
741   echo fail
742 endif
743 if (0) then
744   echo fail
745 else if (0) then
746   echo fail
747         else
748   echo OK
749 endif
750 if (1) then
751   echo OK
752 else if (0) then
753   echo fail
754 else
755   echo fail
756 endif
757 # skipping over an empty line
758 if (0) then
759
760 endif
761 ]])
762 AT_CHECK([tcsh -f if.csh], ,
763 [OK
764 OK
765 OK
766 OK
767 OK
768 OK
769 ])
770
771 AT_CLEANUP
772
773
774 TCSH_UNTESTED([inlib])
775 TCSH_UNTESTED([jobs])
776
777
778 AT_SETUP([kill])
779
780 # Nested to ensure consistent output
781 AT_DATA([kill.csh],
782 [[kill $$
783 kill -USR1 $$
784 ]])
785 AT_CHECK([tcsh -f -c 'tcsh -f -i -q < kill.csh'], ignore,
786 [[> ]],
787 [[User signal 1]]
788 )
789
790 # kill %job, kill -l untested untested
791
792 AT_CLEANUP
793
794
795 TCSH_UNTESTED([limit])
796
797
798 AT_SETUP([log])
799
800 AT_DATA([log.csh],
801 [[set watch=(this_user_does_not_exist)
802 log
803 ]])
804 AT_CHECK([tcsh -f log.csh])
805
806 AT_CLEANUP
807
808
809 TCSH_UNTESTED([login])
810
811
812 AT_SETUP([logout])
813
814 AT_CHECK([tcsh -f -c 'logout'], 1, [],
815 [Not a login shell.
816 ])
817
818 AT_CLEANUP
819
820
821 AT_SETUP([ls-F])
822
823 mkdir dir
824 touch file exec .hidden
825 chmod a+x exec
826 mkfifo pipe
827 ln -s file lfile
828 ln -s dir ldir
829 ln -s nowhere lnowhere
830 unset LS_COLORS
831
832 AT_CHECK([tcsh -f -c 'ls-F' | grep -vF testsuite.log], ,
833 [dir/
834 exec*
835 file @&t@
836 ldir@
837 lfile@
838 lnowhere@
839 pipe|
840 ])
841
842 AT_CHECK([tcsh -f -c 'set listlinks; ls-F' | grep -vF testsuite.log], ,
843 [dir/
844 exec*
845 file @&t@
846 ldir>
847 lfile@
848 lnowhere&
849 pipe|
850 ])
851
852 AT_CHECK([tcsh -f -c 'set listflags=x; ls-F' | grep -vF testsuite.log], ,
853 [dir/
854 exec*
855 file @&t@
856 ldir@
857 lfile@
858 lnowhere@
859 pipe|
860 ])
861
862 AT_CHECK([tcsh -f -c 'set listflags=A; ls-F' | grep -vF testsuite.log], ,
863 [.hidden @&t@
864 dir/
865 exec*
866 file @&t@
867 ldir@
868 lfile@
869 lnowhere@
870 pipe|
871 ])
872
873 AT_CHECK([tcsh -f -c 'set listflags=xa; ls-F' | grep -vF testsuite.log], ,
874 [../
875 ./
876 .hidden @&t@
877 dir/
878 exec*
879 file @&t@
880 ldir@
881 lfile@
882 lnowhere@
883 pipe|
884 ])
885
886 AT_CLEANUP
887
888
889 TCSH_UNTESTED([migrate])
890 TCSH_UNTESTED([newgrp])
891
892
893 AT_SETUP([nice])
894
895 # Nothing really tested
896 AT_CHECK([tcsh -f -c 'nice set var=1; echo $?var'], ,
897 [0
898 ])
899
900
901 AT_CLEANUP
902
903
904 AT_SETUP([nohup])
905
906 AT_DATA([nohup.csh],
907 [[
908 hup
909 nohup
910 kill -s HUP $$
911 echo OK
912 ]])
913 # See commends in [hup]
914 AT_CHECK([tcsh -f -c 'onintr -; nohup tcsh -f nohup.csh' < /dev/null], ,
915 [OK
916 ])
917
918 AT_CLEANUP
919
920
921 TCSH_UNTESTED([notify])
922
923
924 AT_SETUP([onintr])
925
926 AT_DATA([onintr.csh],
927 [[onintr label
928 kill -INT $$
929 echo fail
930 label:
931 echo caught
932 onintr -
933 kill -INT $$
934 echo OK
935 onintr -
936 kill -INT $$
937 ]])
938 AT_CHECK([tcsh -f onintr.csh], ,
939 [caught
940 OK
941 ])
942
943 AT_CLEANUP
944
945
946 AT_SETUP([popd])
947
948 AT_DATA([popd.csh],
949 [[set current=`/bin/pwd`
950 set home=$current
951 pushd /
952 popd
953 pushd /
954 pushd $home
955 popd +2
956 echo ---
957 dirs -c
958 pushd /; popd -l
959 pushd /; popd -v
960 pushd /; popd -lv
961 set pushdsilent
962 pushd /; popd
963 pushd /; echo ---; popd -p
964 (popd -z)
965 (popd - foo)
966 :
967 ]])
968 AT_CHECK([tcsh -f popd.csh | sed "s,`/bin/pwd`,CWD,"], ,
969 [/ ~ @&t@
970 ~ @&t@
971 / ~ @&t@
972 ~ / ~ @&t@
973 ~ / @&t@
974 ---
975 / ~ @&t@
976 CWD @&t@
977 / ~ @&t@
978 0       ~
979 / ~ @&t@
980 0       CWD
981 ---
982 ~ @&t@
983 ],
984 [[Usage: popd [-plvn] [-|+<n>].
985 Usage: popd [-plvn] [-|+<n>].
986 ]])
987
988 AT_CLEANUP
989
990
991 AT_SETUP([printenv])
992
993 AT_CHECK([env_var=value tcsh -f -c 'printenv env_var'], ,
994 [value
995 ])
996
997 AT_CHECK([env_var=value tcsh -f -c 'printenv' | grep env_var], ,
998 [env_var=value
999 ])
1000
1001 AT_CLEANUP
1002
1003
1004 AT_SETUP([pushd])
1005
1006 AT_DATA([pushd.csh],
1007 [[set home=`/bin/pwd`
1008 mkdir a
1009 pushd /
1010 pushd /dev
1011 pushd
1012 set pushdtohome
1013 pushd
1014 pushd -
1015 dirs -c
1016 echo ---
1017 pushd
1018 pushd a
1019 pushd /dev
1020 pushd +2
1021 set dunique
1022 pushd /dev
1023 unset dunique
1024 set dextract
1025 pushd +2
1026 dirs -c
1027 echo ---
1028 pushd -l
1029 pushd -v
1030 pushd -lv
1031 set pushdsilent
1032 pushd
1033 echo ---
1034 pushd -p
1035 (pushd -z)
1036 (pushd - foo)
1037 :
1038 ]])
1039 AT_CHECK([tcsh -f pushd.csh | sed "s,`/bin/pwd`,CWD,g"], ,
1040 [/ ~ @&t@
1041 /dev / ~ @&t@
1042 / /dev ~ @&t@
1043 ~ / /dev ~ @&t@
1044 / ~ / /dev ~ @&t@
1045 ---
1046 ~ / @&t@
1047 ~/a ~ / @&t@
1048 /dev ~/a ~ / @&t@
1049 ~ / /dev ~/a @&t@
1050 /dev ~ / ~/a @&t@
1051 / /dev ~ ~/a @&t@
1052 ---
1053 CWD / @&t@
1054 0       ~
1055 1       ~
1056 2       /
1057 0       CWD
1058 1       CWD
1059 2       CWD
1060 3       /
1061 ---
1062 ~ ~ ~ ~ ~ / @&t@
1063 ],
1064 [[Usage: pushd [-plvn] [-|<dir>|+<n>].
1065 Usage: pushd [-plvn] [-|<dir>|+<n>].
1066 ]])
1067
1068 AT_CLEANUP
1069
1070
1071 AT_SETUP([rehash])
1072
1073 AT_CHECK([tcsh -f -c 'rehash'])
1074
1075 AT_CLEANUP
1076
1077
1078 AT_SETUP([repeat])
1079
1080 AT_CHECK([tcsh -f -c 'repeat 3 echo OK'], ,
1081 [OK
1082 OK
1083 OK
1084 ])
1085
1086 AT_CHECK([tcsh -f -c 'repeat 0 echo > file' && test -f file -a ! -s file])
1087
1088 AT_CLEANUP
1089
1090
1091 TCSH_UNTESTED([rootnode])
1092 TCSH_UNTESTED([sched]) # We don't want to wait for minutes, so ...
1093
1094
1095 AT_SETUP([set])
1096
1097 touch file1 file2
1098
1099 AT_DATA([set.csh],
1100 [[set my_var1=val1
1101 set my_var2=(val2a val2b)
1102 set | grep my_var
1103 set my_var3
1104 echo $?my_var3 ">$my_var3<"
1105 set -r my_var4=(file* `echo foo bar`)
1106 echo $#my_var4 $my_var4
1107 (set my_var4=other)
1108 set -r
1109 set -f my_var5=(a b c 1 b 2)
1110 echo $my_var5
1111 set -l my_var5=(a b c 1 b 2)
1112 echo $my_var5
1113 set my_var2[2]=val2x
1114 echo $my_var2
1115 set var6=val6 var7 var8 = val8
1116 echo ">$var6<" ">$var7<" ">$var8<"
1117 ]])
1118 AT_CHECK([tcsh -f set.csh], ,
1119 [my_var1        val1
1120 my_var2 (val2a val2b)
1121 1 ><
1122 4 file1 file2 foo bar
1123 my_var4 (file1 file2 foo bar)
1124 a b c 1 2
1125 a c 1 b 2
1126 val2a val2x
1127 >val6< >< >val8<
1128 ],
1129 [set: $my_var4 is read-only.
1130 ])
1131
1132 AT_CLEANUP
1133
1134
1135 AT_SETUP([setenv])
1136
1137 AT_CHECK([env_var=value tcsh -f -c 'setenv' | grep env_var], ,
1138 [env_var=value
1139 ])
1140
1141 AT_DATA([output.sh],
1142 [[echo $env_var
1143 ]])
1144 chmod a+x output.sh
1145 AT_CHECK([tcsh -f -c 'setenv env_var; ./output.sh'], ,
1146 [
1147 ])
1148
1149 AT_CHECK([tcsh -f -c 'setenv env_var value; ./output.sh'], ,
1150 [value
1151 ])
1152
1153 AT_CLEANUP
1154
1155
1156 TCSH_UNTESTED([setpath])
1157 TCSH_UNTESTED([setspath])
1158 TCSH_UNTESTED([settc])
1159 TCSH_UNTESTED([setty])
1160 TCSH_UNTESTED([setxvers])
1161
1162
1163 AT_SETUP([shift])
1164
1165 AT_DATA([shift.csh],
1166 [[set var=(1 2)
1167 echo $var
1168 shift var
1169 echo $var
1170 shift var
1171 echo $var
1172 sh -c 'echo 1 >&2'
1173 (shift var)
1174 sh -c 'echo 2 >&2'
1175 echo $argv
1176 shift
1177 echo $argv
1178 shift
1179 echo $argv
1180 sh -c 'echo 3 >&2'
1181 (shift)
1182 sh -c 'echo 4 >&2'
1183 ]])
1184 AT_CHECK([tcsh -f shift.csh A B], ,
1185 [1 2
1186 2
1187
1188 A B
1189 B
1190
1191 ],
1192 [1
1193 shift: No more words.
1194 2
1195 3
1196 shift: No more words.
1197 4]
1198 )
1199
1200 AT_CLEANUP
1201
1202
1203 AT_SETUP([source])
1204
1205 AT_DATA([script.csh],
1206 [[set var=$1
1207 ]])
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
1211      2 TIME set var=$1
1212 ])
1213
1214 AT_CHECK([tcsh -f -c 'source -h script.csh foo; echo $var'], 1, [],
1215 [var: Undefined variable.
1216 ])
1217
1218 AT_DATA([script2.csh],
1219 [[echo OK
1220 echo $this_does_not_exist
1221 echo fail
1222 ]])
1223 AT_DATA([script3.csh],
1224 [[source script2.csh
1225 echo fail
1226 ]])
1227 AT_CHECK([tcsh -f -c 'source script3.csh'], 1,
1228 [OK
1229 ],
1230 [this_does_not_exist: Undefined variable.
1231 ])
1232
1233 AT_DATA([unreadable.csh],
1234 [[echo fail
1235 ]])
1236 chmod 000 unreadable.csh
1237 AT_CHECK([tcsh -f -c 'source unreadable.csh'], 1, [], [ignore])
1238
1239 AT_CLEANUP
1240
1241
1242 TCSH_UNTESTED([stop])
1243 TCSH_UNTESTED([suspend])
1244
1245
1246 AT_SETUP([switch])
1247
1248 touch file1
1249 AT_DATA([switch.csh],
1250 [[switch (file*)
1251   case file1:
1252     echo OK
1253 endsw
1254 switch (`echo foo`)
1255   case *echo*:
1256     echo fail
1257   case foo:
1258     echo OK
1259 endsw
1260 switch (string)
1261   case ?string:
1262     echo fail
1263   case s*[i]?g:
1264     echo OK
1265     breaksw
1266   default:
1267     echo fail
1268 endsw
1269 switch (string)
1270   case foo:
1271     echo fail
1272   default:
1273     echo OK
1274 endsw
1275 switch (string)
1276   case string:
1277     echo OK1
1278   case foo:
1279     echo OK2
1280   default:
1281     echo OK3
1282 endsw
1283 switch (nothing)
1284   case foo:
1285   case bar:
1286     echo fail
1287 endsw
1288 ]])
1289 AT_CHECK([tcsh -f switch.csh], ,
1290 [OK
1291 OK
1292 OK
1293 OK
1294 OK1
1295 OK2
1296 OK3
1297 ])
1298
1299 AT_CLEANUP
1300
1301
1302 TCSH_UNTESTED([telltc])
1303 TCSH_UNTESTED([termname])
1304 TCSH_UNTESTED([time])
1305
1306
1307 AT_SETUP([umask])
1308
1309 AT_DATA([umask.csh],
1310 [[umask 000
1311 umask
1312 umask 77
1313 umask
1314 umask 700
1315 umask
1316 umask 002
1317 umask
1318 ]])
1319 AT_CHECK([tcsh -f umask.csh], ,
1320 [0
1321 77
1322 700
1323 2
1324 ])
1325
1326 AT_CLEANUP
1327
1328
1329 AT_SETUP([unalias])
1330
1331 AT_DATA([unalias.csh],
1332 [[unalias foo
1333 alias foo bar
1334 unalias fo?
1335 alias
1336 ]])
1337 AT_CHECK([tcsh -f unalias.csh])
1338
1339 AT_CLEANUP
1340
1341
1342 AT_SETUP([uncomplete])
1343
1344 AT_DATA([uncomplete.csh],
1345 [[uncomplete foo
1346 complete foo 'n/A/t:*/_' 'n/[^A]/t:*/_'
1347 uncomplete f?*
1348 complete
1349 ]])
1350 AT_CHECK([tcsh -f uncomplete.csh])
1351
1352 AT_CLEANUP
1353
1354
1355 AT_SETUP([unhash])
1356
1357 AT_CHECK([tcsh -f -c 'unhash'])
1358
1359 AT_CLEANUP
1360
1361
1362 TCSH_UNTESTED([universe])
1363 TCSH_UNTESTED([unlimit])
1364
1365
1366 AT_SETUP([unset])
1367
1368 AT_DATA([unset.csh],
1369 [[unset foo
1370 set foo=var
1371 unset f?o
1372 echo $?foo
1373 ]])
1374 AT_CHECK([tcsh -f unset.csh], ,
1375 [0
1376 ])
1377
1378 AT_CLEANUP
1379
1380
1381 AT_SETUP([unsetenv])
1382
1383 AT_DATA([unsetenv.csh],
1384 [[unsetenv env_foo
1385 unsetenv env_*
1386 sh -c 'echo ${env_bar+set}'
1387 ]])
1388 AT_CHECK([env_bar=value tcsh -f unsetenv.csh], ,
1389 [
1390 ])
1391
1392 AT_CLEANUP
1393
1394
1395 TCSH_UNTESTED([ver])
1396
1397
1398 AT_SETUP([wait])
1399
1400 # Not really...
1401 AT_CHECK([tcsh -f -c 'wait'])
1402
1403 AT_CLEANUP
1404
1405
1406 TCSH_UNTESTED([warp])
1407 TCSH_UNTESTED([watchlog])
1408
1409
1410 AT_SETUP([where])
1411
1412 touch ls-F
1413 chmod a+x ls-F
1414 AT_DATA([where.csh],
1415 [[alias ls-F foo bar
1416 set path=(`/bin/pwd`)
1417 where ls-F
1418 where this_does_not_exist
1419 ]])
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
1423 CWD/ls-F
1424 ])
1425
1426 AT_CLEANUP
1427
1428
1429 AT_SETUP([which])
1430
1431 touch my_command
1432 chmod a+x my_command
1433 AT_DATA([which.csh],
1434 [[alias my_alias my alias
1435 set path=(`/bin/pwd`)
1436 which my_command
1437 which my_alias
1438 which echo
1439 which this_does_not_exist
1440 alias echo echo_alias
1441 which echo
1442 ]])
1443 AT_CHECK([tcsh -f which.csh | sed "s,`/bin/pwd`,CWD,"], ,
1444 [CWD/my_command
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
1449 ])
1450
1451 AT_CLEANUP
1452
1453
1454 AT_SETUP([while])
1455
1456 AT_DATA([while.csh],
1457 [[set i=0
1458 while ($i < 3)
1459   echo $i
1460   @ i++
1461 end
1462 echo OK
1463 ]])
1464 AT_CHECK([tcsh -f while.csh], ,
1465 [0
1466 1
1467 2
1468 OK
1469 ])
1470
1471 AT_CLEANUP
1472
1473
1474 AT_SETUP([jobs output])
1475
1476 AT_DATA([jobs_stdout.csh],
1477 [[
1478 sleep 3 &
1479 jobs -l > ./stdout
1480
1481 if ( -z ./stdout ) then
1482   echo "FAIL: 'jobs' output is not being displayed to stdout!"
1483   exit 1
1484 else
1485   exit 0
1486 endif
1487 ]])
1488 AT_CHECK([tcsh -f jobs_stdout.csh], 0, [ignore])
1489
1490 AT_CLEANUP
1491
1492 AT_SETUP([time output])
1493
1494
1495 AT_DATA([time_output.csh],
1496 [[
1497 set time_output=`time sleep 1 > /dev/null`
1498 echo $time_output > ./output_result
1499
1500 if ( -z ./output_result) then
1501   echo "FAIL: 'time' output is not being displayed to stdout!"
1502   exit 1
1503 else
1504   exit 0
1505 endif
1506 ]])
1507 AT_CHECK([tcsh -f time_output.csh], 0, [ignore])
1508
1509 AT_CLEANUP