cmd: Support for ^ character at end of line.
[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 parameterization ------------
120 'a', 'b', 'c'
121 '"a b c"', '', ''
122 '"a b"\c', '', ''
123 'a', '~`+', '.{}!+b'
124 'a', 'b', ''
125 '"a;b"', '', ''
126 'a', 'b', ''
127 'a[b]{c}(d)e', '', ''
128 'a', '', ''
129 second line
130 'a', 'b', 'c'
131 'a', 'b', 'c'
132 'a', 'b', ''
133 ------------ Testing rem ------------
134
135 @pwd@>rem Hello@space@
136
137 @pwd@>rem  Hello@space@
138
139 @pwd@>rem   Hello || foo@space@
140
141 @pwd@>rem echo lol@space@
142
143 @pwd@>rem echo foo & echo bar@space@
144
145 @pwd@>rem @tab@  Hello@space@
146
147 @pwd@>rem@tab@  Hello@space@
148
149 @pwd@>rem@tab@echo foo & echo bar@space@
150 ------------ Testing redirection operators ------------
151 --- stdout redirection
152 foo
153 foo@space@
154 foo@tab@
155 foo@space@
156 foo@tab@
157 foo7@space@@or_broken@foo@tab@
158 foo9@space@@or_broken@foo@tab@
159 foo1
160 foo11
161 foo12
162 foo13
163 foo14
164 foo15
165 --- stdout appending
166 foo
167 foo@space@
168 foob@space@
169 foob@space@
170 fooc@space@
171 foob@space@
172 fooc@space@
173 food1
174 foob@space@
175 fooc@space@
176 food1
177 food2
178 food21
179 @todo_wine@foo7@space@@space@@or_broken@not supported@space@
180 @todo_wine@foo@or_broken@not supported
181 --- redirections within IF statements
182 @todo_wine@foo1
183 -----
184 foo2
185 foo3
186 file does not exist, ok
187 foo4
188 baz5
189 baz6@space@
190 baz7
191 baz8
192 baz
193 foo@space@
194 baz
195 foo
196 A
197 B
198 C
199 ------------ Testing circumflex escape character ------------
200 hello, world
201 hello, world
202 hell^o, world
203 hell^o, world
204 helloworld
205 hello
206 world
207 hello
208
209 finished
210 baz
211 baz
212 foo | echo bar
213 foo & echo bar
214 bak &
215 baz@space@
216 0@or_broken@1
217 foo > foo
218 <
219 ffoof
220 FOO=bar | baz
221 0
222 FOO=bar ^| baz
223 bar | baz
224 0
225 ------------ Testing 'set' ------------
226 1
227 0
228 FOOBAR not defined
229   baz
230 FOOBAR =  baz
231 0
232   baz2
233 0
234  bar
235 @todo_wine@FOOBAR= bar
236 @todo_wine@FOOBAR =  baz2
237 FOOBAR =  baz2
238 FOOBAR not defined
239 1
240 bar
241 foobar
242 FOO not defined
243 BAZ=bazbaz
244 bazbaz
245 set "FOO=bar" should not include the quotes in the variable value
246 bar
247 foo
248 ''
249 'foo@space@'
250 'foo@tab@'
251 ------------ Testing variable expansion ------------
252 ~dp0 should be directory containing batch file
253 @pwd@\
254 @pwd@\
255 CD value @pwd@@or_broken@CD value@space@
256 %
257 P
258 P
259 S
260 P
261 PS
262 ERRORLEVEL
263 0
264 00
265 0ERRORLEVEL
266 0
267 0%
268 P0
269 0S
270 P0S
271 ------------ Testing variable substrings ------------
272 q
273 qwe
274 er
275 @todo_wine@'ty'@or_broken@''
276 't'@or_broken@''
277 ert@or_broken@qwerty
278 e@or_broken@qwerty
279 ''@or_broken@'qwerty'
280 r@or_broken@qwerty
281 ------------ Testing variable substitution ------------
282 --- in FOR variables
283 "A B"
284 C
285 'A B'@or_broken@''
286 'C'@or_broken@''
287 @pwd@\C D@or_broken@%~ff
288 @pwd@\E@or_broken@%~ff
289 @drive@
290 @drive@
291 @path@@or_broken@%~pd
292 @path@@or_broken@%~pd
293 L M
294 N
295 '.OOL'
296 '.TABC'
297 ''
298 @todo_wine@'@drive@@shortpath@R S'@or_broken@''
299 @todo_wine@'@drive@@shortpath@T'@or_broken@''
300 @todo_wine@'@drive@@shortpath@ABCDEFGHIJK.LMNOP'@or_broken@''
301 @todo_wine@''@or_broken@'%~ai'
302 @todo_wine@''@or_broken@'%~ai'
303 @todo_wine@'--a------'@or_broken@'%~ai'
304 @todo_wine@''@or_broken@'%~ti'
305 @todo_wine@''@or_broken@'%~ti'
306 @todo_wine@''@or_broken@'%~zi'
307 @todo_wine@''@or_broken@'%~zi'
308 @drive@@path@
309 @drive@@path@
310 @drive@
311 @drive@
312 @drive@
313 @drive@
314 ''
315 '.eh'
316 --- in parameters
317 "A B"
318 C
319 'A B'@or_broken@''
320 'C'@or_broken@''
321 @pwd@\C D
322 @pwd@\E
323 @drive@
324 @drive@
325 @path@
326 @path@
327 L M
328 N
329 '.OOL'
330 '.TABC'
331 ''
332 @todo_wine@'@drive@@shortpath@R S'@or_broken@''
333 @todo_wine@'@drive@@shortpath@T'@or_broken@''
334 @todo_wine@'@drive@@shortpath@ABCDEFGHIJK.LMNOP'@or_broken@''
335 @drive@@path@
336 @drive@@path@
337 @drive@
338 @drive@
339 @drive@
340 @drive@
341 ''
342 '.eh'@or_broken@''
343 ------------ Testing variable delayed expansion ------------
344 --- default mode (load-time expansion)
345 foo
346 !FOO!
347 foo
348 foo
349 --- runtime (delayed) expansion mode
350 foo
351 @todo_wine@foo@or_broken@!FOO!
352 foo
353 @todo_wine@bar@or_broken@foo
354 0
355 0@or_broken@1
356 foo
357 !FOO!
358 --- using /V cmd flag
359 foo
360 @todo_wine@foo@or_broken@!FOO!
361 foo
362 !FOO!
363 ------------ Testing conditional execution ------------
364 --- unconditional ampersand
365 foo1
366 bar2@space@
367 foo2
368 foobar deleted
369 --- on success conditional and
370 @todo_wine@foo3 not created
371 bar4@space@
372 foo4
373 --- on failure conditional or
374 foo5
375 foo6@space@
376 @todo_wine@------------ Testing cd ------------
377 singleFile
378 Current dir: @pwd@\foobar@or_broken@Current dir:@space@
379 @pwd@\foobar
380 @pwd@
381 @pwd@\foobar
382 @pwd@
383 @pwd@\foobar
384 @pwd@
385 @pwd@
386 @pwd@
387 @pwd@\foobar\bar bak
388 @pwd@\foobar\bar bak
389 @pwd@\foobar\bar bak
390 @pwd@\foobar\bar bak
391 @pwd@\foobar\bar bak
392 @pwd@
393 @pwd@\foobar
394 ------------ Testing type ------------
395
396 @pwd@>type foobaz@space@
397 bar
398
399 @pwd@>echo ---@space@
400 ---
401 bar
402 ---1
403 bar
404 ---2
405 bar
406 ---3
407 ------------ Testing NUL ------------
408 bar
409 bar
410 bar
411 NUL
412 @todo_wine@foo created
413 ------------ Testing if/else ------------
414 if/else should work with blocks
415 if seems to work
416 else seems to work
417 if seems not to detect /c as parameter
418 Testing case sensitivity with and without /i option
419 if seems to default to case sensitivity
420 if /i seems to work
421 if /I seems to work
422 Testing string comparisons
423 equal
424 non equal
425 non equal
426 equal
427 Testing tabs handling
428 doom
429 doom
430 doom
431 lol
432 quake
433 quake
434 quake
435 ------------ Testing for ------------
436 --- plain FOR
437 A
438 B
439 C
440 %I
441 %I
442 %I
443 %j
444 %j
445 %j
446 A
447 B
448 C
449 1
450 4
451 1
452 A
453 B
454 C
455 X
456 X2
457 X3
458 foo
459 M
460 X
461 M
462 N
463 O
464 `echo
465 A
466 B`
467 'echo
468 A
469 B'
470 "echo A B"
471 "A B"
472 C
473 --- imbricated FORs
474 @todo_wine@X Y
475 @todo_wine@X Y
476 @todo_wine@A C
477 @todo_wine@A D
478 @todo_wine@B C
479 @todo_wine@B D
480 @todo_wine@A C
481 @todo_wine@A D
482 @todo_wine@B C
483 @todo_wine@B D
484 --- basic wildcards
485 bazbaz
486 --- for /d
487 baz@space@
488 foo@space@
489 bar@space@
490 PASSED
491 xxx - Should be xxx
492 Expected second line
493 --- for /L
494 1
495 3
496 5
497 1
498 3
499 5
500 0
501 2
502 1
503 -1
504 ErrorLevel 0
505 ErrorLevel 0
506 1
507 2
508 3
509 4
510 1
511 3
512 4
513 3
514 2
515 1
516 4
517 2
518 0
519 1
520 1
521 -1
522 -1
523 1
524 3
525 --- for /a
526 ------ individual operations
527 0
528 @todo_wine@3
529 @todo_wine@-1
530 @todo_wine@3
531 @todo_wine@6
532 @todo_wine@10
533 @todo_wine@4
534 @todo_wine@4
535 @todo_wine@-4
536 0
537 @todo_wine@2
538 @todo_wine@2
539 @todo_wine@-2
540 @todo_wine@1
541 @todo_wine@4
542 0@or_broken@1073741824
543 0@or_broken@-1073741824
544 @todo_wine@-4
545 @todo_wine@9
546 @todo_wine@2
547 0
548 @todo_wine@-1
549 @todo_wine@-3
550 0
551 @todo_wine@1
552 @todo_wine@1
553 @todo_wine@4
554 @todo_wine@1
555 @todo_wine@5
556 @todo_wine@5
557 @todo_wine@7
558 @todo_wine@5
559 @todo_wine@5
560 @todo_wine@5
561 @todo_wine@4
562 @todo_wine@6
563 @todo_wine@1
564 ------ precedence and grouping
565 @todo_wine@4
566 @todo_wine@10
567 @todo_wine@18@or_broken@10
568 @todo_wine@2@or_broken@0
569 @todo_wine@2@or_broken@0
570 0@or_broken@4
571 @todo_wine@4
572 @todo_wine@3@or_broken@4
573 ------ octal and hexadecimal
574 @todo_wine@3@or_broken@4
575 @todo_wine@18
576 @todo_wine@18
577 @todo_wine@15
578 ------ variables
579 @todo_wine@3
580 @todo_wine@3@or_broken@foo not defined
581 @todo_wine@3@or_broken@0
582 @todo_wine@3@or_broken@0
583 @todo_wine@3@or_broken@0
584 @todo_wine@9@or_broken@0
585 0
586 @todo_wine@4@or_broken@0
587 @todo_wine@-7@or_broken@0
588 @todo_wine@-1@or_broken@0
589 @todo_wine@5@or_broken@0
590 @todo_wine@4@or_broken@0
591 @todo_wine@1@or_broken@0
592 0
593 @todo_wine@5@or_broken@0
594
595 --- for /F
596 ------ string argument
597 @todo_wine@a
598 @todo_wine@a
599 a
600 @todo_wine@a
601 @todo_wine@a
602 ------ fileset argument
603 --------- basic blank handling
604 a
605 a
606 a
607 a
608 a
609 b
610 --------- multi-line with empty lines
611 a
612 b
613 c
614 --------- multiple files
615 a
616 b
617 c
618 q
619 kkk
620 q
621 kkk
622 a
623 b
624 c
625 ------ eol option
626 @todo_wine@ad
627 @todo_wine@z@y
628 @todo_wine@a|d
629 @todo_wine@no output
630 @todo_wine@no output
631 ------ delims option
632 @todo_wine@a
633 @todo_wine@a@space@
634 @todo_wine@a d
635 @todo_wine@a
636 @todo_wine@C r
637 @todo_wine@foo bar baz
638 @todo_wine@c:\
639 ------ skip option
640 @todo_wine@c
641 @todo_wine@no output
642 @todo_wine@no output
643 ------------ Testing del /a ------------
644 not-r.test not found after delete, good
645 r.test found before delete, good
646 r.test not found after delete, good
647 ------------ Testing del /q ------------
648 del /q * succeeded on file1
649 del /q * succeeded on file2.dat
650 ------------ Testing del /s ------------
651 ------------ Testing rename ------------
652 --- ren and rename are synonymous
653 foo renamed to bar
654 bar renamed to foo
655 --- name collision
656 foo
657 bar
658 --- rename read-only files
659 read-only file renamed
660 --- rename directories
661 dir renamed
662 read-only dir renamed
663 --- rename in other directory
664 rename impossible in other directory
665 original file still present
666 ------------ Testing move ------------
667 --- file move
668 file move succeeded
669 @todo_wine@file move with overwrite succeeded@or_broken@file overwrite impossible!
670 @todo_wine@bar@or_broken@baz
671 read-only files are moveable
672 file moved in subdirectory
673 @todo_wine@moving a file to itself is a no-op@or_broken@moving a file to itself should be a no-op!
674 @todo_wine@ErrorLevel: 0@or_broken@ErrorLevel: 1
675 --- directory move
676 simple directory move succeeded
677 moving a directory to itself gives error; errlevel 1
678 ------ dir in dir move
679 foo
680 bar2
681 foo2
682 ------------ Testing mkdir ------------
683 --- md and mkdir are synonymous
684 0
685 0
686 --- creating an already existing directory/file must fail
687 1
688 1
689 --- multilevel path creation
690 0
691 0
692 0
693 0
694 0
695 1
696 0
697 0
698 --- trailing backslashes
699 0
700 dir created
701 0
702 --- invalid chars
703 mkdir ? gives errorlevel 1
704 mkdir ?\foo gives errorlevel 1
705 mkdir foo\? gives errorlevel 1
706 ok, foo created
707 mkdir foo\bar\? gives errorlevel 1
708 ok, foo\bar created
709 --- multiple directories at once
710 foo created
711 bar created
712 foobar created
713 bar\baz created
714 bazbaz created
715 zabzab created
716 mkdir foo\* errorlevel 1
717 ok, foo created
718 ------------ Testing rmdir ------------
719 0
720 dir removed
721 0
722 dir removed
723 0
724 0
725 file not removed
726 0
727 non-empty dir not removed
728 0
729 non-empty dir not removed
730 recursive rmdir succeeded
731 recursive rmdir succeeded
732 foo removed
733 bar removed
734 foobar removed
735 bar\baz removed
736 ------------ Testing pushd/popd ------------
737 @pwd@
738 --- popd is no-op when dir stack is empty
739 @pwd@
740 --- pushing non-existing dir
741 @pwd@
742 --- basic behaviour
743 @pwd@\foobar
744 @pwd@
745 @pwd@\foobar\baz
746 @pwd@\foobar
747 @pwd@\foobar
748 @pwd@
749 @pwd@\foobar
750 @pwd@
751 ------------ Testing attrib ------------
752 A            @pwd@\foobar\foo@or_broken@A          @pwd@\foobar\foo@or_broken@A       I    @pwd@\foobar\foo
753 --- read-only attribute
754 A    R       @pwd@\foobar\foo@or_broken@A    R     @pwd@\foobar\foo@or_broken@A    R  I    @pwd@\foobar\foo
755 foo
756 foo original contents
757 Read-only file not deleted
758 Read-only file forcibly deleted
759 --- recursive behaviour
760 @todo_wine@A            @pwd@\foobar\baz\level2@or_broken@A          @pwd@\foobar\baz\level2@or_broken@A       I    @pwd@\foobar\baz\level2
761 @todo_wine@A    R       @pwd@\foobar\level1@or_broken@A    R     @pwd@\foobar\level1@or_broken@A    R  I    @pwd@\foobar\level1
762 @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
763 A            @pwd@\foobar\bar@or_broken@A          @pwd@\foobar\bar@or_broken@A       I    @pwd@\foobar\bar
764 --- folders processing
765              @pwd@\foobar@or_broken@           @pwd@\foobar@or_broken@        I    @pwd@\foobar
766 @todo_wine@     R       @pwd@\foobar\baz@or_broken@     R     @pwd@\foobar\baz@or_broken@           @pwd@\foobar\baz@or_broken@     R  I    @pwd@\foobar\baz
767 @todo_wine@A            @pwd@\foobar\baz\toto@or_broken@A          @pwd@\foobar\baz\toto@or_broken@A       I    @pwd@\foobar\baz\toto
768 toto
769 lulu
770 file created in read-only dir
771 ------------ Testing assoc ------------
772 --- setting association
773 ---
774 .foo=bar
775 .foo=bar
776 +++
777 .foo=bar
778 --- resetting association
779 ---
780 +++
781 ---
782 ------------ Testing ftype ------------
783 --- setting association
784 ---
785 footype=foo_opencmd
786 .foo=footype
787 footype=foo_opencmd
788 +++
789 footype=foo_opencmd
790 --- resetting association
791 @todo_wine@original value@or_broken@buggyXP@or_broken@!FOO!
792 ------------ Testing CALL ------------
793 --- external script
794 foo@space@
795 foo 8
796 foo@space@@space@
797 foo bar@space@
798 foo ""@space@
799 "" bar@space@
800 foo ''@space@
801 '' bar@space@
802 --- internal routines
803 bar :testRoutine
804 foo@space@
805 foo bar
806 foo ""
807 "" bar
808 foo ''
809 '' bar
810 --- with builtins
811 @todo_wine@0
812 @todo_wine@foo created
813 @todo_wine@Should expand foobaz
814 @todo_wine@batfile
815 @todo_wine@robinfile
816 @todo_wine@1
817 @todo_wine@1
818 non-builtin dir
819 ------------ Testing SHIFT ------------
820 'p1' 'p2' 'p3' 'p4' 'p5'
821 'p2' 'p3' 'p4' 'p5' ''
822 'p3' 'p4' 'p5' '' ''
823 'p3' 'p5' '' '' ''
824 'p3' 'p5' '' '' ''
825 'p5' '' '' '' ''
826 ------------ Testing cmd invocation ------------
827 --- a batch file can delete itself
828 file correctly deleted
829 --- a batch file can alter itself
830 @todo_wine@bar
831 ------------ Testing setlocal/endlocal ------------
832 --- enable/disable extensions
833 @todo_wine@ErrLev:@space@
834 ErrLev: 0
835 ErrLev: 0
836 @todo_wine@ErrLev:@space@@or_broken@ErrLev: 0
837 ErrLev: 0
838 --- setlocal with corresponding endlocal
839 globalval
840 localval
841 globalval
842 globalval
843 --- setlocal with no corresponding endlocal
844 globalval
845 localval
846 @todo_wine@globalval
847 ------------ Testing Errorlevel ------------
848 9009
849 1
850 errorlevel just right, good
851 errorlevel with leading zero just right, good
852 errorlevel with negative number OK
853 abc0def@or_broken@abc1def
854 errorlevel zero, good@or_broken@errorlevel nonzero, bad
855 7 should be 7
856 7 should still be 7
857 ------------ Testing GOTO ------------
858 goto with no leading space worked
859 goto with a leading space worked
860 goto with a leading tab worked
861 goto with a following space worked
862 ------------ Testing PATH ------------
863 PATH=original
864 PATH=try2
865 PATH=try3
866 ------------ Testing combined CALLs/GOTOs ------------
867 world
868 cheball
869 barbare
870 bar
871 foo
872 baz
873 cheball
874 barbare