cmd: Handle special case tokens=* in for /f.
[wine.git] / programs / cmd / tests / test_builtins.cmd.exp
blob0a7c75a2a26232b82d672300f732a0bca0506c93
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/
48 @pwd@>echo /@space@
51 @pwd@>echo/word
52 word
54 @pwd@>echo /word@space@
55 /word
57 @pwd@>echo off now@space@
58 off now
60 @pwd@>echo word@space@@space@
61 word@space@
63 @pwd@>echo word@space@@space@@space@
64 word@space@@space@
66 @pwd@>echo word@space@
67 word
69 @pwd@>echo@tab@word@space@
70 word
72 @pwd@>echo@tab@word@space@@tab@@space@
73 word@space@@tab@
75 @pwd@>echo@tab@word@tab@@space@@space@
76 word@tab@@space@
78 @pwd@>echo word@space@
79 word
81 @pwd@>echo@space@@tab@word@space@
82 @tab@word
84 @pwd@>echo@space@@space@@tab@word@space@
85 @space@@tab@word
87 @pwd@>echo@tab@@tab@word@space@
88 @tab@word
90 @pwd@>echo @tab@ on @space@@space@
91 --- @ with chains and brackets
93 @todo_wine@@pwd@>(echo the @ character chains until && ) && echo and can hide brackets || () ||@space@
94 @todo_wine@the @ character chains until
95 @todo_wine@we leave the current depth
96 @todo_wine@and can hide brackets
97 @todo_wine@---
98 noecho1
99 noecho2
100 echo3
101 ------------ Testing 'echo' [OFF] ------------
102 word
103 'singlequotedword'
104 "doublequotedword"
105 at-echoed-word
106 "/?"
109 word
110 .word
113 word
114 :word
117 word
118 /word
119 on again
120 word@space@
121 word@space@@space@
122 word
123 word
124 word@space@@tab@
125 word@tab@@space@
126 word
127 @tab@word
128 @space@@tab@word
129 @tab@word
130 ------------ Testing mixed echo modes ------------
131 @echo on
132 if 1==1 echo foo
133 if 1==1 @echo bar
134 @echo off
135 if 1==1 echo foo2
136 if 1==1 @echo bar2
138 @todo_wine@@pwd@>if 1 == 1 echo foo@space@
141 @todo_wine@@pwd@>if 1 == 1@space@
143 foo2
144 bar2
145 ------------ Testing parameterization ------------
146 'a', 'b', 'c'
147 '"a b c"', '', ''
148 '"a b"\c', '', ''
149 'a', '~`+', '.{}!+b'
150 'a', 'b', ''
151 '"a;b"', '', ''
152 'a', 'b', ''
153 'a[b]{c}(d)e', '', ''
154 'a', '', ''
155 second line
156 'a', 'b', 'c'
157 'a', 'b', 'c'
158 'a', 'b', ''
159 ------------ Testing rem ------------
161 @pwd@>rem Hello@space@
163 @pwd@>rem Hello@space@
165 @pwd@>rem Hello || foo@space@
167 @pwd@>rem echo lol@space@
169 @pwd@>rem echo foo & echo bar@space@
171 @pwd@>rem @tab@ Hello@space@
173 @pwd@>rem@tab@ Hello@space@
175 @pwd@>rem@tab@echo foo & echo bar@space@
176 ------------ Testing redirection operators ------------
177 --- stdout redirection
179 foo@space@
180 foo@tab@
181 foo@space@
182 foo@tab@
183 foo7@space@@or_broken@foo@tab@
184 foo9@space@@or_broken@foo@tab@
185 foo1
186 foo11
187 foo12
188 foo13
189 foo14
190 foo15
191 --- stdout appending
193 foo@space@
194 foob@space@
195 foob@space@
196 fooc@space@
197 foob@space@
198 fooc@space@
199 food1
200 foob@space@
201 fooc@space@
202 food1
203 food2
204 food21
205 @todo_wine@foo7@space@@space@@or_broken@not supported@space@
206 @todo_wine@foo@or_broken@not supported
207 --- redirections within IF statements
208 @todo_wine@foo1
209 -----
210 foo2
211 foo3
212 file does not exist, ok
213 foo4
214 baz5
215 baz6@space@
216 baz7
217 baz8
219 foo@space@
225 ------------ Testing circumflex escape character ------------
226 hello, world
227 hello, world
228 hell^o, world
229 hell^o, world
230 helloworld
231 hello
232 world
233 hello
235 finished
238 foo | echo bar
239 foo & echo bar
240 bak &
241 baz@space@
242 0@or_broken@1
243 foo > foo
245 ffoof
246 WINE_FOO=bar | baz
248 WINE_FOO=bar ^| baz
249 bar | baz
251 ------------ Testing chains ------------
252 --- chain success
258 @todo_wine@---
267 @todo_wine@---
276 @todo_wine@---
278 @todo_wine@j3
279 @todo_wine@---
281 @todo_wine@---
283 @todo_wine@---
284 --- chain failure
288 @todo_wine@---
296 @todo_wine@---
301 @todo_wine@g3
302 @todo_wine@---
304 @todo_wine@---
306 @todo_wine@i3
307 @todo_wine@---
313 @todo_wine@---
317 --- chain brackets
326 @todo_wine@---
335 @todo_wine@---
337 @todo_wine@---
339 @todo_wine@---
341 @todo_wine@---
347 @todo_wine@---
352 @todo_wine@---
354 @todo_wine@---
356 @todo_wine@---
362 @todo_wine@---
366 --- chain pipe
367 @todo_wine@a@space@
368 @todo_wine@a@space@
374 @todo_wine@---
380 @todo_wine@---
384 --- chain pipe input
385 a2:[a1,a2]
386 b3:[b2:[b1,b2],b3]@or_broken@b3:[b2:,b3]
387 c4:[c3:[c2:[c1,c2],c3],c4]@or_broken@c4:[c3:[c2:,c3],c4]@or_broken@c4:[c3:,c4]
388 d2:[d1,d2]
389 e3:[e2:[e1,e2],e3]@or_broken@e3:[e2:,e3]
390 f4:[f3:[f2:[f1,f2],f3],f4]@or_broken@f4:[f3:[f2:,f3],f4]@or_broken@f4:[f3:,f4]
391 --- chain else
394 @todo_wine@---
395 @todo_wine@c3
396 @todo_wine@---
397 @todo_wine@d3
398 @todo_wine@---
399 @todo_wine@---
400 @todo_wine@---
401 @todo_wine@---
402 @todo_wine@---
403 --- chain else (if true)
404 a1 else echo a2
405 b2 else echo b3
407 c2 else echo c3
409 @todo_wine@---
411 e2 else echo e3
413 g1 else echo g2
415 h1 else echo h2
416 @todo_wine@---
417 i1 else echo i2
419 @todo_wine@j2@space@
420 @todo_wine@---
424 @todo_wine@---
431 --- chain else (if false)
432 @todo_wine@j3
441 @todo_wine@---
444 ------------ Testing 'set' ------------
447 WINE_FOOBAR not defined
449 WINE_FOOBAR = baz
451 baz2
454 WINE_FOOBAR= bar
455 WINE_FOOBAR = baz2
456 WINE_FOOBAR = baz2
457 WINE_FOOBAR not defined
460 foobar
461 WINE_FOO not defined
462 WINE_BAZ=bazbaz
463 bazbaz
464 set "WINE_FOO=bar" should not include the quotes in the variable value
468 'foo@space@'
469 'foo@tab@'
470 'value@space@'
471 'value'
472 'jim fred'
473 '"jim" fred'
474 'jim fred'
475 'jim'
476 'apple"banana"grape'
477 ------------ Testing variable expansion ------------
478 ~p0 should be path containing batch file
479 @path@
480 @path@
481 ~dp0 should be directory containing batch file
482 @drive@@path@
483 @drive@@path@
484 CD value @pwd@@or_broken@CD value@space@
491 ERRORLEVEL
494 0ERRORLEVEL
500 ------------ Testing variable substrings ------------
504 'ty'@or_broken@''
505 't'@or_broken@''
506 ert@or_broken@qwerty
507 e@or_broken@qwerty
508 ''@or_broken@'qwerty'
509 r@or_broken@qwerty
510 ------------ Testing variable substitution ------------
511 --- in FOR variables
512 "A B"
514 "A B"
516 'A B'@or_broken@''
517 'C'@or_broken@''
518 @drive@@path@C D@or_broken@%~ff
519 @drive@@path@E@or_broken@%~ff
520 @drive@
521 @drive@
522 @path@@or_broken@%~pd
523 @path@@or_broken@%~pd
526 '.OOL'
527 '.TABC'
529 @todo_wine@'@drive@@shortpath@R S'@or_broken@''
530 @todo_wine@'@drive@@shortpath@T'@or_broken@''
531 @todo_wine@'@drive@@shortpath@ABCDEFGHIJK.LMNOP'@or_broken@''
532 ''@or_broken@'%~ai'
533 ''@or_broken@'%~ai'
534 '--a------'@or_broken@'--a--------'@or_broken@'--a--c---'@or_broken@'%~ai'
535 '5'@or_broken@'%~zi'
536 ''@or_broken@'%~ti'
537 ''@or_broken@'%~ti'
538 ''@or_broken@'%~zi'
539 ''@or_broken@'%~zi'
540 @drive@@path@
541 @drive@@path@
542 @drive@
543 @drive@
544 @drive@
545 @drive@
547 '.eh'
548 ',,,,,,,,,'
549 --- in parameters
550 "A B"
552 'A B'@or_broken@''
553 'C'@or_broken@''
554 @drive@@path@C D
555 @drive@@path@E
556 @drive@
557 @drive@
558 @path@
559 @path@
562 '.OOL'
563 '.TABC'
565 @todo_wine@'@drive@@shortpath@R S'@or_broken@''
566 @todo_wine@'@drive@@shortpath@T'@or_broken@''
567 @todo_wine@'@drive@@shortpath@ABCDEFGHIJK.LMNOP'@or_broken@''
568 @drive@@path@
569 @drive@@path@
570 @drive@
571 @drive@
572 @drive@
573 @drive@
575 '.eh'@or_broken@''
576 ------------ Testing variable delayed expansion ------------
577 --- default mode (load-time expansion)
579 !WINE_FOO!
582 --- runtime (delayed) expansion mode
584 foo@or_broken@!WINE_FOO!
586 bar@or_broken@foo
588 0@or_broken@1
590 !WINE_FOO!
591 --- using /V cmd flag
593 foo@or_broken@!WINE_FOO!
595 !WINE_FOO!
596 ------------ Testing conditional execution ------------
597 --- unconditional ampersand
598 foo1
599 bar2@space@
600 foo2
601 foobar deleted
602 --- on success conditional and
603 @todo_wine@foo3 not created
604 bar4@space@
605 foo4
606 --- on failure conditional or
607 foo5
608 foo6@space@
609 @todo_wine@------------ Testing cd ------------
610 singleFile
611 Current dir: @drive@@path@foobar@or_broken@Current dir:@space@
612 @drive@@path@foobar
613 @pwd@
614 @drive@@path@foobar
615 @pwd@
616 @drive@@path@foobar
617 @pwd@
618 @pwd@
619 @pwd@
620 @drive@@path@foobar\bar bak
621 @drive@@path@foobar\bar bak
622 @drive@@path@foobar\bar bak
623 @drive@@path@foobar\bar bak
624 @drive@@path@foobar\bar bak
625 @pwd@
626 @drive@@path@foobar
627 ------------ Testing type ------------
629 @pwd@>type foobaz@space@
632 @pwd@>echo ---@space@
635 ---1
637 ---2
639 ---3
640 ------------ Testing NUL ------------
645 foo created
646 Passed: file size check on a.a [7]@or_broken@Skipping file size check on NT4
647 Passed: file size check on b.b [8]@or_broken@Skipping file size check on NT4
648 Passed: file size check on a.a [7]@or_broken@Skipping file size check on NT4
649 Passed: file size check on b.b [8]@or_broken@Skipping file size check on NT4
650 Passed: file size check on a.a [7]@or_broken@Skipping file size check on NT4
651 Passed: file size check on subdir\a.a [8]@or_broken@Skipping file size check on NT4
652 ------------ Testing if/else ------------
653 --- if/else should work with blocks
654 if seems to work
655 else seems to work
656 if seems not to detect /c as parameter
657 else if seems to work
658 else if seems to work
659 else if seems to work
660 --- case sensitivity with and without /i option
661 if seems to default to case sensitivity
662 if /i seems to work
663 if /I seems to work
664 --- string comparisons
665 equal
666 non equal
667 non equal
668 equal
669 --- tabs handling
670 doom
671 doom
672 doom
674 quake
675 quake
676 quake
677 --- comparison operators
678 ------ for strings
679 LSS string can be used as operand for LSS comparison
680 floats are handled as strings
681 numbers in quotes are handled as strings
682 negative numbers as well@or_broken@NT4
683 if /i seems to work for LSS
684 A LSS B
685 A LSS AB
686 A LSS BA
687 A LSS AA
688 B LSS BA
689 AB LSS B
690 AB LSS BA
691 AA LSS B
692 AA LSS AB
693 AA LSS BA
694 b LSS B@or_broken@NT4
695 a LSS B@or_broken@NT4
696 a LSS B insensitive
697 A LSS b
698 A LSS b insensitive
699 A LEQ A
700 A LEQ B
701 A LEQ AB
702 A LEQ BA
703 A LEQ AA
704 B LEQ B
705 B LEQ BA
706 AB LEQ B
707 AB LEQ AB
708 AB LEQ BA
709 BA LEQ BA
710 AA LEQ B
711 AA LEQ AB
712 AA LEQ BA
713 AA LEQ AA
714 b LEQ B@or_broken@NT4
715 b LEQ B insensitive
716 a LEQ B@or_broken@NT4
717 a LEQ B insensitive
718 A LEQ b
719 A LEQ b insensitive
720 A EQU A
721 B EQU B
722 AB EQU AB
723 BA EQU BA
724 AA EQU AA
725 A EQU a insensitive
726 A NEQ B
727 A NEQ AB
728 A NEQ BA
729 A NEQ AA
730 B NEQ A
731 B NEQ AB
732 B NEQ BA
733 B NEQ AA
734 AB NEQ A
735 AB NEQ B
736 AB NEQ BA
737 AB NEQ AA
738 BA NEQ A
739 BA NEQ B
740 BA NEQ AB
741 BA NEQ AA
742 AA NEQ A
743 AA NEQ B
744 AA NEQ AB
745 AA NEQ BA
746 A GEQ A
747 B GEQ A
748 B GEQ B
749 B GEQ AB
750 B GEQ AA
751 AB GEQ A
752 AB GEQ AB
753 AB GEQ AA
754 BA GEQ A
755 BA GEQ B
756 BA GEQ AB
757 BA GEQ BA
758 BA GEQ AA
759 AA GEQ A
760 AA GEQ AA
761 B GTR A
762 B GTR AB
763 B GTR AA
764 AB GTR A
765 AB GTR AA
766 BA GTR A
767 BA GTR B
768 BA GTR AB
769 BA GTR AA
770 AA GTR A
771 ------------ Testing if/exist ------------
772 exist explicit works
773 exist explicit unknown file works
774 exist explicit in subdir works
775 exist simple wildcard works
776 exist wildcard works
777 negate exist wildcard works
778 exist wildcard bad subdir broken works
779 ------ for numbers
780 negative numbers handled
781 negative numbers handled
782 octal handled
783 also in negative form
784 hexa handled
785 also in negative form
786 11 LSS 101
787 0 LSS 1
788 0 LSS 10
789 0 LSS 9
790 1 LSS 10
791 1 LSS 9
792 9 LSS 10
793 0 LEQ 0
794 0 LEQ 1
795 0 LEQ 10
796 0 LEQ 9
797 1 LEQ 1
798 1 LEQ 10
799 1 LEQ 9
800 10 LEQ 10
801 9 LEQ 10
802 9 LEQ 9
803 0 EQU 0
804 1 EQU 1
805 10 EQU 10
806 9 EQU 9
807 octal ok
808 hexa ok
809 string/hexa compare ok
810 string/hexa compare ok
811 0 NEQ 1
812 0 NEQ 10
813 0 NEQ 9
814 1 NEQ 0
815 1 NEQ 10
816 1 NEQ 9
817 10 NEQ 0
818 10 NEQ 1
819 10 NEQ 9
820 9 NEQ 0
821 9 NEQ 1
822 9 NEQ 10
823 0 GEQ 0
824 1 GEQ 0
825 1 GEQ 1
826 10 GEQ 0
827 10 GEQ 1
828 10 GEQ 10
829 10 GEQ 9
830 9 GEQ 0
831 9 GEQ 1
832 9 GEQ 9
833 1 GTR 0
834 10 GTR 0
835 10 GTR 1
836 10 GTR 9
837 9 GTR 0
838 9 GTR 1
839 ------ for numbers and stringified numbers
840 strings and integers not equal
841 strings and integers not equal
843 "10" GEQ "1"
844 '1' GEQ 1@or_broken@NT4
845 1 GEQ "1"
846 "1" GEQ "1"
847 '1' GEQ "1"
848 "10" GEQ "1"
849 non NT4@or_broken@1 GEQ '1'
850 '1' GEQ '1'
852 1 GEQ "10"
854 '1' GEQ "10"
855 "10" GEQ "10"
856 --- unconditional ampersand after if one line
857 1@space@
858 2@space@
859 3 else echo 4
861 x@space@
863 x@space@
865 x@space@
867 x@space@
869 ------------ Testing for ------------
870 --- plain FOR
898 `echo
901 'echo
904 "echo A B"
905 "A B"
907 --- imbricated FORs
918 --- basic wildcards
919 bazbaz
920 --- wildcards in subdirs
921 pop\bar1@space@
922 pop\bar2.txt@space@
923 pop\bar3@space@
924 --- for /d
925 baz@space@
926 foo@space@
927 bar@space@
928 PASSED
929 xxx - Should be xxx
930 Expected second line
931 --- for /R
932 Plain directory enumeration
933 Plain directory enumeration from provided root
934 File enumeration
935 File enumeration from provided root
936 Mixed enumeration
937 Mixed enumeration from provided root
938 With duplicates enumeration
939 Strip missing wildcards, keep unwildcarded names
940 for /R passed
941 --- Complex wildcards unix and windows slash
942 Windows slashes, valid path
943 ASIS: foobar\baz\bazbaz
944 WC : foobar\baz\bazbaz
945 Windows slashes, invalid path
946 ASIS: foobar\jim\bazbaz
947 Unix slashes, valid path
948 ASIS: foobar/baz/bazbaz
949 WC : bazbaz
950 Unix slashes, invalid path
951 ASIS: foobar/jim/bazbaz
952 Done
953 --- for /L
964 ErrorLevel 0
965 ErrorLevel 0
985 --- set /a
986 ------ individual operations
987 WINE_foo correctly 3
988 WINE_foo correctly -1
989 WINE_foo correctly 3
990 WINE_foo correctly 6
991 WINE_foo correctly 10
992 WINE_foo correctly 4
993 WINE_foo correctly 4
994 WINE_foo correctly -4
995 WINE_foo correctly 0
996 WINE_foo correctly 2
997 WINE_foo correctly 2
998 WINE_foo correctly -2
999 WINE_foo correctly 1
1000 WINE_foo correctly 4
1001 WINE_foo correctly 0@or_broken@ERROR: WINE_foo incorrectly 1073741824 [0]
1002 WINE_foo correctly 0@or_broken@ERROR: WINE_foo incorrectly -1073741824 [0]
1003 WINE_foo correctly -4
1004 WINE_foo correctly 9
1005 WINE_foo correctly 2
1006 WINE_foo correctly 0
1007 WINE_foo correctly -1
1008 WINE_foo correctly -3
1009 WINE_foo correctly 0
1010 WINE_foo correctly 1
1011 WINE_foo correctly 1
1012 WINE_foo correctly 4
1013 WINE_foo correctly 1
1014 WINE_foo correctly 5
1015 WINE_foo correctly 5
1016 WINE_foo correctly 7
1017 WINE_foo correctly 5
1018 WINE_foo correctly 5
1019 WINE_foo correctly 5
1020 WINE_foo correctly 4
1021 WINE_foo correctly 6
1022 WINE_foo correctly 1
1023 WINE_foo correctly 4
1024 ------ precedence and grouping
1025 WINE_foo correctly 10
1026 WINE_foo correctly 18@or_broken@ERROR: WINE_foo incorrectly [18]
1027 WINE_foo correctly 2@or_broken@ERROR: WINE_foo incorrectly 0 [2]
1028 WINE_foo correctly 2@or_broken@ERROR: WINE_foo incorrectly [2]
1029 WINE_foo correctly 0@or_broken@ERROR: WINE_foo incorrectly 4 [0]
1030 WINE_foo correctly 4@or_broken@ERROR: WINE_foo incorrectly [4]
1031 WINE_foo correctly 3@or_broken@ERROR: WINE_foo incorrectly [3]
1032 WINE_foo correctly 3@or_broken@ERROR: WINE_foo incorrectly [3]
1033 ------ octal and hexadecimal
1034 WINE_foo correctly 18
1035 WINE_foo correctly 18
1036 WINE_foo correctly 15
1037 WINE_foo correctly 3
1038 ------ variables
1039 WINE_foo correctly 3@or_broken@ERROR: WINE_foo incorrectly 0 [3]
1040 WINE_bar correctly 3@or_broken@ERROR: WINE_bar incorrectly [3]
1041 WINE_foo correctly 3@or_broken@ERROR: WINE_foo incorrectly 0 [3]
1042 WINE_bar correctly 4@or_broken@ERROR: WINE_bar incorrectly [4]
1043 WINE_foo correctly 3@or_broken@ERROR: WINE_foo incorrectly 0 [3]
1044 WINE_bar correctly 3@or_broken@ERROR: WINE_bar incorrectly [3]
1045 WINE_baz correctly 4@or_broken@ERROR: WINE_baz incorrectly [4]
1046 WINE_foo correctly 9@or_broken@ERROR: WINE_foo incorrectly 3 [9]
1047 WINE_bar correctly 9@or_broken@ERROR: WINE_bar incorrectly 3 [9]
1048 WINE_foo correctly 0
1049 WINE_foo correctly 4
1050 WINE_bar correctly 4
1051 WINE_foo correctly -7@or_broken@ERROR: WINE_foo incorrectly 4 [-7]
1052 WINE_bar correctly -7@or_broken@ERROR: WINE_bar incorrectly 4 [-7]
1053 WINE_foo correctly -1@or_broken@ERROR: WINE_foo incorrectly -7 [-1]
1054 WINE_bar correctly -1@or_broken@ERROR: WINE_bar incorrectly -7 [-1]
1055 WINE_foo correctly 5@or_broken@ERROR: WINE_foo incorrectly 0 [5]
1056 WINE_bar correctly 1@or_broken@ERROR: WINE_bar incorrectly [1]
1057 WINE_foo correctly 4@or_broken@ERROR: WINE_foo incorrectly 1 [4]
1058 WINE_bar correctly 4@or_broken@ERROR: WINE_bar incorrectly 1 [4]
1059 WINE_foo correctly 1@or_broken@ERROR: WINE_foo incorrectly 4 [1]
1060 WINE_bar correctly 1@or_broken@ERROR: WINE_bar incorrectly 4 [1]
1061 WINE_foo correctly 0@or_broken@ERROR: WINE_foo incorrectly 1 [0]
1062 WINE_bar correctly 0@or_broken@ERROR: WINE_bar incorrectly 1 [0]
1063 WINE_foo correctly 5@or_broken@ERROR: WINE_foo incorrectly 0 [5]
1064 WINE_bar correctly 7@or_broken@ERROR: WINE_bar incorrectly [7]
1065 WINE_foo correctly 5@or_broken@ERROR: WINE_foo incorrectly 0 [5]
1066 WINE_bar correctly 7@or_broken@ERROR: WINE_bar incorrectly [7]
1067 WINE_foo correctly 19@or_broken@ERROR: WINE_foo incorrectly 0 [19]
1068 WINE_bar correctly 3@or_broken@ERROR: WINE_bar incorrectly [3]
1069 WINE_baz correctly 4
1070 --- quotes
1071 WINE_foo correctly 1
1072 WINE_foo correctly 1
1073 WINE_foo correctly 1
1074 WINE_bar correctly 2
1075 WINE_foo correctly 1
1076 WINE_bar correctly 2
1077 WINE_foo correctly 1
1078 WINE_bar correctly 2
1079 WINE_foo correctly 1
1080 WINE_bar correctly 2
1081 WINE_foo correctly 1
1082 WINE_bar correctly 2
1083 WINE_baz correctly 3
1084 WINE_foo correctly 1
1085 WINE_bar correctly 2
1086 WINE_baz correctly 3
1087 WINE_foo correctly 1
1088 WINE_bar correctly 2
1089 WINE_baz correctly 3
1090 WINE_foo correctly 1
1091 WINE_bar correctly 2
1092 WINE_baz correctly 3
1093 WINE_foo correctly 1
1094 WINE_bar correctly 2
1095 WINE_baz correctly 3
1096 WINE_foo correctly 1
1097 WINE_foo correctly 1
1098 WINE_bar correctly 5
1099 WINE_baz correctly 2
1100 WINE_foo correctly 18
1101 WINE_foo correctly 3
1102 WINE_bar correctly 7@or_broken@ERROR: WINE_bar incorrectly 4 [7]
1103 --- whitespace are ignored between double char operators
1104 WINE_foo correctly 10@or_broken@ERROR: WINE_foo incorrectly 4 [10]
1105 WINE_bar correctly 50@or_broken@ERROR: WINE_bar incorrectly 5 [50]
1106 WINE_foo correctly 772@or_broken@ERROR: WINE_foo incorrectly 4 [772]
1107 WINE_bar correctly 7720@or_broken@ERROR: WINE_bar incorrectly 5 [7720]
1108 --- invalid operator sequence
1111 ----- negative prefix
1112 WINE_foo correctly -1
1113 WINE_foo correctly 1@or_broken@ERROR: WINE_foo incorrectly [1]
1114 WINE_foo correctly 6
1115 WINE_foo correctly 0
1116 WINE_foo correctly 6
1117 WINE_foo correctly 2
1118 WINE_foo correctly 0@or_broken@ERROR: WINE_foo incorrectly [0]
1119 WINE_foo correctly 5
1120 WINE_foo correctly 3@or_broken@ERROR: WINE_foo incorrectly -5 [3]
1121 ----- assignment tests involving the end destination
1122 WINE_foo correctly 11@or_broken@ERROR: WINE_foo incorrectly 3 [11]
1123 WINE_foo correctly 6@or_broken@ERROR: WINE_foo incorrectly 2 [6]
1124 WINE_bar correctly 9@or_broken@ERROR: WINE_bar incorrectly [9]
1125 WINE_foo correctly 6@or_broken@ERROR: WINE_foo incorrectly 2 [6]
1126 WINE_bar correctly 10@or_broken@ERROR: WINE_bar incorrectly [10]
1127 WINE_baz correctly 7@or_broken@ERROR: WINE_baz incorrectly [7]
1128 WINE_foo correctly 7@or_broken@ERROR: WINE_foo incorrectly 2 [7]
1129 WINE_bar correctly 7@or_broken@ERROR: WINE_bar incorrectly 2 [7]
1130 ----- equal precedence on stack
1131 WINE_foo correctly 1@or_broken@ERROR: WINE_foo incorrectly 0 [1]
1132 WINE_foo correctly 0
1133 WINE_foo correctly 1@or_broken@ERROR: WINE_foo incorrectly [1]
1134 WINE_foo correctly 0@or_broken@ERROR: WINE_foo incorrectly [0]
1135 WINE_foo correctly 1@or_broken@ERROR: WINE_foo incorrectly [1]
1136 WINE_foo correctly -1@or_broken@ERROR: WINE_foo incorrectly [-1]
1137 WINE_foo correctly -1@or_broken@ERROR: WINE_foo incorrectly [-1]
1138 WINE_foo correctly 1@or_broken@ERROR: WINE_foo incorrectly [1]
1139 WINE_foo correctly 0@or_broken@ERROR: WINE_foo incorrectly [0]
1140 WINE_foo correctly -1
1141 WINE_foo correctly 0@or_broken@ERROR: WINE_foo incorrectly -1 [0]
1142 WINE_foo correctly 0
1143 WINE_foo correctly 1@or_broken@ERROR: WINE_foo incorrectly 0 [1]
1144 WINE_foo correctly -1@or_broken@ERROR: WINE_foo incorrectly 0 [-1]
1145 WINE_foo correctly 25@or_broken@ERROR: WINE_foo incorrectly 20 [25]
1146 WINE_foo correctly 20
1147 WINE_foo correctly 1
1148 WINE_foo correctly 4
1149 WINE_foo correctly 7
1150 WINE_foo correctly 8@or_broken@ERROR: WINE_foo incorrectly 4 [8]
1151 WINE_foo correctly 6@or_broken@ERROR: WINE_foo incorrectly 5 [6]
1152 WINE_bar correctly 6@or_broken@ERROR: WINE_bar incorrectly 5 [6]
1153 --- for /F
1154 ------ string argument
1156 a@or_broken@no output
1158 a@or_broken@no output
1160 a@or_broken@no output
1162 a@or_broken@no output
1164 a@or_broken@no output
1165 ------ fileset argument
1166 --------- basic blank handling
1173 --------- multi-line with empty lines
1177 --------- multiple files
1188 ------ command argument
1189 Passed1@or_broken@Missing functionality - Broken1
1190 Passed2@or_broken@Missing functionality - Broken2
1191 Passed3@or_broken@Missing functionality - Broken3
1192 ------ eol option
1193 and@or_broken@Broken NT4 functionality1
1194 Line@or_broken@Broken NT4 functionality2
1195 Line@or_broken@Broken NT4 functionality3
1199 no output
1200 no output
1201 ------ delims option
1203 a@space@
1207 foo bar baz
1209 ------ skip option
1211 no output
1212 no output
1215 no output
1216 ------ tokens= option
1217 h=%h i=a j=%j k=%k l=%l m=%m o=%o
1218 h=%h i=b j=%j k=%k l=%l m=%m o=%o
1219 h=%h i=a j=c k=e l=f m=g o=%o
1220 h=%h i=a j=e k=f g l=%l m=%m o=%o
1221 h=%h i=f j=i k=j k l m n o p q r s t u v w x y z l=%l m=%m o=%o
1222 h=%h i=f j=i k=j k l m n;;== o p q r s t u v w x y z l=%l m=%m o=%o
1223 h=%h i=a j=b k=c l=d e f g m=%m n=%n o=%o
1224 h=%h i=a j=b k=c l=d e f g m=%m n=%n o=%o
1225 h=%h i=a j=b k= l= m=%m n=%n o=%o
1226 h=%h i=a j=e k=y l=z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z m=%m n=%n o=%o
1227 h=%h i=a j=b k= l= m= n=%n o=%o
1228 h=%h i=a j=b k= l= m= n= o=%o
1229 u=a v=b w=c x=d y=e z=f A=%A a=%a
1230 @todo_wine@U=a V=b W=c X=d Y=e Z=f A=%A a=m
1231 h=%h i=a j=b k=c l=e m=%m o=%o@or_broken@h=%h i=a j=b k=c l=e m= o=%o
1232 h=%h i=e j=%j k=%k l=%l m=%m o=%o
1233 h=%h i=a j=b k=c l=d e f g m=%m n=%n o=%o@or_broken@h=%h i=a j=b k=c l=d e f g m= n=%n o=%o
1234 h=%h i=a j=c k= l= m=%m n=%n o=%o@or_broken@h=%h i=a j=c k= l= m= n=%n o=%o
1235 h=%h i=b j=c k= l= m=%m n=%n o=%o@or_broken@h=%h i=b j=c k= l= m= n=%n o=%o
1236 h=%h i=b j=c k= l= m=%m n=%n o=%o@or_broken@h=%h i=b j=c k= l= m= n=%n o=%o
1237 1:3.14,%B
1238 2:3.14,
1239 ------ parameter splitting
1240 :forFParameterSplittingFunc myparam1=myvalue1 myparam2=myparam2 mytest@space@@space@@space@
1241 :forFParameterSplittingFunc myparam1=myvalue1 myparam2=myparam2 mytest@space@@space@@space@
1242 4:3.14,%B
1243 5:3,14
1244 6:14,
1245 ------------ Testing del ------------
1246 deleting 'file'
1247 errorlevel is 0, good
1248 successfully deleted 'file'
1249 attempting to delete 'file', even though it is not present
1250 errorlevel is 0, good
1251 ------------ Testing del /a ------------
1252 not-r.test not found after delete, good
1253 r.test found before delete, good
1254 r.test not found after delete, good
1255 ------------ Testing del /q ------------
1256 del /q * succeeded on file1
1257 del /q * succeeded on file2.dat
1258 ------------ Testing del /s ------------
1259 ------------ Testing rename ------------
1260 --- ren and rename are synonymous
1261 foo renamed to bar
1262 bar renamed to foo
1263 --- name collision
1266 --- rename read-only files
1267 read-only file renamed
1268 --- rename directories
1269 dir renamed
1270 read-only dir renamed
1271 --- rename in other directory
1272 rename impossible in other directory
1273 original file still present
1274 ------------ Testing move ------------
1275 --- file move
1276 file move succeeded
1277 @todo_wine@file move with overwrite succeeded@or_broken@file overwrite impossible!
1278 @todo_wine@bar@or_broken@baz
1279 read-only files are moveable
1280 file moved in subdirectory
1281 @todo_wine@moving a file to itself is a no-op@or_broken@moving a file to itself should be a no-op!
1282 @todo_wine@ErrorLevel: 0@or_broken@ErrorLevel: 1
1283 --- directory move
1284 simple directory move succeeded
1285 moving a directory to itself gives error; errlevel 1
1286 ------ dir in dir move
1288 bar2
1289 foo2
1290 ------------ Testing mkdir ------------
1291 --- md and mkdir are synonymous
1294 --- creating an already existing directory/file must fail
1297 --- multilevel path creation
1306 --- trailing backslashes
1308 dir created
1310 --- invalid chars
1311 mkdir ? gives errorlevel 1
1312 mkdir ?\foo gives errorlevel 1
1313 mkdir foo\? gives errorlevel 1
1314 ok, foo created
1315 mkdir foo\bar\? gives errorlevel 1
1316 ok, foo\bar created
1317 --- multiple directories at once
1318 foo created
1319 bar created
1320 foobar created
1321 bar\baz created
1322 bazbaz created
1323 zabzab created
1324 mkdir foo\* errorlevel 1
1325 ok, foo created
1326 ------------ Testing rmdir ------------
1328 dir removed
1330 dir removed
1333 file not removed
1335 non-empty dir not removed
1337 non-empty dir not removed
1338 recursive rmdir succeeded
1339 recursive rmdir succeeded
1340 foo removed
1341 bar removed
1342 foobar removed
1343 bar\baz removed
1344 ------------ Testing pushd/popd ------------
1345 @pwd@
1346 --- popd is no-op when dir stack is empty
1347 @pwd@
1348 --- pushing non-existing dir
1349 @pwd@
1350 --- basic behaviour
1351 @drive@@path@foobar
1352 @pwd@
1353 @drive@@path@foobar\baz
1354 @drive@@path@foobar
1355 @drive@@path@foobar
1356 @pwd@
1357 @drive@@path@foobar
1358 @pwd@
1359 ------------ Testing attrib ------------
1360 A @drive@@path@foobar\foo@or_broken@A @drive@@path@foobar\foo@or_broken@A I @drive@@path@foobar\foo
1361 --- read-only attribute
1362 A R @drive@@path@foobar\foo@or_broken@A R @drive@@path@foobar\foo@or_broken@A R I @drive@@path@foobar\foo
1364 foo original contents
1365 Read-only file not deleted
1366 Read-only file forcibly deleted
1367 --- recursive behaviour
1368 A @drive@@path@foobar\baz\level2@or_broken@A @drive@@path@foobar\baz\level2@or_broken@A I @drive@@path@foobar\baz\level2
1369 A R @drive@@path@foobar\level1@or_broken@A R @drive@@path@foobar\level1@or_broken@A R I @drive@@path@foobar\level1
1370 A R @drive@@path@foobar\baz\level2@or_broken@A R @drive@@path@foobar\baz\level2@or_broken@A R I @drive@@path@foobar\baz\level2
1371 A @drive@@path@foobar\bar@or_broken@A @drive@@path@foobar\bar@or_broken@A I @drive@@path@foobar\bar
1372 --- folders processing
1373 @drive@@path@foobar@or_broken@ @drive@@path@foobar@or_broken@ I @drive@@path@foobar
1374 @todo_wine@ R @drive@@path@foobar\baz@or_broken@ R @drive@@path@foobar\baz@or_broken@ @drive@@path@foobar\baz@or_broken@ R I @drive@@path@foobar\baz
1375 A @drive@@path@foobar\baz\toto@or_broken@A @drive@@path@foobar\baz\toto@or_broken@A I @drive@@path@foobar\baz\toto
1376 toto
1377 lulu
1378 file created in read-only dir
1379 ------------ Testing assoc ------------
1380 --- setting association
1382 .foo=bar
1383 .foo=bar
1385 .foo=bar
1386 --- resetting association
1390 ------------ Testing ftype ------------
1391 --- setting association
1393 footype=foo_opencmd
1394 .foo=footype
1395 footype=foo_opencmd
1397 footype=foo_opencmd
1398 --- resetting association
1399 @todo_wine@original value@or_broken@buggyXP@or_broken@!WINE_FOO!
1400 ------------ Testing CALL ------------
1401 --- external script
1402 foo@space@
1403 foo 8
1404 foo@space@@space@
1405 foo bar@space@
1406 foo ""@space@
1407 "" bar@space@
1408 foo ''@space@
1409 '' bar@space@
1410 --- internal routines
1411 bar :testRoutine
1412 foo@space@
1413 foo bar
1414 foo ""
1415 "" bar
1416 foo ''
1417 '' bar
1418 --- with builtins
1420 foo created
1421 Should expand foobaz
1422 batfile
1423 robinfile
1426 non-builtin dir
1427 Line one
1428 Line two
1429 Get if
1430 ... and else!
1431 passed
1432 ------------ Testing SHIFT ------------
1433 'p1' 'p2' 'p3' 'p4' 'p5'
1434 'p2' 'p3' 'p4' 'p5' ''
1435 'p3' 'p4' 'p5' '' ''
1436 'p3' 'p5' '' '' ''
1437 'p3' 'p5' '' '' ''
1438 'p5' '' '' '' ''
1439 ------------ Testing cmd invocation ------------
1440 --- a batch file can delete itself
1441 file correctly deleted
1442 --- a batch file can alter itself
1444 ---------- Testing copy
1445 Passed: Found expected dummy.file
1446 Passed: Found expected dir1\file1
1447 Passed: Found expected dir1\file1
1448 Passed: Found expected dir1\file99
1449 Passed: Found expected file1
1450 Passed: Did not find dir2
1451 Passed: Did not find dir2\file1
1452 Passed: Found expected dir1\file1
1453 Passed: Found expected dir1\file2
1454 Passed: Found expected dir1\file3
1455 Passed: Found expected dir1\file1
1456 Passed: Found expected dir1\file2
1457 Passed: Found expected dir1\file3
1458 Passed: Found expected file1
1459 Passed: Found expected file2
1460 Passed: Found expected file3
1461 Passed: Did not find dir2
1462 Passed: Did not find dir2\file1
1463 Passed: Did not find dir2\file2
1464 Passed: Did not find dir2\file3
1465 Passed: Found expected testfile
1466 Passed: Found expected testfile
1467 Passed: Found expected testfile
1468 Passed: Found expected testfile
1469 Passed: Found expected testfile
1470 Passed: Found expected dir1\fred
1471 Passed: Found expected dir1\fred
1472 Passed: Found expected fred
1473 Passed: Found expected fred
1474 Passed: file size check on file1 [5]@or_broken@Skipping file size check on NT4
1475 Passed: file size check on file2 [8]@or_broken@Skipping file size check on NT4
1476 Passed: file size check on file3 [11]@or_broken@Skipping file size check on NT4
1477 Passed: file size check on file1_default [5]@or_broken@Skipping file size check on NT4
1478 Passed: file size check on file1_default2 [5]@or_broken@Skipping file size check on NT4
1479 Passed: file size check on file1_plus_eof [6]@or_broken@Skipping file size check on NT4
1480 Passed: file size check on file2_plus_eof [9]@or_broken@Skipping file size check on NT4
1481 Passed: file size check on file3_plus_eof [12]@or_broken@Skipping file size check on NT4
1482 Passed: file size check on file12_plus_eof [14]@or_broken@Skipping file size check on NT4
1483 Passed: file size check on file12_no_eof [13]@or_broken@Skipping file size check on NT4
1484 Passed: file size check on file12_eof2 [14]@or_broken@Skipping file size check on NT4
1485 Passed: file size check on file1 [24]@or_broken@Skipping file size check on NT4
1486 Passed: file size check on file2 [16]@or_broken@Skipping file size check on NT4
1487 Passed: file size check on file3 [13]@or_broken@Skipping file size check on NT4
1488 Passed: file size check on file1_binary_srccopy [6]@or_broken@Skipping file size check on NT4
1489 Passed: file size check on file1_ascii_srccopy [5]@or_broken@Skipping file size check on NT4
1490 Passed: file size check on file123_default_copy [25]@or_broken@Skipping file size check on NT4
1491 Passed: file size check on file123_ascii_copy [25]@or_broken@Skipping file size check on NT4
1492 Passed: file size check on file123_binary_copy [27]@or_broken@Skipping file size check on NT4
1493 Passed: file size check on file123_mixed_copy1 [26]@or_broken@Skipping file size check on NT4
1494 Passed: file size check on file123_mixed_copy2 [27]@or_broken@Skipping file size check on NT4
1495 Passed: file size check on file123_mixed_copy3 [26]@or_broken@Skipping file size check on NT4
1496 Passed: file size check on file123_mixed_copy4 [25]@or_broken@Skipping file size check on NT4
1497 Passed: file size check on file123_mixed_copy5 [28]@or_broken@Skipping file size check on NT4
1498 Passed: file size check on file123_mixed_copy6 [19]@or_broken@Skipping file size check on NT4
1499 Passed: file size check on file123_mixed_copy7 [6]@or_broken@Skipping file size check on NT4
1500 Passed: file size check on file123_mixed_copy8 [7]@or_broken@Skipping file size check on NT4
1501 Passed: errorlevel invalid check 1
1502 Passed: Did not find dir1\file1
1503 Passed: errorlevel invalid check 2
1504 Passed: errorlevel invalid check 3
1505 ------------ Testing setlocal/endlocal ------------
1506 --- enable/disable extensions
1507 @todo_wine@ErrLev:@space@
1508 ErrLev: 0
1509 ErrLev: 0
1510 @todo_wine@ErrLev:@space@@or_broken@ErrLev: 0
1511 ErrLev: 0
1512 --- setlocal with corresponding endlocal
1513 globalval
1514 localval
1515 @drive@@path@foobar\foobar2
1516 globalval
1517 @drive@@path@foobar
1518 globalval
1519 @drive@@path@foobar
1520 --- setlocal with no corresponding endlocal
1521 globalval
1522 localval
1523 @drive@@path@foobar\foobar2
1524 globalval
1525 @drive@@path@foobar
1526 --- setlocal within same batch program
1527 Var1 ok 1
1528 Var2 ok 2
1529 Var3 ok 3
1530 Directory is ok 1
1531 Var1 ok 1
1532 Var2 ok 2
1533 Var3 ok 3
1534 Directory is ok 2
1535 Var1 ok 1
1536 Var2 ok 2
1537 Var3 ok 3
1538 Directory is ok 3
1539 --- Mismatched set and end locals
1540 --- Extra setlocal in called batch
1541 value2
1542 2set1endvalue1
1543 @drive@@path@foobar\foodir3
1544 Finished:
1545 value2
1546 @drive@@path@foobar\foodir2
1547 value1
1548 @drive@@path@foobar
1549 --- Extra endlocal in called batch
1550 value2
1551 value2
1552 @drive@@path@foobar\foodir2
1553 value2
1554 @drive@@path@foobar\foodir2
1555 Finished:
1556 value2
1557 @drive@@path@foobar\foodir2
1558 value1
1559 @drive@@path@foobar
1560 --- endlocal in called function rather than batch pgm is ineffective
1569 ------------ Testing Errorlevel ------------
1570 9009
1572 errorlevel just right, good
1573 errorlevel with leading zero just right, good
1574 errorlevel with negative number OK
1575 abc0def@or_broken@abc1def
1576 errorlevel zero, good@or_broken@errorlevel nonzero, bad
1577 7 should be 7
1578 7 should still be 7
1579 ------------ Testing GOTO ------------
1580 goto with no leading space worked
1581 goto with colon and no leading space worked
1582 goto with a leading space worked
1583 goto with a leading tab worked
1584 goto with a following space worked
1585 goto with following amphersands worked
1586 goto with redirections worked
1587 Ignoring double colons worked
1588 label with mixed whitespace and no echo worked
1589 Correctly ignored trailing information
1590 Begin:
1591 ..First sub
1592 ..First sub
1593 Middle:
1594 ..Third sub
1595 ..Third sub
1596 Near end:
1597 ..Fourth sub
1598 ..Fourth sub
1599 At end:
1600 ..First sub
1601 ..First sub
1602 Finished
1603 ------------ Testing PATH ------------
1604 PATH=original
1605 PATH=try2
1606 PATH=try3
1607 ------------ Testing start /W ------------
1608 start /W seems to really wait
1609 ------------ Testing changing the drive letter ----------
1610 Normal:
1611 Normal+space
1612 Normal+space+garbage
1613 Quoted should fail
1614 Normal+tab
1615 Normal+tab+garbage
1616 ------------ Testing combined CALLs/GOTOs ------------
1617 world
1618 cheball
1619 barbare
1623 cheball
1624 barbare