cmd: Space does not delimit environment variable names.
[wine/multimedia.git] / programs / cmd / tests / test_builtins.cmd.exp
blobd0a4e1f7760b42fa642cd9414d5b3d6e40bd5381
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
78 @pwd@>echo @tab@ on @space@@space@
79 ------------ Testing 'echo' [OFF] ------------
80 word
81 'singlequotedword'
82 "doublequotedword"
83 at-echoed-word
84 "/?"
87 word
88 .word
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
112 @todo_wine@@pwd@>if 1 == 1 echo foo@space@
115 @todo_wine@@pwd@>if 1 == 1@space@
117 foo2
118 bar2
119 ------------ Testing rem ------------
121 @pwd@>rem Hello@space@
123 @pwd@>rem Hello@space@
125 @pwd@>rem Hello || foo@space@
127 @pwd@>rem echo lol@space@
129 @pwd@>rem echo foo & echo bar@space@
131 @pwd@>rem @tab@ Hello@space@
133 @pwd@>rem@tab@ Hello@space@
135 @pwd@>rem@tab@echo foo & echo bar@space@
136 ------------ Testing redirection operators ------------
137 --- stdout redirection
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
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
176 foo@space@
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
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' ------------
205 FOOBAR not defined
207 FOOBAR = baz
209 baz2
212 @todo_wine@FOOBAR= bar
213 @todo_wine@FOOBAR = baz2
214 FOOBAR = baz2
215 FOOBAR not defined
218 foobar
219 FOO not defined
220 BAZ=bazbaz
221 bazbaz
222 set "FOO=bar" should not include the quotes in the variable value
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@
239 ERRORLEVEL
242 0ERRORLEVEL
248 ------------ Testing variable substrings ------------
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"
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
272 '.OOL'
273 '.TABC'
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@
292 '.eh'
293 --- in parameters
294 @todo_wine@"A B"
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
306 @todo_wine@'.OOL'
307 '.TABC'
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@
319 '.eh'@or_broken@''
320 ------------ Testing variable delayed expansion ------------
321 --- default mode (load-time expansion)
323 !FOO!
326 --- runtime (delayed) expansion mode
328 @todo_wine@foo@or_broken@!FOO!
330 @todo_wine@bar@or_broken@foo
332 0@or_broken@1
334 !FOO!
335 --- using /V cmd flag
337 @todo_wine@foo@or_broken@!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 ------------
371 @pwd@>type foobaz@space@
374 @pwd@>echo ---@space@
378 ------------ Testing 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
403 quake
404 quake
405 quake
406 ------------ Testing for ------------
407 --- plain FOR
435 `echo
438 'echo
441 @todo_wine@"echo A B"
442 @todo_wine@"A B"
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
475 ErrorLevel 0
476 ErrorLevel 0
496 --- for /a
497 ------ individual operations
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
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
519 @todo_wine@-1
520 @todo_wine@-3
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
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
564 @todo_wine@5@or_broken@0
566 --- for /F
567 ------ string argument
573 ------ fileset argument
574 --------- basic blank handling
581 --------- multi-line with empty lines
585 --------- multiple files
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
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
651 bar2
652 foo2
653 ------------ Testing mkdir ------------
654 --- md and mkdir are synonymous
657 --- creating an already existing directory/file must fail
660 --- multilevel path creation
669 --- trailing backslashes
671 dir created
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 ------------
689 dir removed
691 dir removed
694 file not removed
696 non-empty dir not removed
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
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
743 .foo=bar
744 .foo=bar
746 .foo=bar
747 --- resetting association
751 ------------ Testing ftype ------------
752 --- setting association
754 footype=foo_opencmd
755 .foo=footype
756 footype=foo_opencmd
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
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
842 cheball
843 barbare