cmd: Add full for /R support.
[wine] / programs / cmd / tests / test_builtins.cmd.exp
1
2 @pwd@>echo Tests for cmd's builtin commands@space@
3 Tests for cmd's builtin commands
4
5 @pwd@>echo ------------ Testing 'echo' [ON] ------------@space@
6 ------------ Testing 'echo' [ON] ------------
7
8 @pwd@>echo word@space@
9 word
10
11 @pwd@>echo 'singlequotedword'@space@
12 'singlequotedword'
13
14 @pwd@>echo "doublequotedword"@space@
15 "doublequotedword"
16 at-echoed-word
17
18 @pwd@>echo "/?"@space@
19 "/?"
20
21 @pwd@>echo.
22
23
24 @pwd@>echo .@space@
25 .
26
27 @pwd@>echo.word
28 word
29
30 @pwd@>echo .word@space@
31 .word
32
33 @pwd@>echo:
34
35
36 @pwd@>echo :@space@
37 :
38
39 @pwd@>echo:word
40 word
41
42 @pwd@>echo :word@space@
43 :word
44
45 @pwd@>echo off now@space@
46 off now
47
48 @pwd@>echo word@space@@space@
49 word@space@
50
51 @pwd@>echo word@space@@space@@space@
52 word@space@@space@
53
54 @pwd@>echo word@space@
55 word
56
57 @pwd@>echo@tab@word@space@
58 word
59
60 @pwd@>echo@tab@word@space@@tab@@space@
61 word@space@@tab@
62
63 @pwd@>echo@tab@word@tab@@space@@space@
64 word@tab@@space@
65
66 @pwd@>echo word@space@
67 word
68
69 @pwd@>echo@space@@tab@word@space@
70 @tab@word
71
72 @pwd@>echo@space@@space@@tab@word@space@
73 @space@@tab@word
74
75 @pwd@>echo@tab@@tab@word@space@
76 @tab@word
77
78 @pwd@>echo @tab@ on @space@@space@
79 noecho1
80 noecho2
81 echo3
82 ------------ Testing 'echo' [OFF] ------------
83 word
84 'singlequotedword'
85 "doublequotedword"
86 at-echoed-word
87 "/?"
88
89 .
90 word
91 .word
92
93 :
94 word
95 :word
96 on again
97 word@space@
98 word@space@@space@
99 word
100 word
101 word@space@@tab@
102 word@tab@@space@
103 word
104 @tab@word
105 @space@@tab@word
106 @tab@word
107 ------------ Testing mixed echo modes ------------
108 @echo on
109 if 1==1 echo foo
110 if 1==1 @echo bar
111 @echo off
112 if 1==1 echo foo2
113 if 1==1 @echo bar2
114
115 @todo_wine@@pwd@>if 1 == 1 echo foo@space@
116 foo
117
118 @todo_wine@@pwd@>if 1 == 1@space@
119 bar
120 foo2
121 bar2
122 ------------ Testing parameterization ------------
123 'a', 'b', 'c'
124 '"a b c"', '', ''
125 '"a b"\c', '', ''
126 'a', '~`+', '.{}!+b'
127 'a', 'b', ''
128 '"a;b"', '', ''
129 'a', 'b', ''
130 'a[b]{c}(d)e', '', ''
131 'a', '', ''
132 second line
133 'a', 'b', 'c'
134 'a', 'b', 'c'
135 'a', 'b', ''
136 ------------ Testing rem ------------
137
138 @pwd@>rem Hello@space@
139
140 @pwd@>rem  Hello@space@
141
142 @pwd@>rem   Hello || foo@space@
143
144 @pwd@>rem echo lol@space@
145
146 @pwd@>rem echo foo & echo bar@space@
147
148 @pwd@>rem @tab@  Hello@space@
149
150 @pwd@>rem@tab@  Hello@space@
151
152 @pwd@>rem@tab@echo foo & echo bar@space@
153 ------------ Testing redirection operators ------------
154 --- stdout redirection
155 foo
156 foo@space@
157 foo@tab@
158 foo@space@
159 foo@tab@
160 foo7@space@@or_broken@foo@tab@
161 foo9@space@@or_broken@foo@tab@
162 foo1
163 foo11
164 foo12
165 foo13
166 foo14
167 foo15
168 --- stdout appending
169 foo
170 foo@space@
171 foob@space@
172 foob@space@
173 fooc@space@
174 foob@space@
175 fooc@space@
176 food1
177 foob@space@
178 fooc@space@
179 food1
180 food2
181 food21
182 @todo_wine@foo7@space@@space@@or_broken@not supported@space@
183 @todo_wine@foo@or_broken@not supported
184 --- redirections within IF statements
185 @todo_wine@foo1
186 -----
187 foo2
188 foo3
189 file does not exist, ok
190 foo4
191 baz5
192 baz6@space@
193 baz7
194 baz8
195 baz
196 foo@space@
197 baz
198 foo
199 A
200 B
201 C
202 ------------ Testing circumflex escape character ------------
203 hello, world
204 hello, world
205 hell^o, world
206 hell^o, world
207 helloworld
208 hello
209 world
210 hello
211
212 finished
213 baz
214 baz
215 foo | echo bar
216 foo & echo bar
217 bak &
218 baz@space@
219 0@or_broken@1
220 foo > foo
221 <
222 ffoof
223 FOO=bar | baz
224 0
225 FOO=bar ^| baz
226 bar | baz
227 0
228 ------------ Testing 'set' ------------
229 1
230 0
231 FOOBAR not defined
232   baz
233 FOOBAR =  baz
234 0
235   baz2
236 0
237  bar
238 FOOBAR= bar
239 FOOBAR =  baz2
240 FOOBAR =  baz2
241 FOOBAR not defined
242 1
243 bar
244 foobar
245 FOO not defined
246 BAZ=bazbaz
247 bazbaz
248 set "FOO=bar" should not include the quotes in the variable value
249 bar
250 foo
251 ''
252 'foo@space@'
253 'foo@tab@'
254 ------------ Testing variable expansion ------------
255 ~dp0 should be directory containing batch file
256 @pwd@\
257 @pwd@\
258 CD value @pwd@@or_broken@CD value@space@
259 %
260 P
261 P
262 S
263 P
264 PS
265 ERRORLEVEL
266 0
267 00
268 0ERRORLEVEL
269 0
270 0%
271 P0
272 0S
273 P0S
274 ------------ Testing variable substrings ------------
275 q
276 qwe
277 er
278 @todo_wine@'ty'@or_broken@''
279 't'@or_broken@''
280 ert@or_broken@qwerty
281 e@or_broken@qwerty
282 ''@or_broken@'qwerty'
283 r@or_broken@qwerty
284 ------------ Testing variable substitution ------------
285 --- in FOR variables
286 "A B"
287 C
288 "A B"
289 C
290 'A B'@or_broken@''
291 'C'@or_broken@''
292 @pwd@\C D@or_broken@%~ff
293 @pwd@\E@or_broken@%~ff
294 @drive@
295 @drive@
296 @path@@or_broken@%~pd
297 @path@@or_broken@%~pd
298 L M
299 N
300 '.OOL'
301 '.TABC'
302 ''
303 @todo_wine@'@drive@@shortpath@R S'@or_broken@''
304 @todo_wine@'@drive@@shortpath@T'@or_broken@''
305 @todo_wine@'@drive@@shortpath@ABCDEFGHIJK.LMNOP'@or_broken@''
306 @todo_wine@''@or_broken@'%~ai'
307 @todo_wine@''@or_broken@'%~ai'
308 @todo_wine@'--a------'@or_broken@'%~ai'
309 @todo_wine@''@or_broken@'%~ti'
310 @todo_wine@''@or_broken@'%~ti'
311 @todo_wine@''@or_broken@'%~zi'
312 @todo_wine@''@or_broken@'%~zi'
313 @drive@@path@
314 @drive@@path@
315 @drive@
316 @drive@
317 @drive@
318 @drive@
319 ''
320 '.eh'
321 --- in parameters
322 "A B"
323 C
324 'A B'@or_broken@''
325 'C'@or_broken@''
326 @pwd@\C D
327 @pwd@\E
328 @drive@
329 @drive@
330 @path@
331 @path@
332 L M
333 N
334 '.OOL'
335 '.TABC'
336 ''
337 @todo_wine@'@drive@@shortpath@R S'@or_broken@''
338 @todo_wine@'@drive@@shortpath@T'@or_broken@''
339 @todo_wine@'@drive@@shortpath@ABCDEFGHIJK.LMNOP'@or_broken@''
340 @drive@@path@
341 @drive@@path@
342 @drive@
343 @drive@
344 @drive@
345 @drive@
346 ''
347 '.eh'@or_broken@''
348 ------------ Testing variable delayed expansion ------------
349 --- default mode (load-time expansion)
350 foo
351 !FOO!
352 foo
353 foo
354 --- runtime (delayed) expansion mode
355 foo
356 @todo_wine@foo@or_broken@!FOO!
357 foo
358 @todo_wine@bar@or_broken@foo
359 0
360 0@or_broken@1
361 foo
362 !FOO!
363 --- using /V cmd flag
364 foo
365 @todo_wine@foo@or_broken@!FOO!
366 foo
367 !FOO!
368 ------------ Testing conditional execution ------------
369 --- unconditional ampersand
370 foo1
371 bar2@space@
372 foo2
373 foobar deleted
374 --- on success conditional and
375 @todo_wine@foo3 not created
376 bar4@space@
377 foo4
378 --- on failure conditional or
379 foo5
380 foo6@space@
381 @todo_wine@------------ Testing cd ------------
382 singleFile
383 Current dir: @pwd@\foobar@or_broken@Current dir:@space@
384 @pwd@\foobar
385 @pwd@
386 @pwd@\foobar
387 @pwd@
388 @pwd@\foobar
389 @pwd@
390 @pwd@
391 @pwd@
392 @pwd@\foobar\bar bak
393 @pwd@\foobar\bar bak
394 @pwd@\foobar\bar bak
395 @pwd@\foobar\bar bak
396 @pwd@\foobar\bar bak
397 @pwd@
398 @pwd@\foobar
399 ------------ Testing type ------------
400
401 @pwd@>type foobaz@space@
402 bar
403
404 @pwd@>echo ---@space@
405 ---
406 bar
407 ---1
408 bar
409 ---2
410 bar
411 ---3
412 ------------ Testing NUL ------------
413 bar
414 bar
415 bar
416 NUL
417 @todo_wine@foo created
418 ------------ Testing if/else ------------
419 if/else should work with blocks
420 if seems to work
421 else seems to work
422 if seems not to detect /c as parameter
423 Testing case sensitivity with and without /i option
424 if seems to default to case sensitivity
425 if /i seems to work
426 if /I seems to work
427 Testing string comparisons
428 equal
429 non equal
430 non equal
431 equal
432 Testing tabs handling
433 doom
434 doom
435 doom
436 lol
437 quake
438 quake
439 quake
440 ------------ Testing for ------------
441 --- plain FOR
442 A
443 B
444 C
445 %I
446 %I
447 %I
448 %j
449 %j
450 %j
451 A
452 B
453 C
454 1
455 4
456 1
457 A
458 B
459 C
460 X
461 X2
462 X3
463 foo
464 M
465 X
466 M
467 N
468 O
469 `echo
470 A
471 B`
472 'echo
473 A
474 B'
475 "echo A B"
476 "A B"
477 C
478 --- imbricated FORs
479 @todo_wine@X Y
480 @todo_wine@X Y
481 @todo_wine@A C
482 @todo_wine@A D
483 @todo_wine@B C
484 @todo_wine@B D
485 @todo_wine@A C
486 @todo_wine@A D
487 @todo_wine@B C
488 @todo_wine@B D
489 --- basic wildcards
490 bazbaz
491 --- for /d
492 baz@space@
493 foo@space@
494 bar@space@
495 PASSED
496 xxx - Should be xxx
497 Expected second line
498 --- for /R
499 Plain directory enumeration
500 Plain directory enumeration from provided root
501 File enumeration
502 File enumeration from provided root
503 Mixed enumeration
504 Mixed enumeration from provided root
505 With duplicates enumeration
506 Strip missing wildcards, keep unwildcarded names
507 for /R passed
508 --- for /L
509 1
510 3
511 5
512 1
513 3
514 5
515 0
516 2
517 1
518 -1
519 ErrorLevel 0
520 ErrorLevel 0
521 1
522 2
523 3
524 4
525 1
526 3
527 4
528 3
529 2
530 1
531 4
532 2
533 0
534 1
535 1
536 -1
537 -1
538 1
539 3
540 --- for /a
541 ------ individual operations
542 0
543 @todo_wine@3
544 @todo_wine@-1
545 @todo_wine@3
546 @todo_wine@6
547 @todo_wine@10
548 @todo_wine@4
549 @todo_wine@4
550 @todo_wine@-4
551 0
552 @todo_wine@2
553 @todo_wine@2
554 @todo_wine@-2
555 @todo_wine@1
556 @todo_wine@4
557 0@or_broken@1073741824
558 0@or_broken@-1073741824
559 @todo_wine@-4
560 @todo_wine@9
561 @todo_wine@2
562 0
563 @todo_wine@-1
564 @todo_wine@-3
565 0
566 @todo_wine@1
567 @todo_wine@1
568 @todo_wine@4
569 @todo_wine@1
570 @todo_wine@5
571 @todo_wine@5
572 @todo_wine@7
573 @todo_wine@5
574 @todo_wine@5
575 @todo_wine@5
576 @todo_wine@4
577 @todo_wine@6
578 @todo_wine@1
579 ------ precedence and grouping
580 @todo_wine@4
581 @todo_wine@10
582 @todo_wine@18@or_broken@10
583 @todo_wine@2@or_broken@0
584 @todo_wine@2@or_broken@0
585 0@or_broken@4
586 @todo_wine@4
587 @todo_wine@3@or_broken@4
588 ------ octal and hexadecimal
589 @todo_wine@3@or_broken@4
590 @todo_wine@18
591 @todo_wine@18
592 @todo_wine@15
593 ------ variables
594 @todo_wine@3
595 @todo_wine@3@or_broken@foo not defined
596 @todo_wine@3@or_broken@0
597 @todo_wine@3@or_broken@0
598 @todo_wine@3@or_broken@0
599 @todo_wine@9@or_broken@0
600 0
601 @todo_wine@4@or_broken@0
602 @todo_wine@-7@or_broken@0
603 @todo_wine@-1@or_broken@0
604 @todo_wine@5@or_broken@0
605 @todo_wine@4@or_broken@0
606 @todo_wine@1@or_broken@0
607 0
608 @todo_wine@5@or_broken@0
609
610 --- for /F
611 ------ string argument
612 @todo_wine@a
613 @todo_wine@a
614 a
615 @todo_wine@a
616 @todo_wine@a
617 ------ fileset argument
618 --------- basic blank handling
619 a
620 a
621 a
622 a
623 a
624 b
625 --------- multi-line with empty lines
626 a
627 b
628 c
629 --------- multiple files
630 a
631 b
632 c
633 q
634 kkk
635 q
636 kkk
637 a
638 b
639 c
640 ------ eol option
641 @todo_wine@ad
642 @todo_wine@z@y
643 a|d
644 @todo_wine@no output
645 @todo_wine@no output
646 ------ delims option
647 @todo_wine@a
648 @todo_wine@a@space@
649 @todo_wine@a d
650 @todo_wine@a
651 @todo_wine@C r
652 foo bar baz
653 @todo_wine@c:\
654 ------ skip option
655 @todo_wine@c
656 @todo_wine@no output
657 @todo_wine@no output
658 ------------ Testing del /a ------------
659 not-r.test not found after delete, good
660 r.test found before delete, good
661 r.test not found after delete, good
662 ------------ Testing del /q ------------
663 del /q * succeeded on file1
664 del /q * succeeded on file2.dat
665 ------------ Testing del /s ------------
666 ------------ Testing rename ------------
667 --- ren and rename are synonymous
668 foo renamed to bar
669 bar renamed to foo
670 --- name collision
671 foo
672 bar
673 --- rename read-only files
674 read-only file renamed
675 --- rename directories
676 dir renamed
677 read-only dir renamed
678 --- rename in other directory
679 rename impossible in other directory
680 original file still present
681 ------------ Testing move ------------
682 --- file move
683 file move succeeded
684 @todo_wine@file move with overwrite succeeded@or_broken@file overwrite impossible!
685 @todo_wine@bar@or_broken@baz
686 read-only files are moveable
687 file moved in subdirectory
688 @todo_wine@moving a file to itself is a no-op@or_broken@moving a file to itself should be a no-op!
689 @todo_wine@ErrorLevel: 0@or_broken@ErrorLevel: 1
690 --- directory move
691 simple directory move succeeded
692 moving a directory to itself gives error; errlevel 1
693 ------ dir in dir move
694 foo
695 bar2
696 foo2
697 ------------ Testing mkdir ------------
698 --- md and mkdir are synonymous
699 0
700 0
701 --- creating an already existing directory/file must fail
702 1
703 1
704 --- multilevel path creation
705 0
706 0
707 0
708 0
709 0
710 1
711 0
712 0
713 --- trailing backslashes
714 0
715 dir created
716 0
717 --- invalid chars
718 mkdir ? gives errorlevel 1
719 mkdir ?\foo gives errorlevel 1
720 mkdir foo\? gives errorlevel 1
721 ok, foo created
722 mkdir foo\bar\? gives errorlevel 1
723 ok, foo\bar created
724 --- multiple directories at once
725 foo created
726 bar created
727 foobar created
728 bar\baz created
729 bazbaz created
730 zabzab created
731 mkdir foo\* errorlevel 1
732 ok, foo created
733 ------------ Testing rmdir ------------
734 0
735 dir removed
736 0
737 dir removed
738 0
739 0
740 file not removed
741 0
742 non-empty dir not removed
743 0
744 non-empty dir not removed
745 recursive rmdir succeeded
746 recursive rmdir succeeded
747 foo removed
748 bar removed
749 foobar removed
750 bar\baz removed
751 ------------ Testing pushd/popd ------------
752 @pwd@
753 --- popd is no-op when dir stack is empty
754 @pwd@
755 --- pushing non-existing dir
756 @pwd@
757 --- basic behaviour
758 @pwd@\foobar
759 @pwd@
760 @pwd@\foobar\baz
761 @pwd@\foobar
762 @pwd@\foobar
763 @pwd@
764 @pwd@\foobar
765 @pwd@
766 ------------ Testing attrib ------------
767 A            @pwd@\foobar\foo@or_broken@A          @pwd@\foobar\foo@or_broken@A       I    @pwd@\foobar\foo
768 --- read-only attribute
769 A    R       @pwd@\foobar\foo@or_broken@A    R     @pwd@\foobar\foo@or_broken@A    R  I    @pwd@\foobar\foo
770 foo
771 foo original contents
772 Read-only file not deleted
773 Read-only file forcibly deleted
774 --- recursive behaviour
775 @todo_wine@A            @pwd@\foobar\baz\level2@or_broken@A          @pwd@\foobar\baz\level2@or_broken@A       I    @pwd@\foobar\baz\level2
776 @todo_wine@A    R       @pwd@\foobar\level1@or_broken@A    R     @pwd@\foobar\level1@or_broken@A    R  I    @pwd@\foobar\level1
777 @todo_wine@A    R       @pwd@\foobar\baz\level2@or_broken@A    R     @pwd@\foobar\baz\level2@or_broken@A    R  I    @pwd@\foobar\baz\level2
778 A            @pwd@\foobar\bar@or_broken@A          @pwd@\foobar\bar@or_broken@A       I    @pwd@\foobar\bar
779 --- folders processing
780              @pwd@\foobar@or_broken@           @pwd@\foobar@or_broken@        I    @pwd@\foobar
781 @todo_wine@     R       @pwd@\foobar\baz@or_broken@     R     @pwd@\foobar\baz@or_broken@           @pwd@\foobar\baz@or_broken@     R  I    @pwd@\foobar\baz
782 @todo_wine@A            @pwd@\foobar\baz\toto@or_broken@A          @pwd@\foobar\baz\toto@or_broken@A       I    @pwd@\foobar\baz\toto
783 toto
784 lulu
785 file created in read-only dir
786 ------------ Testing assoc ------------
787 --- setting association
788 ---
789 .foo=bar
790 .foo=bar
791 +++
792 .foo=bar
793 --- resetting association
794 ---
795 +++
796 ---
797 ------------ Testing ftype ------------
798 --- setting association
799 ---
800 footype=foo_opencmd
801 .foo=footype
802 footype=foo_opencmd
803 +++
804 footype=foo_opencmd
805 --- resetting association
806 @todo_wine@original value@or_broken@buggyXP@or_broken@!FOO!
807 ------------ Testing CALL ------------
808 --- external script
809 foo@space@
810 foo 8
811 foo@space@@space@
812 foo bar@space@
813 foo ""@space@
814 "" bar@space@
815 foo ''@space@
816 '' bar@space@
817 --- internal routines
818 bar :testRoutine
819 foo@space@
820 foo bar
821 foo ""
822 "" bar
823 foo ''
824 '' bar
825 --- with builtins
826 @todo_wine@0
827 @todo_wine@foo created
828 @todo_wine@Should expand foobaz
829 @todo_wine@batfile
830 @todo_wine@robinfile
831 @todo_wine@1
832 @todo_wine@1
833 non-builtin dir
834 ------------ Testing SHIFT ------------
835 'p1' 'p2' 'p3' 'p4' 'p5'
836 'p2' 'p3' 'p4' 'p5' ''
837 'p3' 'p4' 'p5' '' ''
838 'p3' 'p5' '' '' ''
839 'p3' 'p5' '' '' ''
840 'p5' '' '' '' ''
841 ------------ Testing cmd invocation ------------
842 --- a batch file can delete itself
843 file correctly deleted
844 --- a batch file can alter itself
845 @todo_wine@bar
846 ------------ Testing setlocal/endlocal ------------
847 --- enable/disable extensions
848 @todo_wine@ErrLev:@space@
849 ErrLev: 0
850 ErrLev: 0
851 @todo_wine@ErrLev:@space@@or_broken@ErrLev: 0
852 ErrLev: 0
853 --- setlocal with corresponding endlocal
854 globalval
855 localval
856 globalval
857 globalval
858 --- setlocal with no corresponding endlocal
859 globalval
860 localval
861 @todo_wine@globalval
862 ------------ Testing Errorlevel ------------
863 9009
864 1
865 errorlevel just right, good
866 errorlevel with leading zero just right, good
867 errorlevel with negative number OK
868 abc0def@or_broken@abc1def
869 errorlevel zero, good@or_broken@errorlevel nonzero, bad
870 7 should be 7
871 7 should still be 7
872 ------------ Testing GOTO ------------
873 goto with no leading space worked
874 goto with a leading space worked
875 goto with a leading tab worked
876 goto with a following space worked
877 ------------ Testing PATH ------------
878 PATH=original
879 PATH=try2
880 PATH=try3
881 ------------ Testing combined CALLs/GOTOs ------------
882 world
883 cheball
884 barbare
885 bar
886 foo
887 baz
888 cheball
889 barbare