@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 ------------ 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 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@ @todo_wine@foo1 @todo_wine@foo11 @todo_wine@foo12 ...stdout appending foo foo@space@ foob@space@ foob@space@ fooc@space@ foob@space@ fooc@space@ @todo_wine@food1 @todo_wine@foob@space@ @todo_wine@fooc@space@ @todo_wine@food1 @todo_wine@food2 @todo_wine@food21 @todo_wine@------------ Testing ^ 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 & @todo_wine@baz@space@ @todo_wine@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 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 -------------- @todo_wine@...unconditional & foo1 bar2@space@ foo2 @todo_wine@foobar deleted @todo_wine@...on success conditional && @todo_wine@foo3 not created bar4@space@ foo4 @todo_wine@...on failure conditional || @todo_wine@foo5 @todo_wine@foo6@space@ ------------ Testing cd ------------ singleFile Current dir: @pwd@\foobar@or_broken@Current dir:@space@ @pwd@\foobar @pwd@ @pwd@\foobar @pwd@ @pwd@\foobar @pwd@ @todo_wine@@pwd@ @todo_wine@@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 @todo_wine@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 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 ...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 -----------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 mkdir ----------- 0 0 1 1 0 0 0 0 0 1 0 0 0 dir created 0 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 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 attrib -------------- @todo_wine@A @pwd@\foobar\foo@or_broken@A @pwd@\foobar\foo@or_broken@A I @pwd@\foobar\foo ... read-only attribute @todo_wine@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 @todo_wine@A @pwd@\foobar\bar@or_broken@A @pwd@\foobar\bar@or_broken@A I @pwd@\foobar\bar ... folders processing @todo_wine@ @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 CALL -------------- foo@space@ @todo_wine@foo 8 foo@space@@space@ foo bar@space@ @todo_wine@foo ""@space@ @todo_wine@"" bar@space@ foo ''@space@ '' bar@space@ bar :testRoutine foo@space@ foo bar @todo_wine@foo "" @todo_wine@"" bar foo '' '' bar @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 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 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 -----------Done, jumping to EOF-----------