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