cmd: Make MOVE work for read-only files.
[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 ------------ Testing 'echo' [OFF] --------------
78 word
79 'singlequotedword'
80 "doublequotedword"
81 at-echoed-word
82 "/?"
83
84 .
85 word
86 .word
87
88 :
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
109
110 @todo_wine@@pwd@>if 1 == 1 echo foo@space@
111 foo
112
113 @todo_wine@@pwd@>if 1 == 1@space@
114 bar
115 foo2
116 bar2
117 ------------ Testing rem --------------
118
119 @pwd@>rem Hello@space@
120
121 @pwd@>rem  Hello@space@
122
123 @pwd@>rem   Hello || foo@space@
124
125 @pwd@>rem echo lol@space@
126
127 @pwd@>rem echo foo & echo bar@space@
128
129 @pwd@>rem @tab@  Hello@space@
130
131 @pwd@>rem@tab@  Hello@space@
132
133 @pwd@>rem@tab@echo foo & echo bar@space@
134 ------------ Testing redirection operators --------------
135 ...stdout redirection
136 foo
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
147 foo
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
172 baz
173 foo@space@
174 baz
175 foo
176 A
177 B
178 C
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
184 baz
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' --------------
200 1
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
208  bar
209 @todo_wine@FOOBAR= bar
210 @todo_wine@FOOBAR =  baz2
211 FOOBAR =  baz2
212 FOOBAR not defined
213 1
214 bar
215 foobar
216 FOO not defined
217 BAZ=bazbaz
218 bazbaz
219 set "FOO=bar" should not include the quotes in the variable value
220 bar
221 foo
222 ''
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@
230 %
231 P
232 P
233 S
234 P
235 PS
236 ERRORLEVEL
237 0
238 00
239 0ERRORLEVEL
240 0
241 0%
242 P0
243 0S
244 P0S
245 ------------ Testing variable substrings --------------
246 q
247 qwe
248 er
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"
258 C
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
267 L M
268 N
269 '.OOL'
270 '.TABC'
271 ''
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@
288 ''
289 '.eh'
290 ...in parameters
291 @todo_wine@"A B"
292 C
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
302 N
303 @todo_wine@'.OOL'
304 '.TABC'
305 ''
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@
315 ''
316 '.eh'@or_broken@''
317 ------------ Testing variable delayed expansion --------------
318 ...default mode (load-time expansion)
319 foo
320 !FOO!
321 foo
322 foo
323 ...runtime (delayed) expansion mode
324 foo
325 @todo_wine@foo@or_broken@!FOO!
326 foo
327 @todo_wine@bar@or_broken@foo
328 0
329 0@or_broken@1
330 foo
331 !FOO!
332 ...using /V cmd flag
333 foo
334 @todo_wine@foo@or_broken@!FOO!
335 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 ------------
367
368 @pwd@>type foobaz@space@
369 bar
370
371 @pwd@>echo ***@space@
372 ***
373 bar
374 ***
375 ------------ Testing NUL ------------
376 bar
377 bar
378 bar
379 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
399 lol
400 quake
401 quake
402 quake
403 -----------Testing for -----------
404 ...plain FOR
405 A
406 B
407 C
408 %I
409 %I
410 %I
411 %j
412 %j
413 %j
414 A
415 B
416 C
417 1
418 4
419 1
420 A
421 B
422 C
423 X
424 X2
425 X3
426 foo
427 M
428 X
429 M
430 N
431 O
432 `echo
433 A
434 B`
435 'echo
436 A
437 B'
438 @todo_wine@"echo A B"
439 @todo_wine@"A B"
440 C
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
455 baz
456 foo
457 bar
458 ...for /L
459 1
460 3
461 5
462 1
463 3
464 5
465 0
466 2
467 1
468 -1
469 @todo_wine@ErrorLevel 0
470 @todo_wine@ErrorLevel 0
471 ...for /a
472 ......individual operations
473 0
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
482 0
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
493 0
494 @todo_wine@-1
495 @todo_wine@-3
496 0
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
531 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
538 0
539 @todo_wine@5@or_broken@0
540
541 ...for /F
542 ......string argument
543 a
544 a
545 a
546 a
547 a
548 ......fileset argument
549 .........basic blank handling
550 a
551 a
552 a
553 a
554 a
555 b
556 .........multi-line with empty lines
557 a
558 b
559 c
560 .........multiple files
561 a
562 b
563 c
564 q
565 kkk
566 q
567 kkk
568 a
569 b
570 c
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 ...
602 foo
603 bar
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 ......
620 foo
621 bar2
622 foo2
623 ------------ Testing mkdir ------------
624 ... md and mkdir are synonymous ...
625 0
626 0
627 ... creating an already existing directory/file must fail ...
628 1
629 1
630 ... multilevel path creation ...
631 0
632 0
633 0
634 0
635 0
636 1
637 0
638 0
639 ... trailing backslashes ...
640 0
641 dir created
642 0
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 -----------
658 0
659 dir removed
660 0
661 dir removed
662 0
663 0
664 file not removed
665 0
666 non-empty dir not removed
667 0
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
694 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
712 ***
713 .foo=bar
714 .foo=bar
715 +++
716 .foo=bar
717 ...resetting association
718 ***
719 +++
720 ***
721 ------------ Testing ftype --------------
722 ...setting association
723 ***
724 footype=foo_opencmd
725 .foo=footype
726 footype=foo_opencmd
727 +++
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
788 1
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
803 bar
804 foo
805 baz
806 cheball
807 barbare