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 )