Skip to content
Snippets Groups Projects
test_builtins.cmd.exp 27.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 &
------------ Testing 'set' ------------
WINE_FOOBAR not defined
WINE_FOOBAR= bar
WINE_FOOBAR =  baz2
WINE_FOOBAR =  baz2
WINE_FOOBAR not defined
WINE_FOO not defined
WINE_BAZ=bazbaz
set "WINE_FOO=bar" should not include the quotes in the variable value
'foo@space@'
'foo@tab@'
'value@space@'
'value'
'jim fred'
'"jim" fred'
'jim fred'
'jim'
'apple"banana"grape'
------------ Testing variable expansion ------------
~dp0 should be directory containing batch file
@pwd@\
@pwd@\
0ERRORLEVEL
------------ Testing variable substrings ------------
'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@or_broken@!WINE_FOO!
foo@or_broken@!WINE_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
foo created
Passed: file size check on a.a [7]@or_broken@Skipping file size check on NT4
Passed: file size check on b.b [8]@or_broken@Skipping file size check on NT4
Passed: file size check on a.a [7]@or_broken@Skipping file size check on NT4
Passed: file size check on b.b [8]@or_broken@Skipping file size check on NT4
Passed: file size check on a.a [7]@or_broken@Skipping file size check on NT4
Passed: file size check on subdir\a.a [8]@or_broken@Skipping file size check on NT4
------------ 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
floats are handled as strings
numbers in quotes are handled as strings
negative numbers as well@or_broken@NT4
if /i seems to work for LSS
A LSS B
A LSS AB
A LSS BA
AA LSS BA
b LSS B@or_broken@NT4
a LSS B@or_broken@NT4
a LSS B insensitive
A LSS b
A LSS b insensitive
AA LEQ BA
AA LEQ AA
b LEQ B@or_broken@NT4
b LEQ B insensitive
a LEQ B@or_broken@NT4
a LEQ B insensitive
A LEQ b
A LEQ b insensitive
A EQU A
B EQU B
AB EQU AB
BA EQU BA
AA EQU AA
A EQU a insensitive
AB NEQ A
AB NEQ B
AB NEQ BA
BA NEQ A
BA NEQ B
BA NEQ AB
AA NEQ A
AA NEQ B
AA NEQ AB
AA NEQ BA
AB GEQ AA
BA GEQ A
BA GEQ B
------ for numbers
negative numbers handled
negative numbers handled
octal handled
also in negative form
hexa handled
also in negative form
11 LSS 101
0 EQU 0
1 EQU 1
10 EQU 10
9 EQU 9
octal ok
hexa ok
string/hexa compare ok
string/hexa compare ok
------ for numbers and stringified numbers
strings and integers not equal
strings and integers not equal
foo
"10" GEQ "1"
'1' GEQ 1@or_broken@NT4
1 GEQ "1"
"1" GEQ "1"
'1' GEQ "1"
"10" GEQ "1"
non NT4@or_broken@1 GEQ '1'
'1' GEQ '1'
foo
1 GEQ "10"
foo
'1' GEQ "10"
"10" GEQ "10"
------------ Testing for ------------
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
Jason Edmeades's avatar
Jason Edmeades committed
WINE_foo correctly 3
WINE_foo correctly -1
WINE_foo correctly 3
WINE_foo correctly 6
WINE_foo correctly 10
WINE_foo correctly 4
WINE_foo correctly 4
WINE_foo correctly -4
WINE_foo correctly 0
WINE_foo correctly 2
WINE_foo correctly 2
WINE_foo correctly -2
WINE_foo correctly 1
WINE_foo correctly 4
WINE_foo correctly 0@or_broken@ERROR: WINE_foo incorrectly 1073741824 [0]
WINE_foo correctly 0@or_broken@ERROR: WINE_foo incorrectly -1073741824 [0]
WINE_foo correctly -4
WINE_foo correctly 9
WINE_foo correctly 2
WINE_foo correctly 0
WINE_foo correctly -1
WINE_foo correctly -3
WINE_foo correctly 0
WINE_foo correctly 1
WINE_foo correctly 1
WINE_foo correctly 4
WINE_foo correctly 1
WINE_foo correctly 5
WINE_foo correctly 5
WINE_foo correctly 7
WINE_foo correctly 5
WINE_foo correctly 5
WINE_foo correctly 5
WINE_foo correctly 4
WINE_foo correctly 6
WINE_foo correctly 1
WINE_foo correctly 4
Jason Edmeades's avatar
Jason Edmeades committed
WINE_foo correctly 10
WINE_foo correctly 18@or_broken@ERROR: WINE_foo incorrectly  [18]
WINE_foo correctly 2@or_broken@ERROR: WINE_foo incorrectly 0 [2]
WINE_foo correctly 2@or_broken@ERROR: WINE_foo incorrectly  [2]
WINE_foo correctly 0@or_broken@ERROR: WINE_foo incorrectly 4 [0]
WINE_foo correctly 4@or_broken@ERROR: WINE_foo incorrectly  [4]
WINE_foo correctly 3@or_broken@ERROR: WINE_foo incorrectly  [3]
WINE_foo correctly 3@or_broken@ERROR: WINE_foo incorrectly  [3]
Jason Edmeades's avatar
Jason Edmeades committed
WINE_foo correctly 18
WINE_foo correctly 18
WINE_foo correctly 15
WINE_foo correctly 3
Jason Edmeades's avatar
Jason Edmeades committed
WINE_foo correctly 3@or_broken@ERROR: WINE_foo incorrectly 0 [3]
WINE_bar correctly 3@or_broken@ERROR: WINE_bar incorrectly  [3]
WINE_foo correctly 3@or_broken@ERROR: WINE_foo incorrectly 0 [3]
WINE_bar correctly 4@or_broken@ERROR: WINE_bar incorrectly  [4]
WINE_foo correctly 3@or_broken@ERROR: WINE_foo incorrectly 0 [3]
WINE_bar correctly 3@or_broken@ERROR: WINE_bar incorrectly  [3]
WINE_baz correctly 4@or_broken@ERROR: WINE_baz incorrectly  [4]
WINE_foo correctly 9@or_broken@ERROR: WINE_foo incorrectly 3 [9]
WINE_bar correctly 9@or_broken@ERROR: WINE_bar incorrectly 3 [9]
WINE_foo correctly 0
WINE_foo correctly 4
WINE_bar correctly 4
Jason Edmeades's avatar
Jason Edmeades committed
WINE_foo correctly -7@or_broken@ERROR: WINE_foo incorrectly 4 [-7]
WINE_bar correctly -7@or_broken@ERROR: WINE_bar incorrectly 4 [-7]
WINE_foo correctly -1@or_broken@ERROR: WINE_foo incorrectly -7 [-1]
WINE_bar correctly -1@or_broken@ERROR: WINE_bar incorrectly -7 [-1]
WINE_foo correctly 5@or_broken@ERROR: WINE_foo incorrectly 0 [5]
WINE_bar correctly 1@or_broken@ERROR: WINE_bar incorrectly  [1]
WINE_foo correctly 4@or_broken@ERROR: WINE_foo incorrectly 1 [4]
WINE_bar correctly 4@or_broken@ERROR: WINE_bar incorrectly 1 [4]
WINE_foo correctly 1@or_broken@ERROR: WINE_foo incorrectly 4 [1]
WINE_bar correctly 1@or_broken@ERROR: WINE_bar incorrectly 4 [1]
WINE_foo correctly 0@or_broken@ERROR: WINE_foo incorrectly 1 [0]
WINE_bar correctly 0@or_broken@ERROR: WINE_bar incorrectly 1 [0]
WINE_foo correctly 5@or_broken@ERROR: WINE_foo incorrectly 0 [5]
WINE_bar correctly 7@or_broken@ERROR: WINE_bar incorrectly  [7]
WINE_foo correctly 5@or_broken@ERROR: WINE_foo incorrectly 0 [5]
WINE_bar correctly 7@or_broken@ERROR: WINE_bar incorrectly  [7]
WINE_foo correctly 19@or_broken@ERROR: WINE_foo incorrectly 0 [19]
WINE_bar correctly 3@or_broken@ERROR: WINE_bar incorrectly  [3]
WINE_baz correctly 4
--- quotes
Jason Edmeades's avatar
Jason Edmeades committed
WINE_foo correctly 1
WINE_foo correctly 1
WINE_foo correctly 1
WINE_bar correctly 2
WINE_foo correctly 1
WINE_bar correctly 2
WINE_foo correctly 1
WINE_bar correctly 2
WINE_foo correctly 1
WINE_bar correctly 2
WINE_foo correctly 1
WINE_bar correctly 2
WINE_baz correctly 3
WINE_foo correctly 1
WINE_bar correctly 2
WINE_baz correctly 3
WINE_foo correctly 1
WINE_bar correctly 2
WINE_baz correctly 3
WINE_foo correctly 1
WINE_bar correctly 2
WINE_baz correctly 3
WINE_foo correctly 1
WINE_bar correctly 2
WINE_baz correctly 3
WINE_foo correctly 1
WINE_foo correctly 1
WINE_bar correctly 5
WINE_baz correctly 2
WINE_foo correctly 18
WINE_foo correctly 3
Jason Edmeades's avatar
Jason Edmeades committed
WINE_bar correctly 7@or_broken@ERROR: WINE_bar incorrectly 4 [7]
--- whitespace are ignored between double char operators
Jason Edmeades's avatar
Jason Edmeades committed
WINE_foo correctly 10@or_broken@ERROR: WINE_foo incorrectly 4 [10]
WINE_bar correctly 50@or_broken@ERROR: WINE_bar incorrectly 5 [50]
WINE_foo correctly 772@or_broken@ERROR: WINE_foo incorrectly 4 [772]
WINE_bar correctly 7720@or_broken@ERROR: WINE_bar incorrectly 5 [7720]
--- invalid operator sequence
4
4
----- negative prefix
Jason Edmeades's avatar
Jason Edmeades committed
WINE_foo correctly -1
WINE_foo correctly 1@or_broken@ERROR: WINE_foo incorrectly  [1]
WINE_foo correctly 6
WINE_foo correctly 0
WINE_foo correctly 6
WINE_foo correctly 2
WINE_foo correctly 0@or_broken@ERROR: WINE_foo incorrectly  [0]
WINE_foo correctly 5
WINE_foo correctly 3@or_broken@ERROR: WINE_foo incorrectly -5 [3]
----- assignment tests involving the end destination
Jason Edmeades's avatar
Jason Edmeades committed
WINE_foo correctly 11@or_broken@ERROR: WINE_foo incorrectly 3 [11]
WINE_foo correctly 6@or_broken@ERROR: WINE_foo incorrectly 2 [6]
WINE_bar correctly 9@or_broken@ERROR: WINE_bar incorrectly  [9]
WINE_foo correctly 6@or_broken@ERROR: WINE_foo incorrectly 2 [6]
WINE_bar correctly 10@or_broken@ERROR: WINE_bar incorrectly  [10]
WINE_baz correctly 7@or_broken@ERROR: WINE_baz incorrectly  [7]
WINE_foo correctly 7@or_broken@ERROR: WINE_foo incorrectly 2 [7]
WINE_bar correctly 7@or_broken@ERROR: WINE_bar incorrectly 2 [7]
----- equal precedence on stack
Jason Edmeades's avatar
Jason Edmeades committed
WINE_foo correctly 1@or_broken@ERROR: WINE_foo incorrectly 0 [1]
WINE_foo correctly 0
WINE_foo correctly 1@or_broken@ERROR: WINE_foo incorrectly  [1]
WINE_foo correctly 0@or_broken@ERROR: WINE_foo incorrectly  [0]
WINE_foo correctly 1@or_broken@ERROR: WINE_foo incorrectly  [1]
WINE_foo correctly -1@or_broken@ERROR: WINE_foo incorrectly  [-1]
WINE_foo correctly -1@or_broken@ERROR: WINE_foo incorrectly  [-1]
WINE_foo correctly 1@or_broken@ERROR: WINE_foo incorrectly  [1]
WINE_foo correctly 0@or_broken@ERROR: WINE_foo incorrectly  [0]
WINE_foo correctly -1
WINE_foo correctly 0@or_broken@ERROR: WINE_foo incorrectly -1 [0]
WINE_foo correctly 0
WINE_foo correctly 1@or_broken@ERROR: WINE_foo incorrectly 0 [1]
WINE_foo correctly -1@or_broken@ERROR: WINE_foo incorrectly 0 [-1]
WINE_foo correctly 25@or_broken@ERROR: WINE_foo incorrectly 20 [25]
WINE_foo correctly 20
WINE_foo correctly 1
WINE_foo correctly 4
WINE_foo correctly 7
WINE_foo correctly 8@or_broken@ERROR: WINE_foo incorrectly 4 [8]
WINE_foo correctly 6@or_broken@ERROR: WINE_foo incorrectly 5 [6]
WINE_bar correctly 6@or_broken@ERROR: WINE_bar incorrectly 5 [6]
a@or_broken@no output
a
a@or_broken@no output
a
a@or_broken@no output
a
a@or_broken@no output
a
a@or_broken@no output
------ fileset argument
--------- basic blank handling
------ command argument
Passed1@or_broken@Missing functionality - Broken1
Passed2@or_broken@Missing functionality - Broken2
Passed3@or_broken@Missing functionality - Broken3
and@or_broken@Broken NT4 functionality1
Line@or_broken@Broken NT4 functionality2
Line@or_broken@Broken NT4 functionality3
no output
a@space@
a d
a
C r
foo bar baz
------ tokens= option
h=%h i=a j=%j k=%k l=%l m=%m o=%o
h=%h i=b j=%j k=%k l=%l m=%m o=%o
h=%h i=a j=c k=e l=f m=g o=%o
h=%h i=a j=e k=f g l=%l m=%m o=%o
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
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
h=%h i=a j=b k=c l=d e f g m=%m n=%n o=%o
h=%h i=a j=b k=c l=d e f g m=%m n=%n o=%o
h=%h i=a j=b k= l= m=%m n=%n o=%o
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
h=%h i=a j=b k= l= m= n=%n o=%o
h=%h i=a j=b k= l= m= n= o=%o
u=a v=b w=c x=d y=e z=f A=%A a=%a
@todo_wine@U=a V=b W=c X=d Y=e Z=f A=%A a=m
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
h=%h i=e j=%j k=%k l=%l m=%m o=%o
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
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
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
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
------------ 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