Skip to content
Snippets Groups Projects
test_builtins.cmd.exp 21.1 KiB
Newer Older
@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 word@space@@space@
word@space@

@pwd@>echo word@space@@space@@space@
word@space@@space@
@pwd@>echo word@space@
word

@pwd@>echo@tab@word@space@

@pwd@>echo@tab@word@space@@tab@@space@
word@space@@tab@

@pwd@>echo@tab@word@tab@@space@@space@
word@tab@@space@
@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] ------------
Jacek Caban's avatar
Jacek Caban committed
word
'singlequotedword'
"doublequotedword"
at-echoed-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 parameterization ------------
'a', 'b', 'c'
'"a b c"', '', ''
'"a b"\c', '', ''
'a', '~`+', '.{}!+b'
'a', 'b', ''
'"a;b"', '', ''
'a[b]{c}(d)e', '', ''
'a', '', ''
second line
'a', 'b', 'c'
'a', 'b', 'c'
'a', 'b', ''
------------ 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 ------------
foo@tab@
foo@space@
foo@tab@
foo7@space@@or_broken@foo@tab@
foo9@space@@or_broken@foo@tab@
foo1
foo11
foo12
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
file does not exist, ok
------------ Testing circumflex escape character ------------
hello, world
hello, world
hell^o, world
hell^o, world
foo | echo bar
foo & echo bar
bak &
foo > foo
<
ffoof
FOO=bar | baz
0
FOO=bar ^| baz
bar | baz
0
------------ Testing 'set' ------------
FOOBAR not defined
FOOBAR =  baz
FOOBAR= bar
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@space@'
'foo@tab@'
------------ Testing variable expansion ------------
~dp0 should be directory containing batch file
@pwd@\
@pwd@\
0ERRORLEVEL
------------ 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 ------------
'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@''
''@or_broken@'%~ai'
''@or_broken@'%~ai'
'--a------'@or_broken@'%~ai'
'5'@or_broken@'%~zi'
''@or_broken@'%~ti'
''@or_broken@'%~ti'
''@or_broken@'%~zi'
''@or_broken@'%~zi'
@drive@@path@
@drive@@path@
@drive@
@drive@
@drive@
@drive@
''
'.eh'
'A B'@or_broken@''
@pwd@\E
@drive@
@drive@
@path@
@path@
'.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 ------------
foo
@todo_wine@foo@or_broken@!FOO!
foo
@todo_wine@bar@or_broken@foo
0
0@or_broken@1
foo
!FOO!
foo
@todo_wine@foo@or_broken@!FOO!
foo
!FOO!
------------ Testing conditional execution ------------
@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@\foobar\bar bak
@pwd@\foobar\bar bak
@pwd@\foobar\bar bak
@pwd@\foobar\bar bak
@pwd@\foobar\bar bak
Frédéric Delanoy's avatar
Frédéric Delanoy committed
@pwd@\foobar
------------ Testing type ------------

@pwd@>type foobaz@space@
bar

