blob: bb7551515b8850efa3fd110a345e801760dfb4fb [file] [log] [blame]
@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