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 .@space@
.
@pwd@>echo.word
word
@pwd@>echo .word@space@
.word
@pwd@>echo :@space@
:
@pwd@>echo:word
@pwd@>echo :word@space@
:word
@pwd@>echo/
@pwd@>echo /@space@
/
@pwd@>echo/word
word
@pwd@>echo /word@space@
/word
Frédéric Delanoy
committed
@pwd@>echo off now@space@
off now
@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@
@pwd@>echo@tab@word@tab@@space@@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@
@pwd@>echo @tab@ on @space@@space@
--- @ with chains and brackets
@todo_wine@@pwd@>(echo the @ character chains until && ) && echo and can hide brackets || () ||@space@
@todo_wine@the @ character chains until
@todo_wine@we leave the current depth
@todo_wine@and can hide brackets
@todo_wine@---
noecho1
noecho2
echo3
------------ Testing 'echo' [OFF] ------------
word
'singlequotedword'
"doublequotedword"
at-echoed-word
"/?"
.
Frédéric Delanoy
committed
on again
word@space@
word@space@@space@
word
word@space@@tab@
word@tab@@space@
word
@tab@word
@space@@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 ------------
Francois Gouget
committed
--- 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
Francois Gouget
committed
--- 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
Francois Gouget
committed
--- redirections within IF statements
@todo_wine@foo1
Francois Gouget
committed
-----
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 ------------
hello, world
hello, world
hell^o, world
hell^o, world
helloworld
hello
world
hello
finished
foo | echo bar
foo & echo bar
bak &
baz@space@
0@or_broken@1
foo > foo
<
ffoof
WINE_FOO=bar | baz
WINE_FOO=bar ^| baz
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
------------ Testing chains ------------
--- chain success
a1
a2
b1
b2
c1
@todo_wine@---
d1
d2
d3
e1
e2
e3
f1
f2
@todo_wine@---
g1
g2
g3
h1
h2
h3
i1
i2
@todo_wine@---
j1
@todo_wine@j3
@todo_wine@---
k1
@todo_wine@---
l1
@todo_wine@---
--- chain failure
a1
a2
b1
@todo_wine@---
c1
c2
d1
d2
d3
e1
e2
@todo_wine@---
f1
f2
f3
g1
@todo_wine@g3
@todo_wine@---
h1
@todo_wine@---
i1
@todo_wine@i3
@todo_wine@---
j1
j2
j3
k1
k2
@todo_wine@---
l1
l2
l3
--- chain brackets
a1
a2
a3
b1
b2
b3
c1
c2
@todo_wine@---
d1
d2
d3
e1
e2
e3
f1
f2
@todo_wine@---
g1
@todo_wine@---
h1
@todo_wine@---
i1
@todo_wine@---
j1
j2
j3
k1
k2
@todo_wine@---
l1
l2
l3
m1
@todo_wine@---
n1
@todo_wine@---
o1
@todo_wine@---
p1
p2
p3
q1
q2
@todo_wine@---
r1
r2
r3
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
--- chain pipe
@todo_wine@a@space@
@todo_wine@a@space@
---
b2
c1
c3
d1
@todo_wine@---
e1
e3
f2
f3
g2
@todo_wine@---
h2
h3
i3
--- chain pipe input
a2:[a1,a2]
b3:[b2:[b1,b2],b3]@or_broken@b3:[b2:,b3]
c4:[c3:[c2:[c1,c2],c3],c4]@or_broken@c4:[c3:[c2:,c3],c4]@or_broken@c4:[c3:,c4]
d2:[d1,d2]
e3:[e2:[e1,e2],e3]@or_broken@e3:[e2:,e3]
f4:[f3:[f2:[f1,f2],f3],f4]@or_broken@f4:[f3:[f2:,f3],f4]@or_broken@f4:[f3:,f4]
--- chain else
a1
b2
@todo_wine@---
@todo_wine@c3
@todo_wine@---
@todo_wine@d3
@todo_wine@---
@todo_wine@---
@todo_wine@---
@todo_wine@---
@todo_wine@---
--- chain else (if true)
a1 else echo a2
b2 else echo b3
c1
c2 else echo c3
d1
@todo_wine@---
e1
e2 else echo e3
f3
g1 else echo g2
g3
h1 else echo h2
@todo_wine@---
i1 else echo i2
i3
@todo_wine@j2@space@
@todo_wine@---
k1
k2
l1
@todo_wine@---
m1
m2
n1
o1
p1
q1
--- chain else (if false)
@todo_wine@j3
---
k3
l3
m3
n3
o2
o3
p2
@todo_wine@---
q2
q3
------------ Testing 'set' ------------
WINE_FOOBAR not defined
WINE_FOOBAR = baz
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
Dan Kegel
committed
bar
foo
''
'value@space@'
'value'
'jim fred'
'"jim" fred'
'jim fred'
'jim'
'apple"banana"grape'
Fabian Maurer
committed
I'm here!@space@
I'm here!@space@
I'm here!@space@
------------ Testing variable expansion ------------
~p0 should be path containing batch file
@path@
@path@
~dp0 should be directory containing batch file
@drive@@path@
@drive@@path@
Frédéric Delanoy
committed
CD value @pwd@@or_broken@CD value@space@
%
P
P
S
P
PS
ERRORLEVEL
0
00
------------ Testing variable substrings ------------
'ty'@or_broken@''
't'@or_broken@''
ert@or_broken@qwerty
e@or_broken@qwerty
''@or_broken@'qwerty'
r@or_broken@qwerty
------------ Testing variable substitution ------------
Francois Gouget
committed
--- in FOR variables
'A B'@or_broken@''
'C'@or_broken@''
@drive@@path@C D@or_broken@%~ff
@drive@@path@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@'--a--------'@or_broken@'--a--c---'@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'
Francois Gouget
committed
--- in parameters
@drive@@path@C D
@drive@@path@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 parameter zero ------------
:func parm1
[:func] [@drive@] [@path@] [test] [.cmd] [@drive@@shortpath@test.cmd]
------------ Testing variable delayed expansion ------------
Francois Gouget
committed
--- default mode (load-time expansion)
Francois Gouget
committed
--- runtime (delayed) expansion mode
foo@or_broken@!WINE_FOO!
bar@or_broken@foo
0
0@or_broken@1
foo
Francois Gouget
committed
--- using /V cmd flag
foo@or_broken@!WINE_FOO!
------------ Testing conditional execution ------------
Francois Gouget
committed
--- unconditional ampersand
foo1
bar2@space@
foo2
Francois Gouget
committed
--- on success conditional and
@todo_wine@foo3 not created
bar4@space@
foo4
Francois Gouget
committed
--- on failure conditional or
foo5
foo6@space@
@todo_wine@------------ Testing cd ------------
Current dir: @drive@@path@foobar@or_broken@Current dir:@space@
@drive@@path@foobar
@drive@@path@foobar
@drive@@path@foobar
@drive@@path@foobar\bar bak
@drive@@path@foobar\bar bak
@drive@@path@foobar\bar bak
@drive@@path@foobar\bar bak
@drive@@path@foobar\bar bak
@drive@@path@foobar
------------ Testing type ------------
@pwd@>type foobaz@space@
bar
Francois Gouget
committed
@pwd@>echo ---@space@
---
---1
bar
---2
bar
---3
------------ 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
if seems not to detect /c as parameter
else if seems to work
else if seems to work
else if seems to work
--- case sensitivity with and without /i option
if seems to default to case sensitivity
if /i seems to work
if /I seems to work
--- string comparisons
non equal
non equal
--- tabs handling
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
B LSS BA
AB 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
A LEQ A
A LEQ B
A LEQ AB
A LEQ BA
B LEQ BA
AB LEQ BA
BA LEQ BA
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
A NEQ B
A NEQ AB
A NEQ BA
A NEQ AA
B NEQ A
B NEQ AB
B NEQ BA
B NEQ AA
AB NEQ A
AB NEQ B
AB NEQ BA
AB NEQ AA
BA NEQ A
BA NEQ B
BA NEQ AB
BA NEQ AA
AA NEQ A
AA NEQ B
AA NEQ AB
AA NEQ BA
A GEQ A
B GEQ A
B GEQ B
B GEQ AB
AB GEQ AB
AB GEQ AA
BA GEQ A
BA GEQ B
BA GEQ AB
BA GEQ BA
BA GEQ AA
AA GEQ AA
B GTR A
AB GTR A
BA GTR A
BA GTR B
BA GTR AB
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
0 LSS 1
0 LSS 10
0 LSS 9
1 LSS 9
0 LEQ 0
0 LEQ 1
0 LEQ 10
1 LEQ 10
10 LEQ 10
9 LEQ 10
9 LEQ 9
0 EQU 0
1 EQU 1
10 EQU 10
9 EQU 9
octal ok
hexa ok
string/hexa compare ok
string/hexa compare ok
0 NEQ 1
0 NEQ 10
0 NEQ 9
1 NEQ 9
10 NEQ 9
9 NEQ 0
9 NEQ 1
9 NEQ 10
0 GEQ 0
1 GEQ 0
1 GEQ 1
10 GEQ 1
10 GEQ 10
10 GEQ 9
9 GEQ 9
1 GTR 0
10 GTR 0
10 GTR 1
10 GTR 9
Frédéric Delanoy
committed
------ 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"
Carlos Rafael Ramirez
committed
--- unconditional ampersand after if one line
1@space@
2@space@
3 else echo 4
---
x@space@
---
x@space@
---
x@space@
---
x@space@
---
------------ Testing for ------------
Francois Gouget
committed
--- plain FOR
%I
%I
%I
%j
%j
%j
1
4
1
A
B
C
`echo
A
B`
'echo
A
B'
Francois Gouget
committed
--- imbricated FORs
X Y
X Y
A C
A D
B C
B D
A C
A D
B C
B D
Francois Gouget
committed
--- basic wildcards
--- wildcards in subdirs
pop\bar1@space@
pop\bar2.txt@space@
pop\bar3@space@
Francois Gouget
committed
--- for /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
--- Complex wildcards unix and windows slash
ASIS: foobar\baz\bazbaz
WC : foobar\baz\bazbaz
ASIS: foobar\jim\bazbaz
ASIS: foobar/baz/bazbaz
WC : bazbaz
ASIS: foobar/jim/bazbaz
Done
Francois Gouget
committed
--- for /L
1
3
5
1
3
5
0
2
1
-1
ErrorLevel 0
ErrorLevel 0
1
2
3
4
1
3
4
3
2
1
4
2
0
1
1
-1
-1
1
3
--- ifs inside for loops
a1
b1
d1
a2
b2
d2
a3
c3
d3
a4
c4
d4
Francois Gouget
committed
------ individual operations
WINE_foo correctly 3
WINE_foo correctly -1