cmd: for /l with zero iterations failed to skip its commands.
[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 @todo_wine@@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 @todo_wine@@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 ------------ Testing 'echo' [OFF] ------------
80 word
81 'singlequotedword'
82 "doublequotedword"
83 at-echoed-word
84 "/?"
85
86 .
87 word
88 .word
89
90 :
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
111
112 @todo_wine@@pwd@>if 1 == 1 echo foo@space@
113 foo
114
115 @todo_wine@@pwd@>if 1 == 1@space@
116 bar
117 foo2
118 bar2
119 ------------ Testing rem ------------
120
121 @pwd@>rem Hello@space@
122
123 @pwd@>rem  Hello@space@
124
125 @pwd@>rem   Hello || foo@space@
126
127 @pwd@>rem echo lol@space@
128
129 @pwd@>rem echo foo & echo bar@space@
130
131 @pwd@>rem @tab@  Hello@space@
132
133 @pwd@>rem@tab@  Hello@space@
134
135 @pwd@>rem@tab@echo foo & echo bar@space@
136 ------------ Testing redirection operators ------------
137 --- stdout redirection
138 foo
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
149 foo
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
175 baz
176 foo@space@
177 baz
178 foo
179 A
180 B
181 C
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
187 baz
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' ------------
203 1
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
211  bar
212 @todo_wine@FOOBAR= bar
213 @todo_wine@FOOBAR =  baz2
214 FOOBAR =  baz2
215 FOOBAR not defined
216 1
217 bar
218 foobar
219 FOO not defined
220 BAZ=bazbaz
221 bazbaz
222 set "FOO=bar" should not include the quotes in the variable value
223 bar
224 foo
225 ''
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@
233 %
234 P
235 P
236 S
237 P
238 PS
239 ERRORLEVEL
240 0
241 00
242 0ERRORLEVEL
243 0
244 0%
245 P0
246 0S
247 P0S
248 ------------ Testing variable substrings ------------
249 q
250 qwe
251 er
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"
261 C
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
270 L M
271 N
272 '.OOL'
273 '.TABC'
274 ''
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@
291 ''
292 '.eh'
293 --- in parameters
294 @todo_wine@"A B"
295 C
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
305 N
306 @todo_wine@'.OOL'
307 '.TABC'
308 ''
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@
318 ''
319 '.eh'@or_broken@''
320 ------------ Testing variable delayed expansion ------------
321 --- default mode (load-time expansion)
322 foo
323 !FOO!
324 foo
325 foo
326 --- runtime (delayed) expansion mode
327 foo
328 @todo_wine@foo@or_broken@!FOO!
329 foo
330 @todo_wine@bar@or_broken@foo
331 0
332 0@or_broken@1
333 foo
334 !FOO!
335 --- using /V cmd flag
336 foo
337 @todo_wine@foo@or_broken@!FOO!
338 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 ------------
370
371 @pwd@>type foobaz@space@
372 bar
373
374 @pwd@>echo ---@space@
375 ---
376 bar
377 ---
378 ------------ Testing NUL ------------
379 bar
380 bar
381 bar
382 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
402 lol
403 quake
404 quake
405 quake
406 ------------ Testing for ------------
407 --- plain FOR
408 A
409 B
410 C
411 %I
412 %I
413 %I
414 %j
415 %j
416 %j
417 A
418 B
419 C
420 1
421 4
422 1
423 A
424 B
425 C
426 X
427 X2
428 X3
429 foo
430 M
431 X
432 M
433 N
434 O
435 `echo
436 A
437 B`
438 'echo
439 A
440 B'
441 @todo_wine@"echo A B"
442 @todo_wine@"A B"
443 C
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
458 baz
459 foo
460 bar
461 --- for /L
462 1
463 3
464 5
465 1
466 3
467 5
468 0
469 2
470 1
471 -1
472 ErrorLevel 0
473 ErrorLevel 0
474 1
475 2
476 3
477 4
478 1
479 3
480 4
481 3
482 2
483 1
484 4
485 2
486 0
487 1
488 1
489 -1
490 -1
491 1
492 3
493 --- for /a
494 ------ individual operations
495 0
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
504 0
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
515 0
516 @todo_wine@-1
517 @todo_wine@-3
518 0
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
553 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
560 0
561 @todo_wine@5@or_broken@0
562
563 --- for /F
564 ------ string argument
565 a
566 a
567 a
568 a
569 a
570 ------ fileset argument
571 --------- basic blank handling
572 a
573 a
574 a
575 a
576 a
577 b
578 --------- multi-line with empty lines
579 a
580 b
581 c
582 --------- multiple files
583 a
584 b
585 c
586 q
587 kkk
588 q
589 kkk
590 a
591 b
592 c
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
624 foo
625 bar
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
647 foo
648 bar2
649 foo2
650 ------------ Testing mkdir ------------
651 --- md and mkdir are synonymous
652 0
653 0
654 --- creating an already existing directory/file must fail
655 1
656 1
657 --- multilevel path creation
658 0
659 0
660 0
661 0
662 0
663 1
664 0
665 0
666 --- trailing backslashes
667 0
668 dir created
669 0
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 ------------
685 0
686 dir removed
687 0
688 dir removed
689 0
690 0
691 file not removed
692 0
693 non-empty dir not removed
694 0
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
721 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
739 ---
740 .foo=bar
741 .foo=bar
742 +++
743 .foo=bar
744 --- resetting association
745 ---
746 +++
747 ---
748 ------------ Testing ftype ------------
749 --- setting association
750 ---
751 footype=foo_opencmd
752 .foo=footype
753 footype=foo_opencmd
754 +++
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
815 1
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
832 bar
833 foo
834 baz
835 cheball
836 barbare