Sweden-Number/programs/cmd/tests/test_builtins.cmd.exp

938 lines
15 KiB
Plaintext
Raw Normal View History

2010-02-09 19:11:15 +01:00
@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@
2011-08-20 01:26:55 +02:00
@pwd@>echo word@space@
2011-08-20 01:26:55 +02:00
word
@pwd@>echo@tab@word@space@
2011-08-23 22:54:49 +02:00
word
2011-08-20 01:26:55 +02:00
@pwd@>echo@tab@word@space@@tab@@space@
2011-08-23 22:54:49 +02:00
word@space@@tab@
2011-08-20 01:26:55 +02:00
@pwd@>echo@tab@word@tab@@space@@space@
2011-08-23 22:54:49 +02:00
word@tab@@space@
2011-08-20 01:26:55 +02:00
@pwd@>echo word@space@
2011-08-20 01:26:55 +02:00
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@
2011-08-23 22:54:49 +02:00
@tab@word
2011-11-11 19:27:43 +01:00
@pwd@>echo @tab@ on @space@@space@
noecho1
noecho2
echo3
------------ Testing 'echo' [OFF] ------------
2010-02-09 19:11:15 +01:00
word
'singlequotedword'
"doublequotedword"
at-echoed-word
"/?"
.
word
.word
:
word
:word
on again
word@space@
word@space@@space@
2011-08-20 01:26:55 +02:00
word
2011-08-23 22:54:49 +02:00
word
word@space@@tab@
word@tab@@space@
2011-08-20 01:26:55 +02:00
word
@tab@word
@space@@tab@word
2011-08-23 22:54:49 +02:00
@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', ''
'a[b]{c}(d)e', '', ''
'a', '', ''
second line
'a', 'b', 'c'
'a', 'b', 'c'
'a', 'b', ''
------------ Testing rem ------------
2011-08-25 00:48:20 +02:00
@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@
2011-08-25 00:48:21 +02:00
@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@
2011-08-27 02:11:30 +02:00
foo@tab@
foo@space@
foo@tab@
foo7@space@@or_broken@foo@tab@
foo9@space@@or_broken@foo@tab@
foo1
foo11
foo12
foo13
foo14
foo15
--- stdout appending
foo
foo@space@
foob@space@
foob@space@
fooc@space@
foob@space@
fooc@space@
2011-08-27 02:11:30 +02:00
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 ------------
hello, world
hello, world
hell^o, world
hell^o, world
helloworld
hello
world
hello
finished
baz
baz
foo | echo bar
foo & echo bar
bak &
baz@space@
0@or_broken@1
foo > foo
<
ffoof
FOO=bar | baz
0
FOO=bar ^| baz
bar | baz
0
------------ Testing 'set' ------------
2011-07-17 22:48:56 +02:00
1
0
2011-07-17 22:48:56 +02:00
FOOBAR not defined
baz
2011-07-17 22:48:56 +02:00
FOOBAR = baz
0
baz2
0
2011-07-17 22:48:56 +02:00
bar
FOOBAR= bar
FOOBAR = baz2
FOOBAR = baz2
2011-07-17 22:48:56 +02:00
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
''
2011-08-20 01:26:55 +02:00
'foo@space@'
'foo@tab@'
------------ Testing variable expansion ------------
~dp0 should be directory containing batch file
@pwd@\
@pwd@\
CD value @pwd@@or_broken@CD value@space@
2010-03-09 13:15:35 +01:00
%
P
P
S
P
PS
ERRORLEVEL
0
00
0ERRORLEVEL
2010-03-09 13:15:35 +01:00
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
"A B"
C
"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
"A B"
C
'A B'@or_broken@''
'C'@or_broken@''
@pwd@\C D
@pwd@\E
@drive@
@drive@
@path@
@path@
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@''
@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 ------------
2011-08-20 01:59:00 +02:00
singleFile
Current dir: @pwd@\foobar@or_broken@Current dir:@space@
@pwd@\foobar
@pwd@
@pwd@\foobar
@pwd@
@pwd@\foobar
@pwd@
@pwd@
@pwd@
2011-08-20 01:26:55 +02:00
@pwd@\foobar\bar bak
2011-08-20 01:59:00 +02:00
@pwd@\foobar\bar bak
@pwd@\foobar\bar bak
@pwd@\foobar\bar bak
@pwd@\foobar\bar bak
2011-08-20 01:59:00 +02:00
@pwd@
2011-08-25 00:48:23 +02:00
@pwd@\foobar
------------ Testing type ------------
@pwd@>type foobaz@space@
bar
@pwd@>echo ---@space@
---
bar
---1
bar
---2
bar
---3
2011-07-19 09:49:24 +02:00
------------ Testing NUL ------------
bar
bar
bar
NUL
@todo_wine@foo created
------------ Testing if/else ------------
2010-02-18 08:11:04 +01:00
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
2011-08-25 00:48:22 +02:00
doom
doom
doom
lol
quake
quake
quake
------------ Testing for ------------
--- plain FOR
2011-07-11 23:34:05 +02:00
A
B
C
%I
%I
%I
%j
%j
%j
2011-07-11 23:34:05 +02:00
A
B
C
1
4
1
A
B
C
X
2011-08-23 22:54:50 +02:00
X2
X3
2011-08-20 01:26:55 +02:00
foo
2011-08-23 22:54:50 +02:00
M
X
M
N
O
`echo
A
B`
'echo
A
B'
"echo A B"
"A B"
C
--- imbricated FORs
@todo_wine@X Y
2011-07-11 23:34:05 +02:00
@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@space@
foo@space@
bar@space@
PASSED
xxx - Should be xxx
Expected second line
2012-09-27 20:58:56 +02:00
--- 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
--- for /L
2011-07-29 13:59:52 +02:00
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
--- for /a
------ individual operations
2011-08-04 16:01:48 +02:00
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
2011-08-04 16:01:48 +02:00
@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
2011-08-04 16:01:48 +02:00
@todo_wine@3@or_broken@4
@todo_wine@18
@todo_wine@18
@todo_wine@15
------ variables
2011-08-04 16:01:48 +02:00
@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
@todo_wine@a
@todo_wine@a
2011-08-25 23:08:32 +02:00
a
@todo_wine@a
@todo_wine@a
------ fileset argument
--------- basic blank handling
2011-08-25 23:08:32 +02:00
a
a
a
a
a
b
--------- multi-line with empty lines
2011-08-25 23:08:32 +02:00
a
b
c
--------- multiple files
2011-08-25 23:08:32 +02:00
a
b
c
q
kkk
q
kkk
a
b
c
------ eol option
@todo_wine@ad
@todo_wine@z@y
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
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 ------------
2011-09-14 23:39:10 +02:00
------------ Testing rename ------------
--- ren and rename are synonymous
2011-09-14 23:39:10 +02:00
foo renamed to bar
bar renamed to foo
--- name collision
2011-09-14 23:39:10 +02:00
foo
bar
--- rename read-only files
read-only file renamed
--- rename directories
dir renamed
read-only dir renamed
--- rename in other directory
2012-09-03 23:48:08 +02:00
rename impossible in other directory
original file still present
2011-10-11 19:04:31 +02:00
------------ Testing move ------------
--- file move
2011-10-11 19:04:31 +02:00
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
2011-10-11 19:04:31 +02:00
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
2011-10-11 19:04:31 +02:00
simple directory move succeeded
moving a directory to itself gives error; errlevel 1
------ dir in dir move
2011-10-11 19:04:31 +02:00
foo
bar2
foo2
2011-09-14 23:39:10 +02:00
------------ Testing mkdir ------------
--- md and mkdir are synonymous
2011-07-11 23:34:06 +02:00
0
0
--- creating an already existing directory/file must fail
1
1
--- multilevel path creation
2011-07-11 23:34:06 +02:00
0
0
0
0
0
1
2011-07-11 23:34:06 +02:00
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
2011-07-24 22:11:35 +02:00
foo created
2011-08-02 22:02:19 +02:00
bar created
foobar created
bar\baz created
bazbaz created
zabzab created
mkdir foo\* errorlevel 1
ok, foo created
------------ Testing rmdir ------------
2011-07-11 23:34:08 +02:00
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
2011-07-24 22:11:36 +02:00
foo removed
bar removed
foobar removed
bar\baz removed
------------ Testing pushd/popd ------------
2011-08-30 23:33:52 +02:00
@pwd@
--- popd is no-op when dir stack is empty
2011-08-30 23:33:52 +02:00
@pwd@
--- pushing non-existing dir
2011-08-30 23:33:52 +02:00
@pwd@
--- basic behaviour
2011-08-30 23:33:52 +02:00
@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
2011-08-24 12:53:21 +02:00
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
2011-08-24 12:53:21 +02:00
toto
lulu
file created in read-only dir
------------ Testing assoc ------------
--- setting association
---
2011-08-29 21:45:16 +02:00
.foo=bar
.foo=bar
2011-08-29 21:45:16 +02:00
+++
.foo=bar
--- resetting association
---
2011-08-29 21:45:16 +02:00
+++
---
------------ Testing ftype ------------
--- setting association
---
2011-08-29 21:45:19 +02:00
footype=foo_opencmd
.foo=footype
footype=foo_opencmd
+++
footype=foo_opencmd
--- resetting association
2011-08-29 21:45:19 +02:00
@todo_wine@original value@or_broken@buggyXP@or_broken@!FOO!
------------ Testing CALL ------------
--- external script
foo@space@
2011-08-27 02:11:30 +02:00
foo 8
2011-07-29 13:59:51 +02:00
foo@space@@space@
foo bar@space@
foo ""@space@
"" bar@space@
2011-07-29 13:59:51 +02:00
foo ''@space@
'' bar@space@
--- internal routines
2011-07-21 15:28:26 +02:00
bar :testRoutine
2011-07-29 13:59:51 +02:00
foo@space@
foo bar
foo ""
"" bar
2011-07-29 13:59:51 +02:00
foo ''
'' bar
--- with builtins
2011-07-21 15:28:26 +02:00
@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
@pwd@\foobar\foobar2
globalval
@pwd@\foobar
globalval
@pwd@\foobar
--- setlocal with no corresponding endlocal
globalval
localval
@pwd@\foobar\foobar2
globalval
@pwd@\foobar
--- setlocal within same batch program
Var1 ok 1
Var2 ok 2
Var3 ok 3
Directory is ok 1
Var1 ok 1
Var2 ok 2
Var3 ok 3
Directory is ok 2
Var1 ok 1
Var2 ok 2
Var3 ok 3
Directory is ok 3
--- Mismatched set and end locals
--- Extra setlocal in called batch
value2
2set1endvalue1
@pwd@\foobar\foodir3
Finished:
value2
@pwd@\foobar\foodir2
value1
@pwd@\foobar
--- Extra endlocal in called batch
value2
value2
@pwd@\foobar\foodir2
value2
@pwd@\foobar\foodir2
Finished:
value2
@pwd@\foobar\foodir2
value1
@pwd@\foobar
--- endlocal in called function rather than batch pgm is ineffective
2
2
1
2
1
2
1
1
------------ Testing Errorlevel ------------
9009
2011-05-26 06:42:37 +02:00
1
errorlevel just right, good
errorlevel with leading zero just right, good
errorlevel with negative number OK
2011-05-26 06:42:37 +02:00
abc0def@or_broken@abc1def
errorlevel zero, good@or_broken@errorlevel nonzero, bad
7 should be 7
7 should still be 7
------------ Testing GOTO ------------
2010-03-24 04:45:49 +01:00
goto with no leading space worked
goto with a leading space worked
goto with a leading tab worked
goto with a following space worked
2012-09-04 01:30:17 +02:00
------------ Testing PATH ------------
PATH=original
PATH=try2
PATH=try3
------------ Testing combined CALLs/GOTOs ------------
world
cheball
barbare
bar
foo
baz
cheball
barbare