------------ Testing NUL ------------
bar
bar
bar
NUL
@todo_wine@foo created
------------ Testing if/else ------------
--- if/else should work with blocks
Dan Kegel's avatar
Dan Kegel committed
if seems to work
else seems to work
if seems not to detect /c as parameter
--- 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
--- comparison operators
------ for strings
LSS string can be used as operand for LSS comparison
@todo_wine@floats are handled as strings
@todo_wine@numbers in quotes are handled as strings
@todo_wine@negative numbers as well@or_broken@NT4
@todo_wine@if /i seems to work for LSS
@todo_wine@A LSS B
@todo_wine@AB LSS B
@todo_wine@AA LSS B
@todo_wine@A LSS AB
@todo_wine@AA LSS AB
@todo_wine@A LSS BA
@todo_wine@B LSS BA
@todo_wine@AB LSS BA
@todo_wine@AA LSS BA
@todo_wine@A LSS AA
@todo_wine@b LSS B@or_broken@NT4
@todo_wine@a LSS B@or_broken@NT4
@todo_wine@a LSS B insensitive
@todo_wine@A LSS b
@todo_wine@A LSS b insensitive
@todo_wine@A LEQ A
@todo_wine@A LEQ B
@todo_wine@B LEQ B
@todo_wine@AB LEQ B
@todo_wine@AA LEQ B
@todo_wine@A LEQ AB
@todo_wine@AB LEQ AB
@todo_wine@AA LEQ AB
@todo_wine@A LEQ BA
@todo_wine@B LEQ BA
@todo_wine@AB LEQ BA
@todo_wine@BA LEQ BA
@todo_wine@AA LEQ BA
@todo_wine@A LEQ AA
@todo_wine@AA LEQ AA
@todo_wine@b LEQ B@or_broken@NT4
@todo_wine@b LEQ B insensitive
@todo_wine@a LEQ B@or_broken@NT4
@todo_wine@a LEQ B insensitive
@todo_wine@A LEQ b
@todo_wine@A LEQ b insensitive
@todo_wine@A EQU A
@todo_wine@B EQU B
@todo_wine@AB EQU AB
@todo_wine@BA EQU BA
@todo_wine@AA EQU AA
@todo_wine@A EQU a insensitive
@todo_wine@B NEQ A
@todo_wine@AB NEQ A
@todo_wine@BA NEQ A
@todo_wine@AA NEQ A
@todo_wine@A NEQ B
@todo_wine@AB NEQ B
@todo_wine@BA NEQ B
@todo_wine@AA NEQ B
@todo_wine@A NEQ AB
@todo_wine@B NEQ AB
@todo_wine@BA NEQ AB
@todo_wine@AA NEQ AB
@todo_wine@A NEQ BA
@todo_wine@B NEQ BA
@todo_wine@AB NEQ BA
@todo_wine@AA NEQ BA
@todo_wine@A NEQ AA
@todo_wine@B NEQ AA
@todo_wine@AB NEQ AA
@todo_wine@BA NEQ AA
@todo_wine@A GEQ A
@todo_wine@B GEQ A
@todo_wine@AB GEQ A
@todo_wine@BA GEQ A
@todo_wine@AA GEQ A
@todo_wine@B GEQ B
@todo_wine@BA GEQ B
@todo_wine@B GEQ AB
@todo_wine@AB GEQ AB
@todo_wine@BA GEQ AB
@todo_wine@BA GEQ BA
@todo_wine@B GEQ AA
@todo_wine@AB GEQ AA
@todo_wine@BA GEQ AA
@todo_wine@AA GEQ AA
@todo_wine@B GTR A
@todo_wine@AB GTR A
@todo_wine@BA GTR A
@todo_wine@AA GTR A
@todo_wine@BA GTR B
@todo_wine@B GTR AB
@todo_wine@BA GTR AB
@todo_wine@B GTR AA
@todo_wine@AB GTR AA
@todo_wine@BA GTR AA
------ for numbers
negative numbers handled
negative numbers handled
octal handled
also in negative form
hexa handled
also in negative form
11 LSS 101
@todo_wine@0 LSS 1
@todo_wine@0 LSS 10
@todo_wine@1 LSS 10
@todo_wine@9 LSS 10
@todo_wine@0 LSS 9
@todo_wine@1 LSS 9
@todo_wine@0 LEQ 0
@todo_wine@0 LEQ 1
@todo_wine@1 LEQ 1
@todo_wine@0 LEQ 10
@todo_wine@1 LEQ 10
@todo_wine@10 LEQ 10
@todo_wine@9 LEQ 10
@todo_wine@0 LEQ 9
@todo_wine@1 LEQ 9
@todo_wine@9 LEQ 9
@todo_wine@0 EQU 0
@todo_wine@1 EQU 1
@todo_wine@10 EQU 10
@todo_wine@9 EQU 9
@todo_wine@octal ok
@todo_wine@hexa ok
@todo_wine@string/hexa compare ok
@todo_wine@string/hexa compare ok
@todo_wine@1 NEQ 0
@todo_wine@10 NEQ 0
@todo_wine@9 NEQ 0
@todo_wine@0 NEQ 1
@todo_wine@10 NEQ 1
@todo_wine@9 NEQ 1
@todo_wine@0 NEQ 10
@todo_wine@1 NEQ 10
@todo_wine@9 NEQ 10
@todo_wine@0 NEQ 9
@todo_wine@1 NEQ 9
@todo_wine@10 NEQ 9
@todo_wine@0 GEQ 0
@todo_wine@1 GEQ 0
@todo_wine@10 GEQ 0
@todo_wine@9 GEQ 0
@todo_wine@1 GEQ 1
@todo_wine@10 GEQ 1
@todo_wine@9 GEQ 1
@todo_wine@10 GEQ 10
@todo_wine@10 GEQ 9
@todo_wine@9 GEQ 9
@todo_wine@1 GTR 0
@todo_wine@10 GTR 0
@todo_wine@9 GTR 0
@todo_wine@10 GTR 1
@todo_wine@9 GTR 1
@todo_wine@10 GTR 9
------------ Testing for ------------
@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
baz@space@
foo@space@
bar@space@
PASSED
xxx - Should be xxx
Expected second line
--- for /R
Plain directory enumeration
Plain directory enumeration from provided root
File enumeration
File enumeration from provided root
Mixed enumeration
Mixed enumeration from provided root
With duplicates enumeration
Strip missing wildcards, keep unwildcarded names
for /R passed
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
@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
@todo_wine@3@or_broken@4
@todo_wine@18
@todo_wine@18
@todo_wine@15
@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

@todo_wine@a
@todo_wine@a
@todo_wine@a
@todo_wine@a
------ fileset argument
--------- basic blank handling
@todo_wine@ad
@todo_wine@z@y
@todo_wine@no output
@todo_wine@no output
@todo_wine@a
@todo_wine@a@space@
@todo_wine@a d
@todo_wine@a
@todo_wine@C r
@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 ------------
foo renamed to bar
bar renamed to foo
read-only file renamed
dir renamed
read-only dir renamed
rename impossible in other directory
original file still present
------------ Testing 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
simple directory move succeeded
moving a directory to itself gives error; errlevel 1
------------ Testing mkdir ------------
--- creating an already existing directory/file must fail
mkdir ? gives errorlevel 1
mkdir ?\foo gives errorlevel 1
mkdir foo\? gives errorlevel 1
mkdir foo\bar\? gives errorlevel 1
bar created
foobar created
bar\baz created
bazbaz created
zabzab 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@\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
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
@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
             @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 ------------
.foo=bar
------------ Testing ftype ------------
footype=foo_opencmd
.foo=footype
footype=foo_opencmd
+++
footype=foo_opencmd
@todo_wine@original value@or_broken@buggyXP@or_broken@!FOO!
------------ Testing CALL ------------
foo@space@@space@
foo bar@space@
foo ""@space@
"" bar@space@
foo ''@space@
'' bar@space@
bar :testRoutine
foo@space@
foo bar
0
foo created
Should expand foobaz
batfile
robinfile
1
1
non-builtin dir
Line one
Line two
Get if
... and else!
passed
------------ Testing SHIFT ------------
'p1' 'p2' 'p3' 'p4' 'p5'
'p2' 'p3' 'p4' 'p5' ''
'p3' 'p4' 'p5' '' ''
'p3' 'p5' '' '' ''
'p3' 'p5' '' '' ''
'p5' '' '' '' ''