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