From: Eric Pouech epouech@codeweavers.com
Signed-off-by: Eric Pouech epouech@codeweavers.com --- programs/cmd/tests/test_builtins.cmd | 35 +++++++++++++++++++++++- programs/cmd/tests/test_builtins.cmd.exp | 30 +++++++++++++++++++- 2 files changed, 63 insertions(+), 2 deletions(-)
diff --git a/programs/cmd/tests/test_builtins.cmd b/programs/cmd/tests/test_builtins.cmd index 02020a5a6ef..2ef2d495a63 100644 --- a/programs/cmd/tests/test_builtins.cmd +++ b/programs/cmd/tests/test_builtins.cmd @@ -1440,6 +1440,24 @@ for /F "tokens=1,* delims= " %%a in ("%WINE_ARGS%") do ( goto :test_for_loop_params_parse ) set "WINE_ARGS=" +echo --- nesting and delayed expansion +setlocal enabledelayedexpansion +set WINE_ARGS=1 +for %%a in (a b) do ( + set /a WINE_ARGS+=1 + echo %%a %WINE_ARGS% !WINE_ARGS! + for /l %%b in (1 1 !WINE_ARGS!) do ( + if !WINE_ARGS!==%%b (echo %%b-A1) else echo %%b-A2 + if %WINE_ARGS%==%%b (echo %%b-B1) else echo %%b-B2 + ) +) +setlocal disabledelayedexpansion +echo --- nesting if/for +for %%a in ("f" +"g" +"h" +) do if #==# (echo %%a) +echo ---
mkdir foobar & cd foobar mkdir foo @@ -1990,6 +2008,21 @@ echo.>> bar echo kkk>>bar for /f %%k in (foo bar) do echo %%k for /f %%k in (bar foo) do echo %%k +echo ------ quoting and file access +echo a > f.zzz +echo b >> f.zzz +erase f2.zzz +for /f %%a in (f.zzz) do echo A%%a +for /f %%a in ("f.zzz") do echo B%%a +for /f %%a in (f2.zzz) do echo C%%a +for /f %%a in ("f2.zzz") do echo D%%a +for /f "usebackq" %%a in (f.zzz) do echo E%%a +for /f "usebackq" %%a in ("f.zzz") do echo F%%a +for /f "usebackq" %%a in (f2.zzz) do echo G%%a +for /f "usebackq" %%a in ("f2.zzz") do echo H%%a +for /f %%a in (f*.zzz) do echo I%%a +for /f %%a in ("f*.zzz") do echo J%%a +erase f.zzz echo ------ command argument rem Not implemented on NT4, need to skip it as no way to get output otherwise if "%CD%"=="" goto :SkipFORFcmdNT4 @@ -2085,7 +2118,7 @@ echo 3.14>testfile FOR /F "tokens=*" %%A IN (testfile) DO @echo 1:%%A,%%B FOR /F "tokens=1*" %%A IN (testfile) DO @echo 2:%%A,%%B FOR /F "tokens=2*" %%A IN (testfile) DO @echo 3:%%A,%%B -FOR /F "tokens=1,* delims=." %%A IN (testfile) DO @echo 4:%%A,%%B +FOR /F "tokens=1,*@tab@delims=." %%A IN (testfile) DO @echo 4:%%A,%%B del testfile cd .. rd /s/q foobar diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp index 0f33f2ae05e..e6e6e21cd17 100644 --- a/programs/cmd/tests/test_builtins.cmd.exp +++ b/programs/cmd/tests/test_builtins.cmd.exp @@ -1016,6 +1016,24 @@ B D --- nested FORs and args tempering @todo_wine@inner argument {-foo, bar} @todo_wine@inner argument {-x, y} +--- nesting and delayed expansion +a 1 2 +@todo_wine@1-A2 +@todo_wine@1-B1 +@todo_wine@2-A1 +@todo_wine@2-B2 +@todo_wine@b 1 3 +@todo_wine@1-A2 +@todo_wine@1-B1 +@todo_wine@2-A2 +@todo_wine@2-B2 +@todo_wine@3-A1 +@todo_wine@3-B2 +--- nesting if/for +@todo_wine@"f" +@todo_wine@"g" +@todo_wine@"h" +@todo_wine@--- --- basic wildcards bazbaz --- wildcards in subdirs @@ -1302,6 +1320,16 @@ kkk a b c +------ quoting and file access +Aa +Ab +Bf.zzz +Df2.zzz +Ea +Eb +Fa +Fb +Jf*.zzz ------ command argument Passed1@or_broken@Missing functionality - Broken1 Passed2@or_broken@Missing functionality - Broken2 @@ -1357,7 +1385,7 @@ 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 1:3.14,%B 2:3.14, -4:3,14 +@todo_wine@4:3,14 ------ parameter splitting :forFParameterSplittingFunc myparam1=myvalue1 myparam2=myparam2 mytest@space@@space@@space@ :forFParameterSplittingFunc myparam1=myvalue1 myparam2=myparam2 mytest@space@@space@@space@