BATsh
view release on metacpan or search on metacpan
t/0005-verify_compat.t view on Meta::CPAN
_ok($out eq "1\n2\n3\n", '4-2: FOR block counter with !CNT!');
},
sub {
my $out = _capture_cmd(
'SETLOCAL ENABLEDELAYEDEXPANSION',
'SET X=inside',
'ENDLOCAL',
'ECHO !X!',
);
_ok($out eq "!X!\n", '4-3: after ENDLOCAL !VAR! is not expanded');
},
sub {
my $out = _capture_cmd(
'SETLOCAL ENABLEDELAYEDEXPANSION',
'SET INNER=inner_val',
'ECHO !INNER!',
'ENDLOCAL',
'ECHO !INNER!',
);
_ok($out eq "inner_val\n!INNER!\n", '4-4: nested SETLOCAL/ENDLOCAL scope');
},
# ==============================================================
# Step 5: IF/FOR block %VAR% parse-time expansion
# ==============================================================
sub {
my $out = _capture_cmd(
'SET X=before',
'IF 1==1 (',
' SET X=after',
' ECHO %X%',
')',
);
_ok($out eq "before\n", '5-1: IF block %VAR% is parse-time value (before)');
},
sub {
my $out = _capture_cmd(
'SET Y=original',
'IF 1==2 (',
' ECHO then',
') ELSE (',
' SET Y=changed',
' ECHO %Y%',
')',
);
_ok($out eq "original\n", '5-2: ELSE block %VAR% is parse-time value (original)');
},
sub {
my $out = _capture_cmd(
'SET CNT=0',
'FOR %%i IN (a b c) DO (',
' SET CNT=%%i',
' ECHO %CNT%',
')',
);
_ok($out eq "0\n0\n0\n", '5-3: FOR block %CNT% locked at FOR-line parse time (0)');
},
sub {
my $out = _capture_cmd('SET Z=first', 'SET Z=second', 'ECHO %Z%');
_ok($out eq "second\n", '5-4: outside blocks %VAR% is runtime (sees latest SET)');
},
# ==============================================================
# Step 6: FOR /F
# ==============================================================
sub {
my $out = _capture_cmd(
'FOR /F "tokens=1,2 delims=," %%a IN ("hello,world") DO ECHO %%a / %%b',
);
_ok($out eq "hello / world\n", '6-1: FOR /F tokens=1,2 delims=,');
},
sub {
my $out = _capture_cmd(
'FOR /F "tokens=2" %%a IN ("alpha beta gamma") DO ECHO %%a',
);
_ok($out eq "beta\n", '6-2: FOR /F tokens=2 (default delims=space)');
},
sub {
my $tmp = _tmpfile('ff3', "skip_this\n", "use_this\n");
my $out = _capture_cmd("FOR /F \"skip=1\" %%a IN ($tmp) DO ECHO %%a");
unlink $tmp;
_ok($out eq "use_this\n", '6-3: FOR /F skip=1');
},
sub {
my $out = _capture_cmd(
'FOR /F "tokens=1*" %%a IN ("one two three") DO ECHO [%%a][%%b]',
);
_ok($out eq "[one][two three]\n", '6-4: FOR /F tokens=1* (star=remainder)');
},
sub {
my $tmp = _tmpfile('ff5', "#comment\n", "data_line\n");
my $out = _capture_cmd("FOR /F \"eol=#\" %%a IN ($tmp) DO ECHO %%a");
unlink $tmp;
_ok($out eq "data_line\n", '6-5: FOR /F eol=# skips lines');
},
sub {
my $tmp = _tmpfile('ff6', "key1:val1\n", "key2:val2\n");
my $out = _capture_cmd(
"FOR /F \"tokens=1,2 delims=:\" %%a IN ($tmp) DO ECHO %%a=%%b",
);
unlink $tmp;
_ok($out eq "key1=val1\nkey2=val2\n", '6-6: FOR /F multi-line file key:value');
},
# ==============================================================
# Additional: ERRORLEVEL / IF /I / compound / SET /A
# ==============================================================
sub {
( run in 0.397 second using v1.01-cache-2.11-cpan-bbe5e583499 )