| |
| @pwd@>echo Tests for cmd's builtin commands@space@ |
| Tests for cmd's builtin commands |
| |
| @pwd@>echo ------------ Testing 'echo' [ON] ------------@space@ |
| ------------ Testing 'echo' [ON] ------------ |
| |
| @pwd@>echo word@space@ |
| word |
| |
| @pwd@>echo 'singlequotedword'@space@ |
| 'singlequotedword' |
| |
| @pwd@>echo "doublequotedword"@space@ |
| "doublequotedword" |
| at-echoed-word |
| |
| @pwd@>echo "/?"@space@ |
| "/?" |
| |
| @pwd@>echo. |
| |
| |
| @pwd@>echo .@space@ |
| . |
| |
| @pwd@>echo.word |
| word |
| |
| @pwd@>echo .word@space@ |
| .word |
| |
| @pwd@>echo: |
| |
| |
| @pwd@>echo :@space@ |
| : |
| |
| @pwd@>echo:word |
| word |
| |
| @pwd@>echo :word@space@ |
| :word |
| |
| @pwd@>echo off now@space@ |
| off now |
| |
| @pwd@>echo word@space@@space@ |
| word@space@ |
| |
| @pwd@>echo word@space@@space@@space@ |
| word@space@@space@ |
| |
| @todo_wine@@pwd@>echo word@space@ |
| word |
| |
| @pwd@>echo@tab@word@space@ |
| word |
| |
| @pwd@>echo@tab@word@space@@tab@@space@ |
| word@space@@tab@ |
| |
| @pwd@>echo@tab@word@tab@@space@@space@ |
| word@tab@@space@ |
| |
| @todo_wine@@pwd@>echo word@space@ |
| word |
| |
| @pwd@>echo@space@@tab@word@space@ |
| @tab@word |
| |
| @pwd@>echo@space@@space@@tab@word@space@ |
| @space@@tab@word |
| |
| @pwd@>echo@tab@@tab@word@space@ |
| @tab@word |
| |
| @pwd@>echo @tab@ on @space@@space@ |
| ------------ Testing 'echo' [OFF] ------------ |
| word |
| 'singlequotedword' |
| "doublequotedword" |
| at-echoed-word |
| "/?" |
| |
| . |
| word |
| .word |
| |
| : |
| word |
| :word |
| on again |
| word@space@ |
| word@space@@space@ |
| word |
| word |
| word@space@@tab@ |
| word@tab@@space@ |
| word |
| @tab@word |
| @space@@tab@word |
| @tab@word |
| ------------ Testing mixed echo modes ------------ |
| @echo on |
| if 1==1 echo foo |
| if 1==1 @echo bar |
| @echo off |
| if 1==1 echo foo2 |
| if 1==1 @echo bar2 |
| |
| @todo_wine@@pwd@>if 1 == 1 echo foo@space@ |
| foo |
| |
| @todo_wine@@pwd@>if 1 == 1@space@ |
| bar |
| foo2 |
| bar2 |
| ------------ Testing rem ------------ |
| |
| @pwd@>rem Hello@space@ |
| |
| @pwd@>rem Hello@space@ |
| |
| @pwd@>rem Hello || foo@space@ |
| |
| @pwd@>rem echo lol@space@ |
| |
| @pwd@>rem echo foo & echo bar@space@ |
| |
| @pwd@>rem @tab@ Hello@space@ |
| |
| @pwd@>rem@tab@ Hello@space@ |
| |
| @pwd@>rem@tab@echo foo & echo bar@space@ |
| ------------ Testing redirection operators ------------ |
| --- stdout redirection |
| foo |
| foo@space@ |
| foo@tab@ |
| foo@space@ |
| foo@tab@ |
| foo7@space@@or_broken@foo@tab@ |
| foo9@space@@or_broken@foo@tab@ |
| foo1 |
| foo11 |
| foo12 |
| --- stdout appending |
| foo |
| foo@space@ |
| foob@space@ |
| foob@space@ |
| fooc@space@ |
| foob@space@ |
| fooc@space@ |
| food1 |
| foob@space@ |
| fooc@space@ |
| food1 |
| food2 |
| food21 |
| @todo_wine@foo7@space@@space@@or_broken@not supported@space@ |
| @todo_wine@foo@or_broken@not supported |
| --- redirections within IF statements |
| @todo_wine@foo1 |
| ----- |
| foo2 |
| foo3 |
| file does not exist, ok |
| foo4 |
| baz5 |
| baz6@space@ |
| baz7 |
| baz8 |
| baz |
| foo@space@ |
| baz |
| foo |
| A |
| B |
| C |
| ------------ Testing circumflex escape character ------------ |
| @todo_wine@hello, world |
| @todo_wine@hello, world |
| @todo_wine@hell^o, world |
| @todo_wine@hell^o, world |
| baz |
| @todo_wine@baz |
| @todo_wine@foo | echo bar |
| @todo_wine@foo & echo bar |
| @todo_wine@bak & |
| baz@space@ |
| 0@or_broken@1 |
| @todo_wine@foo > foo |
| @todo_wine@< |
| @todo_wine@ffoof |
| @todo_wine@FOO=bar | baz |
| @todo_wine@0 |
| @todo_wine@FOO=bar ^| baz |
| @todo_wine@bar | baz |
| @todo_wine@0 |
| ------------ Testing 'set' ------------ |
| 1 |
| @todo_wine@0 |
| FOOBAR not defined |
| @todo_wine@ baz |
| FOOBAR = baz |
| @todo_wine@0 |
| @todo_wine@ baz2 |
| @todo_wine@0 |
| bar |
| @todo_wine@FOOBAR= bar |
| @todo_wine@FOOBAR = baz2 |
| FOOBAR = baz2 |
| FOOBAR not defined |
| 1 |
| bar |
| foobar |
| FOO not defined |
| BAZ=bazbaz |
| bazbaz |
| set "FOO=bar" should not include the quotes in the variable value |
| bar |
| foo |
| '' |
| 'foo@space@' |
| 'foo@tab@' |
| ------------ Testing variable expansion ------------ |
| ~dp0 should be directory containing batch file |
| @pwd@\ |
| @pwd@\ |
| CD value @pwd@@or_broken@CD value@space@ |
| % |
| P |
| P |
| S |
| P |
| PS |
| ERRORLEVEL |
| 0 |
| 00 |
| 0ERRORLEVEL |
| 0 |
| 0% |
| P0 |
| 0S |
| P0S |
| ------------ Testing variable substrings ------------ |
| q |
| qwe |
| er |
| @todo_wine@'ty'@or_broken@'' |
| 't'@or_broken@'' |
| ert@or_broken@qwerty |
| e@or_broken@qwerty |
| ''@or_broken@'qwerty' |
| r@or_broken@qwerty |
| ------------ Testing variable substitution ------------ |
| --- in FOR variables |
| @todo_wine@"A B" |
| C |
| 'A B'@or_broken@'' |
| 'C'@or_broken@'' |
| @pwd@\C D@or_broken@%~ff |
| @pwd@\E@or_broken@%~ff |
| @drive@ |
| @drive@ |
| @path@@or_broken@%~pd |
| @path@@or_broken@%~pd |
| L M |
| N |
| '.OOL' |
| '.TABC' |
| '' |
| @todo_wine@'@drive@@shortpath@R S'@or_broken@'' |
| @todo_wine@'@drive@@shortpath@T'@or_broken@'' |
| @todo_wine@'@drive@@shortpath@ABCDEFGHIJK.LMNOP'@or_broken@'' |
| @todo_wine@''@or_broken@'%~ai' |
| @todo_wine@''@or_broken@'%~ai' |
| @todo_wine@'--a------'@or_broken@'%~ai' |
| @todo_wine@''@or_broken@'%~ti' |
| @todo_wine@''@or_broken@'%~ti' |
| @todo_wine@''@or_broken@'%~zi' |
| @todo_wine@''@or_broken@'%~zi' |
| @drive@@path@ |
| @drive@@path@ |
| @drive@ |
| @drive@ |
| @drive@ |
| @drive@ |
| '' |
| '.eh' |
| --- in parameters |
| @todo_wine@"A B" |
| C |
| @todo_wine@'A B'@or_broken@'' |
| 'C'@or_broken@'' |
| @todo_wine@@pwd@\C D |
| @pwd@\E |
| @drive@ |
| @drive@ |
| @path@ |
| @path@ |
| @todo_wine@L M |
| N |
| @todo_wine@'.OOL' |
| '.TABC' |
| '' |
| @todo_wine@'@drive@@shortpath@R S'@or_broken@'' |
| @todo_wine@'@drive@@shortpath@T'@or_broken@'' |
| @todo_wine@'@drive@@shortpath@ABCDEFGHIJK.LMNOP'@or_broken@'' |
| @drive@@path@ |
| @drive@@path@ |
| @drive@ |
| @drive@ |
| @drive@ |
| @drive@ |
| '' |
| '.eh'@or_broken@'' |
| ------------ Testing variable delayed expansion ------------ |
| --- default mode (load-time expansion) |
| foo |
| !FOO! |
| foo |
| foo |
| --- runtime (delayed) expansion mode |
| foo |
| @todo_wine@foo@or_broken@!FOO! |
| foo |
| @todo_wine@bar@or_broken@foo |
| 0 |
| 0@or_broken@1 |
| foo |
| !FOO! |
| --- using /V cmd flag |
| foo |
| @todo_wine@foo@or_broken@!FOO! |
| foo |
| !FOO! |
| ------------ Testing conditional execution ------------ |
| --- unconditional ampersand |
| foo1 |
| bar2@space@ |
| foo2 |
| foobar deleted |
| --- on success conditional and |
| @todo_wine@foo3 not created |
| bar4@space@ |
| foo4 |
| --- on failure conditional or |
| foo5 |
| foo6@space@ |
| @todo_wine@------------ Testing cd ------------ |
| singleFile |
| Current dir: @pwd@\foobar@or_broken@Current dir:@space@ |
| @pwd@\foobar |
| @pwd@ |
| @pwd@\foobar |
| @pwd@ |
| @pwd@\foobar |
| @pwd@ |
| @pwd@ |
| @pwd@ |
| @pwd@\foobar\bar bak |
| @pwd@\foobar\bar bak |
| @pwd@\foobar\bar bak |
| @pwd@ |
| @pwd@\foobar |
| ------------ Testing type ------------ |
| |
| @pwd@>type foobaz@space@ |
| bar |
| |
| @pwd@>echo ---@space@ |
| --- |
| bar |
| --- |
| ------------ Testing NUL ------------ |
| bar |
| bar |
| bar |
| NUL |
| @todo_wine@foo created |
| ------------ Testing if/else ------------ |
| if/else should work with blocks |
| if seems to work |
| else seems to work |
| if seems not to detect /c as parameter |
| Testing case sensitivity with and without /i option |
| if seems to default to case sensitivity |
| if /i seems to work |
| if /I seems to work |
| Testing string comparisons |
| equal |
| non equal |
| non equal |
| equal |
| Testing tabs handling |
| doom |
| doom |
| doom |
| lol |
| quake |
| quake |
| quake |
| ------------ Testing for ------------ |
| --- plain FOR |
| A |
| B |
| C |
| %I |
| %I |
| %I |
| %j |
| %j |
| %j |
| A |
| B |
| C |
| 1 |
| 4 |
| 1 |
| A |
| B |
| C |
| X |
| X2 |
| X3 |
| foo |
| M |
| X |
| M |
| N |
| O |
| `echo |
| A |
| B` |
| 'echo |
| A |
| B' |
| @todo_wine@"echo A B" |
| @todo_wine@"A B" |
| C |
| --- imbricated FORs |
| @todo_wine@X Y |
| @todo_wine@X Y |
| @todo_wine@A C |
| @todo_wine@A D |
| @todo_wine@B C |
| @todo_wine@B D |
| @todo_wine@A C |
| @todo_wine@A D |
| @todo_wine@B C |
| @todo_wine@B D |
| --- basic wildcards |
| bazbaz |
| --- for /d |
| baz |
| foo |
| bar |
| --- for /L |
| 1 |
| 3 |
| 5 |
| 1 |
| 3 |
| 5 |
| 0 |
| 2 |
| 1 |
| -1 |
| @todo_wine@ErrorLevel 0 |
| @todo_wine@ErrorLevel 0 |
| --- for /a |
| ------ individual operations |
| 0 |
| @todo_wine@3 |
| @todo_wine@-1 |
| @todo_wine@3 |
| @todo_wine@6 |
| @todo_wine@10 |
| @todo_wine@4 |
| @todo_wine@4 |
| @todo_wine@-4 |
| 0 |
| @todo_wine@2 |
| @todo_wine@2 |
| @todo_wine@-2 |
| @todo_wine@1 |
| @todo_wine@4 |
| 0@or_broken@1073741824 |
| 0@or_broken@-1073741824 |
| @todo_wine@-4 |
| @todo_wine@9 |
| @todo_wine@2 |
| 0 |
| @todo_wine@-1 |
| @todo_wine@-3 |
| 0 |
| @todo_wine@1 |
| @todo_wine@1 |
| @todo_wine@4 |
| @todo_wine@1 |
| @todo_wine@5 |
| @todo_wine@5 |
| @todo_wine@7 |
| @todo_wine@5 |
| @todo_wine@5 |
| @todo_wine@5 |
| @todo_wine@4 |
| @todo_wine@6 |
| @todo_wine@1 |
| ------ precedence and grouping |
| @todo_wine@4 |
| @todo_wine@10 |
| @todo_wine@18@or_broken@10 |
| @todo_wine@2@or_broken@0 |
| @todo_wine@2@or_broken@0 |
| 0@or_broken@4 |
| @todo_wine@4 |
| @todo_wine@3@or_broken@4 |
| ------ octal and hexadecimal |
| @todo_wine@3@or_broken@4 |
| @todo_wine@18 |
| @todo_wine@18 |
| @todo_wine@15 |
| ------ variables |
| @todo_wine@3 |
| @todo_wine@3@or_broken@foo not defined |
| @todo_wine@3@or_broken@0 |
| @todo_wine@3@or_broken@0 |
| @todo_wine@3@or_broken@0 |
| @todo_wine@9@or_broken@0 |
| 0 |
| @todo_wine@4@or_broken@0 |
| @todo_wine@-7@or_broken@0 |
| @todo_wine@-1@or_broken@0 |
| @todo_wine@5@or_broken@0 |
| @todo_wine@4@or_broken@0 |
| @todo_wine@1@or_broken@0 |
| 0 |
| @todo_wine@5@or_broken@0 |
| |
| --- for /F |
| ------ string argument |
| a |
| a |
| a |
| a |
| a |
| ------ fileset argument |
| --------- basic blank handling |
| a |
| a |
| a |
| a |
| a |
| b |
| --------- multi-line with empty lines |
| a |
| b |
| c |
| --------- multiple files |
| a |
| b |
| c |
| q |
| kkk |
| q |
| kkk |
| a |
| b |
| c |
| ------ eol option |
| @todo_wine@ad |
| @todo_wine@z@y |
| @todo_wine@a|d |
| @todo_wine@no output |
| @todo_wine@no output |
| ------ delims option |
| @todo_wine@a |
| @todo_wine@a@space@ |
| @todo_wine@a d |
| @todo_wine@a |
| @todo_wine@C r |
| @todo_wine@foo bar baz |
| @todo_wine@c:\ |
| ------ skip option |
| @todo_wine@c |
| @todo_wine@no output |
| @todo_wine@no output |
| ------------ Testing del /a ------------ |
| not-r.test not found after delete, good |
| r.test found before delete, good |
| r.test not found after delete, good |
| ------------ Testing del /q ------------ |
| del /q * succeeded on file1 |
| del /q * succeeded on file2.dat |
| ------------ Testing del /s ------------ |
| ------------ Testing rename ------------ |
| --- ren and rename are synonymous |
| foo renamed to bar |
| bar renamed to foo |
| --- name collision |
| foo |
| bar |
| --- rename read-only files |
| read-only file renamed |
| --- rename directories |
| dir renamed |
| read-only dir renamed |
| --- rename in other directory |
| @todo_wine@rename impossible in other directory |
| @todo_wine@original file still present |
| ------------ Testing move ------------ |
| --- file move |
| file move succeeded |
| @todo_wine@file move with overwrite succeeded@or_broken@file overwrite impossible! |
| @todo_wine@bar@or_broken@baz |
| read-only files are moveable |
| file moved in subdirectory |
| @todo_wine@moving a file to itself is a no-op@or_broken@moving a file to itself should be a no-op! |
| @todo_wine@ErrorLevel: 0@or_broken@ErrorLevel: 1 |
| --- directory move |
| simple directory move succeeded |
| moving a directory to itself gives error; errlevel 1 |
| ------ dir in dir move |
| foo |
| bar2 |
| foo2 |
| ------------ Testing mkdir ------------ |
| --- md and mkdir are synonymous |
| 0 |
| 0 |
| --- creating an already existing directory/file must fail |
| 1 |
| 1 |
| --- multilevel path creation |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 1 |
| 0 |
| 0 |
| --- trailing backslashes |
| 0 |
| dir created |
| 0 |
| --- invalid chars |
| mkdir ? gives errorlevel 1 |
| mkdir ?\foo gives errorlevel 1 |
| mkdir foo\? gives errorlevel 1 |
| ok, foo created |
| mkdir foo\bar\? gives errorlevel 1 |
| ok, foo\bar created |
| --- multiple directories at once |
| foo created |
| bar created |
| foobar created |
| bar\baz created |
| mkdir foo\* errorlevel 1 |
| ok, foo created |
| ------------ Testing rmdir ------------ |
| 0 |
| dir removed |
| 0 |
| dir removed |
| 0 |
| 0 |
| file not removed |
| 0 |
| non-empty dir not removed |
| 0 |
| non-empty dir not removed |
| recursive rmdir succeeded |
| recursive rmdir succeeded |
| foo removed |
| bar removed |
| foobar removed |
| bar\baz removed |
| ------------ Testing pushd/popd ------------ |
| @pwd@ |
| --- popd is no-op when dir stack is empty |
| @pwd@ |
| --- pushing non-existing dir |
| @pwd@ |
| --- basic behaviour |
| @pwd@\foobar |
| @pwd@ |
| @pwd@\foobar\baz |
| @pwd@\foobar |
| @pwd@\foobar |
| @pwd@ |
| @pwd@\foobar |
| @pwd@ |
| ------------ Testing attrib ------------ |
| A @pwd@\foobar\foo@or_broken@A @pwd@\foobar\foo@or_broken@A I @pwd@\foobar\foo |
| --- read-only attribute |
| A R @pwd@\foobar\foo@or_broken@A R @pwd@\foobar\foo@or_broken@A R I @pwd@\foobar\foo |
| foo |
| foo original contents |
| Read-only file not deleted |
| Read-only file forcibly deleted |
| --- recursive behaviour |
| @todo_wine@A @pwd@\foobar\baz\level2@or_broken@A @pwd@\foobar\baz\level2@or_broken@A I @pwd@\foobar\baz\level2 |
| @todo_wine@A R @pwd@\foobar\level1@or_broken@A R @pwd@\foobar\level1@or_broken@A R I @pwd@\foobar\level1 |
| @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 |
| A @pwd@\foobar\bar@or_broken@A @pwd@\foobar\bar@or_broken@A I @pwd@\foobar\bar |
| --- folders processing |
| @pwd@\foobar@or_broken@ @pwd@\foobar@or_broken@ I @pwd@\foobar |
| @todo_wine@ R @pwd@\foobar\baz@or_broken@ R @pwd@\foobar\baz@or_broken@ @pwd@\foobar\baz@or_broken@ R I @pwd@\foobar\baz |
| @todo_wine@A @pwd@\foobar\baz\toto@or_broken@A @pwd@\foobar\baz\toto@or_broken@A I @pwd@\foobar\baz\toto |
| toto |
| lulu |
| file created in read-only dir |
| ------------ Testing assoc ------------ |
| --- setting association |
| --- |
| .foo=bar |
| .foo=bar |
| +++ |
| .foo=bar |
| --- resetting association |
| --- |
| +++ |
| --- |
| ------------ Testing ftype ------------ |
| --- setting association |
| --- |
| footype=foo_opencmd |
| .foo=footype |
| footype=foo_opencmd |
| +++ |
| footype=foo_opencmd |
| --- resetting association |
| @todo_wine@original value@or_broken@buggyXP@or_broken@!FOO! |
| ------------ Testing CALL ------------ |
| --- external script |
| foo@space@ |
| foo 8 |
| foo@space@@space@ |
| foo bar@space@ |
| @todo_wine@foo ""@space@ |
| @todo_wine@"" bar@space@ |
| foo ''@space@ |
| '' bar@space@ |
| --- internal routines |
| bar :testRoutine |
| foo@space@ |
| foo bar |
| @todo_wine@foo "" |
| @todo_wine@"" bar |
| foo '' |
| '' bar |
| --- with builtins |
| @todo_wine@0 |
| @todo_wine@foo created |
| @todo_wine@Should expand foobaz |
| @todo_wine@batfile |
| @todo_wine@robinfile |
| @todo_wine@1 |
| @todo_wine@1 |
| non-builtin dir |
| ------------ Testing SHIFT ------------ |
| 'p1' 'p2' 'p3' 'p4' 'p5' |
| 'p2' 'p3' 'p4' 'p5' '' |
| 'p3' 'p4' 'p5' '' '' |
| 'p3' 'p5' '' '' '' |
| 'p3' 'p5' '' '' '' |
| 'p5' '' '' '' '' |
| ------------ Testing cmd invocation ------------ |
| --- a batch file can delete itself |
| file correctly deleted |
| --- a batch file can alter itself |
| @todo_wine@bar |
| ------------ Testing setlocal/endlocal ------------ |
| --- enable/disable extensions |
| @todo_wine@ErrLev:@space@ |
| ErrLev: 0 |
| ErrLev: 0 |
| @todo_wine@ErrLev:@space@@or_broken@ErrLev: 0 |
| ErrLev: 0 |
| --- setlocal with corresponding endlocal |
| globalval |
| localval |
| globalval |
| globalval |
| --- setlocal with no corresponding endlocal |
| globalval |
| localval |
| @todo_wine@globalval |
| ------------ Testing Errorlevel ------------ |
| 9009 |
| 1 |
| errorlevel just right, good |
| errorlevel with leading zero just right, good |
| errorlevel with negative number OK |
| abc0def@or_broken@abc1def |
| errorlevel zero, good@or_broken@errorlevel nonzero, bad |
| 7 should be 7 |
| 7 should still be 7 |
| ------------ Testing GOTO ------------ |
| goto with no leading space worked |
| goto with a leading space worked |
| goto with a leading tab worked |
| goto with a following space worked |
| ------------ Testing combined CALLs/GOTOs ------------ |
| world |
| cheball |
| barbare |
| bar |
| foo |
| baz |
| cheball |
| barbare |