cmd: Convert wcmd_for to use WCMD_parameter.
[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 /L
499 1
500 3
501 5
502 1
503 3
504 5
505 0
506 2
507 1
508 -1
509 ErrorLevel 0
510 ErrorLevel 0
511 1
512 2
513 3
514 4
515 1
516 3
517 4
518 3
519 2
520 1
521 4
522 2
523 0
524 1
525 1
526 -1
527 -1
528 1
529 3
530 --- for /a
531 ------ individual operations
532 0
533 @todo_wine@3
534 @todo_wine@-1
535 @todo_wine@3
536 @todo_wine@6
537 @todo_wine@10
538 @todo_wine@4
539 @todo_wine@4
540 @todo_wine@-4
541 0
542 @todo_wine@2
543 @todo_wine@2
544 @todo_wine@-2
545 @todo_wine@1
546 @todo_wine@4
547 0@or_broken@1073741824
548 0@or_broken@-1073741824
549 @todo_wine@-4
550 @todo_wine@9
551 @todo_wine@2
552 0
553 @todo_wine@-1
554 @todo_wine@-3
555 0
556 @todo_wine@1
557 @todo_wine@1
558 @todo_wine@4
559 @todo_wine@1
560 @todo_wine@5
561 @todo_wine@5
562 @todo_wine@7
563 @todo_wine@5
564 @todo_wine@5
565 @todo_wine@5
566 @todo_wine@4
567 @todo_wine@6
568 @todo_wine@1
569 ------ precedence and grouping
570 @todo_wine@4
571 @todo_wine@10
572 @todo_wine@18@or_broken@10
573 @todo_wine@2@or_broken@0
574 @todo_wine@2@or_broken@0
575 0@or_broken@4
576 @todo_wine@4
577 @todo_wine@3@or_broken@4
578 ------ octal and hexadecimal
579 @todo_wine@3@or_broken@4
580 @todo_wine@18
581 @todo_wine@18
582 @todo_wine@15
583 ------ variables
584 @todo_wine@3
585 @todo_wine@3@or_broken@foo not defined
586 @todo_wine@3@or_broken@0
587 @todo_wine@3@or_broken@0
588 @todo_wine@3@or_broken@0
589 @todo_wine@9@or_broken@0
590 0
591 @todo_wine@4@or_broken@0
592 @todo_wine@-7@or_broken@0
593 @todo_wine@-1@or_broken@0
594 @todo_wine@5@or_broken@0
595 @todo_wine@4@or_broken@0
596 @todo_wine@1@or_broken@0
597 0
598 @todo_wine@5@or_broken@0
599
600 --- for /F
601 ------ string argument
602 @todo_wine@a
603 @todo_wine@a
604 a
605 @todo_wine@a
606 @todo_wine@a
607 ------ fileset argument
608 --------- basic blank handling
609 a
610 a
611 a
612 a
613 a
614 b
615 --------- multi-line with empty lines
616 a
617 b
618 c
619 --------- multiple files
620 a
621 b
622 c
623 q
624 kkk
625 q
626 kkk
627 a
628 b
629 c
630 ------ eol option
631 @todo_wine@ad
632 @todo_wine@z@y
633 a|d
634 @todo_wine@no output
635 @todo_wine@no output
636 ------ delims option
637 @todo_wine@a
638 @todo_wine@a@space@
639 @todo_wine@a d
640 @todo_wine@a
641 @todo_wine@C r
642 foo bar baz
643 @todo_wine@c:\
644 ------ skip option
645 @todo_wine@c
646 @todo_wine@no output
647 @todo_wine@no output
648 ------------ Testing del /a ------------
649 not-r.test not found after delete, good
650 r.test found before delete, good
651 r.test not found after delete, good
652 ------------ Testing del /q ------------
653 del /q * succeeded on file1
654 del /q * succeeded on file2.dat
655 ------------ Testing del /s ------------
656 ------------ Testing rename ------------
657 --- ren and rename are synonymous
658 foo renamed to bar
659 bar renamed to foo
660 --- name collision
661 foo
662 bar
663 --- rename read-only files
664 read-only file renamed
665 --- rename directories
666 dir renamed
667 read-only dir renamed
668 --- rename in other directory
669 rename impossible in other directory
670 original file still present
671 ------------ Testing move ------------
672 --- file move
673 file move succeeded
674 @todo_wine@file move with overwrite succeeded@or_broken@file overwrite impossible!
675 @todo_wine@bar@or_broken@baz
676 read-only files are moveable
677 file moved in subdirectory
678 @todo_wine@moving a file to itself is a no-op@or_broken@moving a file to itself should be a no-op!
679 @todo_wine@ErrorLevel: 0@or_broken@ErrorLevel: 1
680 --- directory move
681 simple directory move succeeded
682 moving a directory to itself gives error; errlevel 1
683 ------ dir in dir move
684 foo
685 bar2
686 foo2
687 ------------ Testing mkdir ------------
688 --- md and mkdir are synonymous
689 0
690 0
691 --- creating an already existing directory/file must fail
692 1
693 1
694 --- multilevel path creation
695 0
696 0
697 0
698 0
699 0
700 1
701 0
702 0
703 --- trailing backslashes
704 0
705 dir created
706 0
707 --- invalid chars
708 mkdir ? gives errorlevel 1
709 mkdir ?\foo gives errorlevel 1
710 mkdir foo\? gives errorlevel 1
711 ok, foo created
712 mkdir foo\bar\? gives errorlevel 1
713 ok, foo\bar created
714 --- multiple directories at once
715 foo created
716 bar created
717 foobar created
718 bar\baz created
719 bazbaz created
720 zabzab created
721 mkdir foo\* errorlevel 1
722 ok, foo created
723 ------------ Testing rmdir ------------
724 0
725 dir removed
726 0
727 dir removed
728 0
729 0
730 file not removed
731 0
732 non-empty dir not removed
733 0
734 non-empty dir not removed
735 recursive rmdir succeeded
736 recursive rmdir succeeded
737 foo removed
738 bar removed
739 foobar removed
740 bar\baz removed
741 ------------ Testing pushd/popd ------------
742 @pwd@
743 --- popd is no-op when dir stack is empty
744 @pwd@
745 --- pushing non-existing dir
746 @pwd@
747 --- basic behaviour
748 @pwd@\foobar
749 @pwd@
750 @pwd@\foobar\baz
751 @pwd@\foobar
752 @pwd@\foobar
753 @pwd@
754 @pwd@\foobar
755 @pwd@
756 ------------ Testing attrib ------------
757 A            @pwd@\foobar\foo@or_broken@A          @pwd@\foobar\foo@or_broken@A       I    @pwd@\foobar\foo
758 --- read-only attribute
759 A    R       @pwd@\foobar\foo@or_broken@A    R     @pwd@\foobar\foo@or_broken@A    R  I    @pwd@\foobar\foo
760 foo
761 foo original contents
762 Read-only file not deleted
763 Read-only file forcibly deleted
764 --- recursive behaviour
765 @todo_wine@A            @pwd@\foobar\baz\level2@or_broken@A          @pwd@\foobar\baz\level2@or_broken@A       I    @pwd@\foobar\baz\level2
766 @todo_wine@A    R       @pwd@\foobar\level1@or_broken@A    R     @pwd@\foobar\level1@or_broken@A    R  I    @pwd@\foobar\level1
767 @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
768 A            @pwd@\foobar\bar@or_broken@A          @pwd@\foobar\bar@or_broken@A       I    @pwd@\foobar\bar
769 --- folders processing
770              @pwd@\foobar@or_broken@           @pwd@\foobar@or_broken@        I    @pwd@\foobar
771 @todo_wine@     R       @pwd@\foobar\baz@or_broken@     R     @pwd@\foobar\baz@or_broken@           @pwd@\foobar\baz@or_broken@     R  I    @pwd@\foobar\baz
772 @todo_wine@A            @pwd@\foobar\baz\toto@or_broken@A          @pwd@\foobar\baz\toto@or_broken@A       I    @pwd@\foobar\baz\toto
773 toto
774 lulu
775 file created in read-only dir
776 ------------ Testing assoc ------------
777 --- setting association
778 ---
779 .foo=bar
780 .foo=bar
781 +++
782 .foo=bar
783 --- resetting association
784 ---
785 +++
786 ---
787 ------------ Testing ftype ------------
788 --- setting association
789 ---
790 footype=foo_opencmd
791 .foo=footype
792 footype=foo_opencmd
793 +++
794 footype=foo_opencmd
795 --- resetting association
796 @todo_wine@original value@or_broken@buggyXP@or_broken@!FOO!
797 ------------ Testing CALL ------------
798 --- external script
799 foo@space@
800 foo 8
801 foo@space@@space@
802 foo bar@space@
803 foo ""@space@
804 "" bar@space@
805 foo ''@space@
806 '' bar@space@
807 --- internal routines
808 bar :testRoutine
809 foo@space@
810 foo bar
811 foo ""
812 "" bar
813 foo ''
814 '' bar
815 --- with builtins
816 @todo_wine@0
817 @todo_wine@foo created
818 @todo_wine@Should expand foobaz
819 @todo_wine@batfile
820 @todo_wine@robinfile
821 @todo_wine@1
822 @todo_wine@1
823 non-builtin dir
824 ------------ Testing SHIFT ------------
825 'p1' 'p2' 'p3' 'p4' 'p5'
826 'p2' 'p3' 'p4' 'p5' ''
827 'p3' 'p4' 'p5' '' ''
828 'p3' 'p5' '' '' ''
829 'p3' 'p5' '' '' ''
830 'p5' '' '' '' ''
831 ------------ Testing cmd invocation ------------
832 --- a batch file can delete itself
833 file correctly deleted
834 --- a batch file can alter itself
835 @todo_wine@bar
836 ------------ Testing setlocal/endlocal ------------
837 --- enable/disable extensions
838 @todo_wine@ErrLev:@space@
839 ErrLev: 0
840 ErrLev: 0
841 @todo_wine@ErrLev:@space@@or_broken@ErrLev: 0
842 ErrLev: 0
843 --- setlocal with corresponding endlocal
844 globalval
845 localval
846 globalval
847 globalval
848 --- setlocal with no corresponding endlocal
849 globalval
850 localval
851 @todo_wine@globalval
852 ------------ Testing Errorlevel ------------
853 9009
854 1
855 errorlevel just right, good
856 errorlevel with leading zero just right, good
857 errorlevel with negative number OK
858 abc0def@or_broken@abc1def
859 errorlevel zero, good@or_broken@errorlevel nonzero, bad
860 7 should be 7
861 7 should still be 7
862 ------------ Testing GOTO ------------
863 goto with no leading space worked
864 goto with a leading space worked
865 goto with a leading tab worked
866 goto with a following space worked
867 ------------ Testing PATH ------------
868 PATH=original
869 PATH=try2
870 PATH=try3
871 ------------ Testing combined CALLs/GOTOs ------------
872 world
873 cheball
874 barbare
875 bar
876 foo
877 baz
878 cheball
879 barbare