cmd: for /l with zero iterations failed to skip its commands.
[wine.git] / programs / cmd / tests / test_builtins.cmd.exp
blobc444be6d89bab4302e593be5ed3a9f03df290e8b
2 @pwd@>echo Tests for cmd's builtin commands@space@
3 Tests for cmd's builtin commands
5 @pwd@>echo ------------ Testing 'echo' [ON] ------------@space@
6 ------------ Testing 'echo' [ON] ------------
8 @pwd@>echo word@space@
9 word
11 @pwd@>echo 'singlequotedword'@space@
12 'singlequotedword'
14 @pwd@>echo "doublequotedword"@space@
15 "doublequotedword"
16 at-echoed-word
18 @pwd@>echo "/?"@space@
19 "/?"
21 @pwd@>echo.
24 @pwd@>echo .@space@
27 @pwd@>echo.word
28 word
30 @pwd@>echo .word@space@
31 .word
33 @pwd@>echo:
36 @pwd@>echo :@space@
39 @pwd@>echo:word
40 word
42 @pwd@>echo :word@space@
43 :word
45 @pwd@>echo off now@space@
46 off now
48 @pwd@>echo word@space@@space@
49 word@space@
51 @pwd@>echo word@space@@space@@space@
52 word@space@@space@
54 @todo_wine@@pwd@>echo word@space@
55 word
57 @pwd@>echo@tab@word@space@
58 word
60 @pwd@>echo@tab@word@space@@tab@@space@
61 word@space@@tab@
63 @pwd@>echo@tab@word@tab@@space@@space@
64 word@tab@@space@
66 @todo_wine@@pwd@>echo word@space@
67 word
69 @pwd@>echo@space@@tab@word@space@
70 @tab@word
72 @pwd@>echo@space@@space@@tab@word@space@
73 @space@@tab@word
75 @pwd@>echo@tab@@tab@word@space@
76 @tab@word
78 @pwd@>echo @tab@ on @space@@space@
79 ------------ Testing 'echo' [OFF] ------------
80 word
81 'singlequotedword'
82 "doublequotedword"
83 at-echoed-word
84 "/?"
87 word
88 .word
91 word
92 :word
93 on again
94 word@space@
95 word@space@@space@
96 word
97 word
98 word@space@@tab@
99 word@tab@@space@
100 word
101 @tab@word
102 @space@@tab@word
103 @tab@word
104 ------------ Testing mixed echo modes ------------
105 @echo on
106 if 1==1 echo foo
107 if 1==1 @echo bar
108 @echo off
109 if 1==1 echo foo2
110 if 1==1 @echo bar2
112 @todo_wine@@pwd@>if 1 == 1 echo foo@space@
115 @todo_wine@@pwd@>if 1 == 1@space@
117 foo2
118 bar2
119 ------------ Testing rem ------------
121 @pwd@>rem Hello@space@
123 @pwd@>rem Hello@space@
125 @pwd@>rem Hello || foo@space@
127 @pwd@>rem echo lol@space@
129 @pwd@>rem echo foo & echo bar@space@
131 @pwd@>rem @tab@ Hello@space@
133 @pwd@>rem@tab@ Hello@space@
135 @pwd@>rem@tab@echo foo & echo bar@space@
136 ------------ Testing redirection operators ------------
137 --- stdout redirection
139 foo@space@
140 foo@tab@
141 foo@space@
142 foo@tab@
143 foo7@space@@or_broken@foo@tab@
144 foo9@space@@or_broken@foo@tab@
145 foo1
146 foo11
147 foo12
148 --- stdout appending
150 foo@space@
151 foob@space@
152 foob@space@
153 fooc@space@
154 foob@space@
155 fooc@space@
156 food1
157 foob@space@
158 fooc@space@
159 food1
160 food2
161 food21
162 @todo_wine@foo7@space@@space@@or_broken@not supported@space@
163 @todo_wine@foo@or_broken@not supported
164 --- redirections within IF statements
165 @todo_wine@foo1
166 -----
167 foo2
168 foo3
169 file does not exist, ok
170 foo4
171 baz5
172 baz6@space@
173 baz7
174 baz8
176 foo@space@
182 ------------ Testing circumflex escape character ------------
183 @todo_wine@hello, world
184 @todo_wine@hello, world
185 @todo_wine@hell^o, world
186 @todo_wine@hell^o, world
188 @todo_wine@baz
189 @todo_wine@foo | echo bar
190 @todo_wine@foo & echo bar
191 @todo_wine@bak &
192 baz@space@
193 0@or_broken@1
194 @todo_wine@foo > foo
195 @todo_wine@<
196 @todo_wine@ffoof
197 @todo_wine@FOO=bar | baz
198 @todo_wine@0
199 @todo_wine@FOO=bar ^| baz
200 @todo_wine@bar | baz
201 @todo_wine@0
202 ------------ Testing 'set' ------------
204 @todo_wine@0
205 FOOBAR not defined
206 @todo_wine@ baz
207 FOOBAR = baz
208 @todo_wine@0
209 @todo_wine@ baz2
210 @todo_wine@0
212 @todo_wine@FOOBAR= bar
213 @todo_wine@FOOBAR = baz2
214 FOOBAR = baz2
215 FOOBAR not defined
218 foobar
219 FOO not defined
220 BAZ=bazbaz
221 bazbaz
222 set "FOO=bar" should not include the quotes in the variable value
226 'foo@space@'
227 'foo@tab@'
228 ------------ Testing variable expansion ------------
229 ~dp0 should be directory containing batch file
230 @pwd@\
231 @pwd@\
232 CD value @pwd@@or_broken@CD value@space@
239 ERRORLEVEL
242 0ERRORLEVEL
248 ------------ Testing variable substrings ------------
252 @todo_wine@'ty'@or_broken@''
253 't'@or_broken@''
254 ert@or_broken@qwerty
255 e@or_broken@qwerty
256 ''@or_broken@'qwerty'
257 r@or_broken@qwerty
258 ------------ Testing variable substitution ------------
259 --- in FOR variables
260 @todo_wine@"A B"
262 'A B'@or_broken@''
263 'C'@or_broken@''
264 @pwd@\C D@or_broken@%~ff
265 @pwd@\E@or_broken@%~ff
266 @drive@
267 @drive@
268 @path@@or_broken@%~pd
269 @path@@or_broken@%~pd
272 '.OOL'
273 '.TABC'
275 @todo_wine@'@drive@@shortpath@R S'@or_broken@''
276 @todo_wine@'@drive@@shortpath@T'@or_broken@''
277 @todo_wine@'@drive@@shortpath@ABCDEFGHIJK.LMNOP'@or_broken@''
278 @todo_wine@''@or_broken@'%~ai'
279 @todo_wine@''@or_broken@'%~ai'
280 @todo_wine@'--a------'@or_broken@'%~ai'
281 @todo_wine@''@or_broken@'%~ti'
282 @todo_wine@''@or_broken@'%~ti'
283 @todo_wine@''@or_broken@'%~zi'
284 @todo_wine@''@or_broken@'%~zi'
285 @drive@@path@
286 @drive@@path@
287 @drive@
288 @drive@
289 @drive@
290 @drive@
292 '.eh'
293 --- in parameters
294 @todo_wine@"A B"
296 @todo_wine@'A B'@or_broken@''
297 'C'@or_broken@''
298 @todo_wine@@pwd@\C D
299 @pwd@\E
300 @drive@
301 @drive@
302 @path@
303 @path@
304 @todo_wine@L M
306 @todo_wine@'.OOL'
307 '.TABC'
309 @todo_wine@'@drive@@shortpath@R S'@or_broken@''
310 @todo_wine@'@drive@@shortpath@T'@or_broken@''
311 @todo_wine@'@drive@@shortpath@ABCDEFGHIJK.LMNOP'@or_broken@''
312 @drive@@path@
313 @drive@@path@
314 @drive@
315 @drive@
316 @drive@
317 @drive@
319 '.eh'@or_broken@''
320 ------------ Testing variable delayed expansion ------------
321 --- default mode (load-time expansion)
323 !FOO!
326 --- runtime (delayed) expansion mode
328 @todo_wine@foo@or_broken@!FOO!
330 @todo_wine@bar@or_broken@foo
332 0@or_broken@1
334 !FOO!
335 --- using /V cmd flag
337 @todo_wine@foo@or_broken@!FOO!
339 !FOO!
340 ------------ Testing conditional execution ------------
341 --- unconditional ampersand
342 foo1
343 bar2@space@
344 foo2
345 foobar deleted
346 --- on success conditional and
347 @todo_wine@foo3 not created
348 bar4@space@
349 foo4
350 --- on failure conditional or
351 foo5
352 foo6@space@
353 @todo_wine@------------ Testing cd ------------
354 singleFile
355 Current dir: @pwd@\foobar@or_broken@Current dir:@space@
356 @pwd@\foobar
357 @pwd@
358 @pwd@\foobar
359 @pwd@
360 @pwd@\foobar
361 @pwd@
362 @pwd@
363 @pwd@
364 @pwd@\foobar\bar bak
365 @pwd@\foobar\bar bak
366 @pwd@\foobar\bar bak
367 @pwd@
368 @pwd@\foobar
369 ------------ Testing type ------------
371 @pwd@>type foobaz@space@
374 @pwd@>echo ---@space@
378 ------------ Testing NUL ------------
383 @todo_wine@foo created
384 ------------ Testing if/else ------------
385 if/else should work with blocks
386 if seems to work
387 else seems to work
388 if seems not to detect /c as parameter
389 Testing case sensitivity with and without /i option
390 if seems to default to case sensitivity
391 if /i seems to work
392 if /I seems to work
393 Testing string comparisons
394 equal
395 non equal
396 non equal
397 equal
398 Testing tabs handling
399 doom
400 doom
401 doom
403 quake
404 quake
405 quake
406 ------------ Testing for ------------
407 --- plain FOR
435 `echo
438 'echo
441 @todo_wine@"echo A B"
442 @todo_wine@"A B"
444 --- imbricated FORs
445 @todo_wine@X Y
446 @todo_wine@X Y
447 @todo_wine@A C
448 @todo_wine@A D
449 @todo_wine@B C
450 @todo_wine@B D
451 @todo_wine@A C
452 @todo_wine@A D
453 @todo_wine@B C
454 @todo_wine@B D
455 --- basic wildcards
456 bazbaz
457 --- for /d
461 --- for /L
472 ErrorLevel 0
473 ErrorLevel 0
493 --- for /a
494 ------ individual operations
496 @todo_wine@3
497 @todo_wine@-1
498 @todo_wine@3
499 @todo_wine@6
500 @todo_wine@10
501 @todo_wine@4
502 @todo_wine@4
503 @todo_wine@-4
505 @todo_wine@2
506 @todo_wine@2
507 @todo_wine@-2
508 @todo_wine@1
509 @todo_wine@4
510 0@or_broken@1073741824
511 0@or_broken@-1073741824
512 @todo_wine@-4
513 @todo_wine@9
514 @todo_wine@2
516 @todo_wine@-1
517 @todo_wine@-3
519 @todo_wine@1
520 @todo_wine@1
521 @todo_wine@4
522 @todo_wine@1
523 @todo_wine@5
524 @todo_wine@5
525 @todo_wine@7
526 @todo_wine@5
527 @todo_wine@5
528 @todo_wine@5
529 @todo_wine@4
530 @todo_wine@6
531 @todo_wine@1
532 ------ precedence and grouping
533 @todo_wine@4
534 @todo_wine@10
535 @todo_wine@18@or_broken@10
536 @todo_wine@2@or_broken@0
537 @todo_wine@2@or_broken@0
538 0@or_broken@4
539 @todo_wine@4
540 @todo_wine@3@or_broken@4
541 ------ octal and hexadecimal
542 @todo_wine@3@or_broken@4
543 @todo_wine@18
544 @todo_wine@18
545 @todo_wine@15
546 ------ variables
547 @todo_wine@3
548 @todo_wine@3@or_broken@foo not defined
549 @todo_wine@3@or_broken@0
550 @todo_wine@3@or_broken@0
551 @todo_wine@3@or_broken@0
552 @todo_wine@9@or_broken@0
554 @todo_wine@4@or_broken@0
555 @todo_wine@-7@or_broken@0
556 @todo_wine@-1@or_broken@0
557 @todo_wine@5@or_broken@0
558 @todo_wine@4@or_broken@0
559 @todo_wine@1@or_broken@0
561 @todo_wine@5@or_broken@0
563 --- for /F
564 ------ string argument
570 ------ fileset argument
571 --------- basic blank handling
578 --------- multi-line with empty lines
582 --------- multiple files
593 ------ eol option
594 @todo_wine@ad
595 @todo_wine@z@y
596 @todo_wine@a|d
597 @todo_wine@no output
598 @todo_wine@no output
599 ------ delims option
600 @todo_wine@a
601 @todo_wine@a@space@
602 @todo_wine@a d
603 @todo_wine@a
604 @todo_wine@C r
605 @todo_wine@foo bar baz
606 @todo_wine@c:\
607 ------ skip option
608 @todo_wine@c
609 @todo_wine@no output
610 @todo_wine@no output
611 ------------ Testing del /a ------------
612 not-r.test not found after delete, good
613 r.test found before delete, good
614 r.test not found after delete, good
615 ------------ Testing del /q ------------
616 del /q * succeeded on file1
617 del /q * succeeded on file2.dat
618 ------------ Testing del /s ------------
619 ------------ Testing rename ------------
620 --- ren and rename are synonymous
621 foo renamed to bar
622 bar renamed to foo
623 --- name collision
626 --- rename read-only files
627 read-only file renamed
628 --- rename directories
629 dir renamed
630 read-only dir renamed
631 --- rename in other directory
632 @todo_wine@rename impossible in other directory
633 @todo_wine@original file still present
634 ------------ Testing move ------------
635 --- file move
636 file move succeeded
637 @todo_wine@file move with overwrite succeeded@or_broken@file overwrite impossible!
638 @todo_wine@bar@or_broken@baz
639 read-only files are moveable
640 file moved in subdirectory
641 @todo_wine@moving a file to itself is a no-op@or_broken@moving a file to itself should be a no-op!
642 @todo_wine@ErrorLevel: 0@or_broken@ErrorLevel: 1
643 --- directory move
644 simple directory move succeeded
645 moving a directory to itself gives error; errlevel 1
646 ------ dir in dir move
648 bar2
649 foo2
650 ------------ Testing mkdir ------------
651 --- md and mkdir are synonymous
654 --- creating an already existing directory/file must fail
657 --- multilevel path creation
666 --- trailing backslashes
668 dir created
670 --- invalid chars
671 mkdir ? gives errorlevel 1
672 mkdir ?\foo gives errorlevel 1
673 mkdir foo\? gives errorlevel 1
674 ok, foo created
675 mkdir foo\bar\? gives errorlevel 1
676 ok, foo\bar created
677 --- multiple directories at once
678 foo created
679 bar created
680 foobar created
681 bar\baz created
682 mkdir foo\* errorlevel 1
683 ok, foo created
684 ------------ Testing rmdir ------------
686 dir removed
688 dir removed
691 file not removed
693 non-empty dir not removed
695 non-empty dir not removed
696 recursive rmdir succeeded
697 recursive rmdir succeeded
698 foo removed
699 bar removed
700 foobar removed
701 bar\baz removed
702 ------------ Testing pushd/popd ------------
703 @pwd@
704 --- popd is no-op when dir stack is empty
705 @pwd@
706 --- pushing non-existing dir
707 @pwd@
708 --- basic behaviour
709 @pwd@\foobar
710 @pwd@
711 @pwd@\foobar\baz
712 @pwd@\foobar
713 @pwd@\foobar
714 @pwd@
715 @pwd@\foobar
716 @pwd@
717 ------------ Testing attrib ------------
718 A @pwd@\foobar\foo@or_broken@A @pwd@\foobar\foo@or_broken@A I @pwd@\foobar\foo
719 --- read-only attribute
720 A R @pwd@\foobar\foo@or_broken@A R @pwd@\foobar\foo@or_broken@A R I @pwd@\foobar\foo
722 foo original contents
723 Read-only file not deleted
724 Read-only file forcibly deleted
725 --- recursive behaviour
726 @todo_wine@A @pwd@\foobar\baz\level2@or_broken@A @pwd@\foobar\baz\level2@or_broken@A I @pwd@\foobar\baz\level2
727 @todo_wine@A R @pwd@\foobar\level1@or_broken@A R @pwd@\foobar\level1@or_broken@A R I @pwd@\foobar\level1
728 @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
729 A @pwd@\foobar\bar@or_broken@A @pwd@\foobar\bar@or_broken@A I @pwd@\foobar\bar
730 --- folders processing
731 @pwd@\foobar@or_broken@ @pwd@\foobar@or_broken@ I @pwd@\foobar
732 @todo_wine@ R @pwd@\foobar\baz@or_broken@ R @pwd@\foobar\baz@or_broken@ @pwd@\foobar\baz@or_broken@ R I @pwd@\foobar\baz
733 @todo_wine@A @pwd@\foobar\baz\toto@or_broken@A @pwd@\foobar\baz\toto@or_broken@A I @pwd@\foobar\baz\toto
734 toto
735 lulu
736 file created in read-only dir
737 ------------ Testing assoc ------------
738 --- setting association
740 .foo=bar
741 .foo=bar
743 .foo=bar
744 --- resetting association
748 ------------ Testing ftype ------------
749 --- setting association
751 footype=foo_opencmd
752 .foo=footype
753 footype=foo_opencmd
755 footype=foo_opencmd
756 --- resetting association
757 @todo_wine@original value@or_broken@buggyXP@or_broken@!FOO!
758 ------------ Testing CALL ------------
759 --- external script
760 foo@space@
761 foo 8
762 foo@space@@space@
763 foo bar@space@
764 @todo_wine@foo ""@space@
765 @todo_wine@"" bar@space@
766 foo ''@space@
767 '' bar@space@
768 --- internal routines
769 bar :testRoutine
770 foo@space@
771 foo bar
772 @todo_wine@foo ""
773 @todo_wine@"" bar
774 foo ''
775 '' bar
776 --- with builtins
777 @todo_wine@0
778 @todo_wine@foo created
779 @todo_wine@Should expand foobaz
780 @todo_wine@batfile
781 @todo_wine@robinfile
782 @todo_wine@1
783 @todo_wine@1
784 non-builtin dir
785 ------------ Testing SHIFT ------------
786 'p1' 'p2' 'p3' 'p4' 'p5'
787 'p2' 'p3' 'p4' 'p5' ''
788 'p3' 'p4' 'p5' '' ''
789 'p3' 'p5' '' '' ''
790 'p3' 'p5' '' '' ''
791 'p5' '' '' '' ''
792 ------------ Testing cmd invocation ------------
793 --- a batch file can delete itself
794 file correctly deleted
795 --- a batch file can alter itself
796 @todo_wine@bar
797 ------------ Testing setlocal/endlocal ------------
798 --- enable/disable extensions
799 @todo_wine@ErrLev:@space@
800 ErrLev: 0
801 ErrLev: 0
802 @todo_wine@ErrLev:@space@@or_broken@ErrLev: 0
803 ErrLev: 0
804 --- setlocal with corresponding endlocal
805 globalval
806 localval
807 globalval
808 globalval
809 --- setlocal with no corresponding endlocal
810 globalval
811 localval
812 @todo_wine@globalval
813 ------------ Testing Errorlevel ------------
814 9009
816 errorlevel just right, good
817 errorlevel with leading zero just right, good
818 errorlevel with negative number OK
819 abc0def@or_broken@abc1def
820 errorlevel zero, good@or_broken@errorlevel nonzero, bad
821 7 should be 7
822 7 should still be 7
823 ------------ Testing GOTO ------------
824 goto with no leading space worked
825 goto with a leading space worked
826 goto with a leading tab worked
827 goto with a following space worked
828 ------------ Testing combined CALLs/GOTOs ------------
829 world
830 cheball
831 barbare
835 cheball
836 barbare