cmd: Make MOVE work for read-only files.
[wine/multimedia.git] / programs / cmd / tests / test_builtins.cmd.exp
blobe45016c15eb7bc9a2d6e71ce3a0c5ac5c11edeb7
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
77 ------------ Testing 'echo' [OFF] --------------
78 word
79 'singlequotedword'
80 "doublequotedword"
81 at-echoed-word
82 "/?"
85 word
86 .word
89 word
90 :word
91 on again
92 word@space@
93 word@space@@space@
94 word
95 word
96 word@space@@tab@
97 word@tab@@space@
98 word
99 @tab@word
100 @space@@tab@word
101 @tab@word
102 ------------ Testing mixed echo modes --------------
103 @echo on
104 if 1==1 echo foo
105 if 1==1 @echo bar
106 @echo off
107 if 1==1 echo foo2
108 if 1==1 @echo bar2
110 @todo_wine@@pwd@>if 1 == 1 echo foo@space@
113 @todo_wine@@pwd@>if 1 == 1@space@
115 foo2
116 bar2
117 ------------ Testing rem --------------
119 @pwd@>rem Hello@space@
121 @pwd@>rem Hello@space@
123 @pwd@>rem Hello || foo@space@
125 @pwd@>rem echo lol@space@
127 @pwd@>rem echo foo & echo bar@space@
129 @pwd@>rem @tab@ Hello@space@
131 @pwd@>rem@tab@ Hello@space@
133 @pwd@>rem@tab@echo foo & echo bar@space@
134 ------------ Testing redirection operators --------------
135 ...stdout redirection
137 foo@space@
138 foo@tab@
139 foo@space@
140 foo@tab@
141 foo7@space@@or_broken@foo@tab@
142 foo9@space@@or_broken@foo@tab@
143 foo1
144 foo11
145 foo12
146 ...stdout appending
148 foo@space@
149 foob@space@
150 foob@space@
151 fooc@space@
152 foob@space@
153 fooc@space@
154 food1
155 foob@space@
156 fooc@space@
157 food1
158 food2
159 food21
160 @todo_wine@foo7@space@@space@@or_broken@not supported@space@
161 @todo_wine@foo@or_broken@not supported
162 ...redirections within IF statements
163 @todo_wine@foo1
164 @todo_wine@foo2
165 @todo_wine@foo3
166 file does not exist, ok
167 foo4
168 baz5
169 baz6@space@
170 baz7
171 baz8
173 foo@space@
179 @todo_wine@------------ Testing ^ escape character --------------
180 @todo_wine@hello, world
181 @todo_wine@hello, world
182 @todo_wine@hell^o, world
183 @todo_wine@hell^o, world
185 @todo_wine@baz
186 @todo_wine@foo | echo bar
187 @todo_wine@foo & echo bar
188 @todo_wine@bak &
189 @todo_wine@baz@space@
190 @todo_wine@0@or_broken@1
191 @todo_wine@foo > foo
192 @todo_wine@<
193 @todo_wine@ffoof
194 @todo_wine@FOO=bar | baz
195 @todo_wine@0
196 @todo_wine@FOO=bar ^| baz
197 @todo_wine@bar | baz
198 @todo_wine@0
199 ------------ Testing 'set' --------------
201 @todo_wine@0
202 FOOBAR not defined
203 @todo_wine@ baz
204 FOOBAR = baz
205 @todo_wine@0
206 @todo_wine@ baz2
207 @todo_wine@0
209 @todo_wine@FOOBAR= bar
210 @todo_wine@FOOBAR = baz2
211 FOOBAR = baz2
212 FOOBAR not defined
215 foobar
216 FOO not defined
217 BAZ=bazbaz
218 bazbaz
219 set "FOO=bar" should not include the quotes in the variable value
223 'foo@space@'
224 'foo@tab@'
225 ------------ Testing variable expansion --------------
226 ~dp0 should be directory containing batch file
227 @pwd@\
228 @pwd@\
229 CD value @pwd@@or_broken@CD value@space@
236 ERRORLEVEL
239 0ERRORLEVEL
245 ------------ Testing variable substrings --------------
249 @todo_wine@'ty'@or_broken@''
250 't'@or_broken@''
251 ert@or_broken@qwerty
252 e@or_broken@qwerty
253 ''@or_broken@'qwerty'
254 r@or_broken@qwerty
255 ------------ Testing variable substitution --------------
256 ...in FOR variables
257 @todo_wine@"A B"
259 'A B'@or_broken@''
260 'C'@or_broken@''
261 @pwd@\C D@or_broken@%~ff
262 @pwd@\E@or_broken@%~ff
263 @drive@
264 @drive@
265 @path@@or_broken@%~pd
266 @path@@or_broken@%~pd
269 '.OOL'
270 '.TABC'
272 @todo_wine@'@drive@@shortpath@R S'@or_broken@''
273 @todo_wine@'@drive@@shortpath@T'@or_broken@''
274 @todo_wine@'@drive@@shortpath@ABCDEFGHIJK.LMNOP'@or_broken@''
275 @todo_wine@''@or_broken@'%~ai'
276 @todo_wine@''@or_broken@'%~ai'
277 @todo_wine@'--a------'@or_broken@'%~ai'
278 @todo_wine@''@or_broken@'%~ti'
279 @todo_wine@''@or_broken@'%~ti'
280 @todo_wine@''@or_broken@'%~zi'
281 @todo_wine@''@or_broken@'%~zi'
282 @drive@@path@
283 @drive@@path@
284 @drive@
285 @drive@
286 @drive@
287 @drive@
289 '.eh'
290 ...in parameters
291 @todo_wine@"A B"
293 @todo_wine@'A B'@or_broken@''
294 'C'@or_broken@''
295 @todo_wine@@pwd@\C D
296 @pwd@\E
297 @drive@
298 @drive@
299 @path@
300 @path@
301 @todo_wine@L M
303 @todo_wine@'.OOL'
304 '.TABC'
306 @todo_wine@'@drive@@shortpath@R S'@or_broken@''
307 @todo_wine@'@drive@@shortpath@T'@or_broken@''
308 @todo_wine@'@drive@@shortpath@ABCDEFGHIJK.LMNOP'@or_broken@''
309 @drive@@path@
310 @drive@@path@
311 @drive@
312 @drive@
313 @drive@
314 @drive@
316 '.eh'@or_broken@''
317 ------------ Testing variable delayed expansion --------------
318 ...default mode (load-time expansion)
320 !FOO!
323 ...runtime (delayed) expansion mode
325 @todo_wine@foo@or_broken@!FOO!
327 @todo_wine@bar@or_broken@foo
329 0@or_broken@1
331 !FOO!
332 ...using /V cmd flag
334 @todo_wine@foo@or_broken@!FOO!
336 !FOO!
337 ------------ Testing conditional execution --------------
338 @todo_wine@...unconditional &
339 foo1
340 bar2@space@
341 foo2
342 foobar deleted
343 @todo_wine@...on success conditional &&
344 @todo_wine@foo3 not created
345 bar4@space@
346 foo4
347 @todo_wine@...on failure conditional ||
348 @todo_wine@foo5
349 @todo_wine@foo6@space@
350 ------------ Testing cd ------------
351 singleFile
352 Current dir: @pwd@\foobar@or_broken@Current dir:@space@
353 @pwd@\foobar
354 @pwd@
355 @pwd@\foobar
356 @pwd@
357 @pwd@\foobar
358 @pwd@
359 @pwd@
360 @pwd@
361 @pwd@\foobar\bar bak
362 @pwd@\foobar\bar bak
363 @pwd@\foobar\bar bak
364 @pwd@
365 @pwd@\foobar
366 ------------ Testing type ------------
368 @pwd@>type foobaz@space@
371 @pwd@>echo ***@space@
375 ------------ Testing NUL ------------
380 @todo_wine@foo created
381 ------------ Testing if/else --------------
382 if/else should work with blocks
383 if seems to work
384 else seems to work
385 if seems not to detect /c as parameter
386 Testing case sensitivity with and without /i option
387 if seems to default to case sensitivity
388 if /i seems to work
389 if /I seems to work
390 Testing string comparisons
391 equal
392 non equal
393 non equal
394 equal
395 Testing tabs handling
396 doom
397 doom
398 doom
400 quake
401 quake
402 quake
403 -----------Testing for -----------
404 ...plain FOR
432 `echo
435 'echo
438 @todo_wine@"echo A B"
439 @todo_wine@"A B"
441 ...imbricated FORs
442 @todo_wine@X Y
443 @todo_wine@X Y
444 @todo_wine@A C
445 @todo_wine@A D
446 @todo_wine@B C
447 @todo_wine@B D
448 @todo_wine@A C
449 @todo_wine@A D
450 @todo_wine@B C
451 @todo_wine@B D
452 ...basic wildcards
453 bazbaz
454 ...for /d
458 ...for /L
469 @todo_wine@ErrorLevel 0
470 @todo_wine@ErrorLevel 0
471 ...for /a
472 ......individual operations
474 @todo_wine@3
475 @todo_wine@-1
476 @todo_wine@3
477 @todo_wine@6
478 @todo_wine@10
479 @todo_wine@4
480 @todo_wine@4
481 @todo_wine@-4
483 @todo_wine@2
484 @todo_wine@2
485 @todo_wine@-2
486 @todo_wine@1
487 @todo_wine@4
488 0@or_broken@1073741824
489 0@or_broken@-1073741824
490 @todo_wine@-4
491 @todo_wine@9
492 @todo_wine@2
494 @todo_wine@-1
495 @todo_wine@-3
497 @todo_wine@1
498 @todo_wine@1
499 @todo_wine@4
500 @todo_wine@1
501 @todo_wine@5
502 @todo_wine@5
503 @todo_wine@7
504 @todo_wine@5
505 @todo_wine@5
506 @todo_wine@5
507 @todo_wine@4
508 @todo_wine@6
509 @todo_wine@1
510 ......precedence and grouping
511 @todo_wine@4
512 @todo_wine@10
513 @todo_wine@18@or_broken@10
514 @todo_wine@2@or_broken@0
515 @todo_wine@2@or_broken@0
516 0@or_broken@4
517 @todo_wine@4
518 @todo_wine@3@or_broken@4
519 ......octal and hexadecimal
520 @todo_wine@3@or_broken@4
521 @todo_wine@18
522 @todo_wine@18
523 @todo_wine@15
524 ......variables
525 @todo_wine@3
526 @todo_wine@3@or_broken@foo not defined
527 @todo_wine@3@or_broken@0
528 @todo_wine@3@or_broken@0
529 @todo_wine@3@or_broken@0
530 @todo_wine@9@or_broken@0
532 @todo_wine@4@or_broken@0
533 @todo_wine@-7@or_broken@0
534 @todo_wine@-1@or_broken@0
535 @todo_wine@5@or_broken@0
536 @todo_wine@4@or_broken@0
537 @todo_wine@1@or_broken@0
539 @todo_wine@5@or_broken@0
541 ...for /F
542 ......string argument
548 ......fileset argument
549 .........basic blank handling
556 .........multi-line with empty lines
560 .........multiple files
571 ......eol option
572 @todo_wine@ad
573 @todo_wine@z@y
574 @todo_wine@a|d
575 @todo_wine@no output
576 @todo_wine@no output
577 ......delims option
578 @todo_wine@a
579 @todo_wine@a@space@
580 @todo_wine@a d
581 @todo_wine@a
582 @todo_wine@C r
583 @todo_wine@foo bar baz
584 @todo_wine@c:\
585 ......skip option
586 @todo_wine@c
587 @todo_wine@no output
588 @todo_wine@no output
589 -----------Testing del /a-----------
590 not-r.test not found after delete, good
591 r.test found before delete, good
592 r.test not found after delete, good
593 ------------ Testing del /q --------------
594 del /q * succeeded on file1
595 del /q * succeeded on file2.dat
596 ------------ Testing del /s --------------
597 ------------ Testing rename ------------
598 ... ren and rename are synonymous ...
599 foo renamed to bar
600 bar renamed to foo
601 ... name collision ...
604 ... rename in other directory ...
605 @todo_wine@rename impossible in other directory
606 @todo_wine@original file still present
607 ------------ Testing move ------------
608 ... file move ...
609 file move succeeded
610 @todo_wine@file move with overwrite succeeded@or_broken@file overwrite impossible!
611 @todo_wine@bar@or_broken@baz
612 read-only files are moveable
613 file moved in subdirectory
614 @todo_wine@moving a file to itself is a no-op@or_broken@moving a file to itself should be a no-op!
615 @todo_wine@ErrorLevel: 0@or_broken@ErrorLevel: 1
616 ... directory move ...
617 simple directory move succeeded
618 moving a directory to itself gives error; errlevel 1
619 ...... dir in dir move ......
621 bar2
622 foo2
623 ------------ Testing mkdir ------------
624 ... md and mkdir are synonymous ...
627 ... creating an already existing directory/file must fail ...
630 ... multilevel path creation ...
639 ... trailing backslashes ...
641 dir created
643 ... invalid chars ...
644 mkdir ? gives errorlevel 1
645 mkdir ?\foo gives errorlevel 1
646 mkdir foo\? gives errorlevel 1
647 ok, foo created
648 mkdir foo\bar\? gives errorlevel 1
649 ok, foo\bar created
650 ... multiple directories at once ...
651 foo created
652 bar created
653 foobar created
654 bar\baz created
655 mkdir foo\* errorlevel 1
656 ok, foo created
657 ----------- Testing rmdir -----------
659 dir removed
661 dir removed
664 file not removed
666 non-empty dir not removed
668 non-empty dir not removed
669 recursive rmdir succeeded
670 recursive rmdir succeeded
671 foo removed
672 bar removed
673 foobar removed
674 bar\baz removed
675 ----------- Testing pushd/popd -----------
676 @pwd@
677 ...popd is no-op when dir stack is empty
678 @pwd@
679 ...pushing non-existing dir
680 @pwd@
681 ...basic behaviour
682 @pwd@\foobar
683 @pwd@
684 @pwd@\foobar\baz
685 @pwd@\foobar
686 @pwd@\foobar
687 @pwd@
688 @pwd@\foobar
689 @pwd@
690 ------------ Testing attrib --------------
691 @todo_wine@A @pwd@\foobar\foo@or_broken@A @pwd@\foobar\foo@or_broken@A I @pwd@\foobar\foo
692 ... read-only attribute
693 @todo_wine@A R @pwd@\foobar\foo@or_broken@A R @pwd@\foobar\foo@or_broken@A R I @pwd@\foobar\foo
695 foo original contents
696 Read-only file not deleted
697 Read-only file forcibly deleted
698 ... recursive behaviour
699 @todo_wine@A @pwd@\foobar\baz\level2@or_broken@A @pwd@\foobar\baz\level2@or_broken@A I @pwd@\foobar\baz\level2
700 @todo_wine@A R @pwd@\foobar\level1@or_broken@A R @pwd@\foobar\level1@or_broken@A R I @pwd@\foobar\level1
701 @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
702 @todo_wine@A @pwd@\foobar\bar@or_broken@A @pwd@\foobar\bar@or_broken@A I @pwd@\foobar\bar
703 ... folders processing
704 @todo_wine@ @pwd@\foobar@or_broken@ @pwd@\foobar@or_broken@ I @pwd@\foobar
705 @todo_wine@ R @pwd@\foobar\baz@or_broken@ R @pwd@\foobar\baz@or_broken@ @pwd@\foobar\baz@or_broken@ R I @pwd@\foobar\baz
706 @todo_wine@A @pwd@\foobar\baz\toto@or_broken@A @pwd@\foobar\baz\toto@or_broken@A I @pwd@\foobar\baz\toto
707 toto
708 lulu
709 file created in read-only dir
710 ------------ Testing assoc --------------
711 ...setting association
713 .foo=bar
714 .foo=bar
716 .foo=bar
717 ...resetting association
721 ------------ Testing ftype --------------
722 ...setting association
724 footype=foo_opencmd
725 .foo=footype
726 footype=foo_opencmd
728 footype=foo_opencmd
729 ...resetting association
730 @todo_wine@original value@or_broken@buggyXP@or_broken@!FOO!
731 ------------ Testing CALL ------------
732 ... external script ...
733 foo@space@
734 foo 8
735 foo@space@@space@
736 foo bar@space@
737 @todo_wine@foo ""@space@
738 @todo_wine@"" bar@space@
739 foo ''@space@
740 '' bar@space@
741 ... internal routines ...
742 bar :testRoutine
743 foo@space@
744 foo bar
745 @todo_wine@foo ""
746 @todo_wine@"" bar
747 foo ''
748 '' bar
749 ... with builtins ...
750 @todo_wine@0
751 @todo_wine@foo created
752 @todo_wine@Should expand foobaz
753 @todo_wine@batfile
754 @todo_wine@robinfile
755 @todo_wine@1
756 @todo_wine@1
757 non-builtin dir
758 ------------ Testing SHIFT ------------
759 'p1' 'p2' 'p3' 'p4' 'p5'
760 'p2' 'p3' 'p4' 'p5' ''
761 'p3' 'p4' 'p5' '' ''
762 'p3' 'p5' '' '' ''
763 'p3' 'p5' '' '' ''
764 'p5' '' '' '' ''
765 ------------ Testing cmd invocation ------------
766 ... a batch file can delete itself ...
767 file correctly deleted
768 ... a batch file can alter itself ...
769 @todo_wine@bar
770 ------------ Testing setlocal/endlocal ------------
771 ...enable/disable extensions
772 @todo_wine@ErrLev:@space@
773 ErrLev: 0
774 ErrLev: 0
775 @todo_wine@ErrLev:@space@@or_broken@ErrLev: 0
776 ErrLev: 0
777 ...setlocal with corresponding endlocal
778 globalval
779 localval
780 globalval
781 globalval
782 ...setlocal with no corresponding endlocal
783 globalval
784 localval
785 @todo_wine@globalval
786 -----------Testing Errorlevel-----------
787 9009
789 errorlevel just right, good
790 abc0def@or_broken@abc1def
791 errorlevel zero, good@or_broken@errorlevel nonzero, bad
792 7 should be 7
793 7 should still be 7
794 -----------Testing GOTO-----------
795 goto with no leading space worked
796 goto with a leading space worked
797 goto with a leading tab worked
798 goto with a following space worked
799 ---------- Testing combined CALLs/GOTOs -----------
800 world
801 cheball
802 barbare
806 cheball
807 barbare