BATsh
view release on metacpan or search on metacpan
t/0003-cmd-interpreter.t view on Meta::CPAN
$BATsh::Env::STORE{'CMD_T2'} = 'world';
my $out = _capture(sub { BATsh->run_string('ECHO %CMD_T2%') });
_ok($out =~ /world/, 'CMD2: ECHO expands %VAR%');
},
# CMD3: IF condition true
sub {
delete $BATsh::Env::STORE{'CMD_T3'};
BATsh->run_string(join("\n",
'SET CMD_T3=before',
'IF "1"=="1" SET CMD_T3=if_true',
));
_ok(( defined( $BATsh::Env::STORE{'CMD_T3'} ) ? $BATsh::Env::STORE{'CMD_T3'} : '' ) eq 'if_true',
'CMD3: IF condition true');
},
# CMD4: IF condition false
sub {
delete $BATsh::Env::STORE{'CMD_T4'};
BATsh->run_string(join("\n",
'SET CMD_T4=before',
'IF "1"=="2" SET CMD_T4=should_not_set',
));
_ok(( defined( $BATsh::Env::STORE{'CMD_T4'} ) ? $BATsh::Env::STORE{'CMD_T4'} : '' ) eq 'before',
'CMD4: IF condition false');
},
# CMD5: IF ... ( ... ) ELSE ( ... ) multiline
sub {
delete $BATsh::Env::STORE{'CMD_T5'};
BATsh->run_string(join("\n",
'IF "x"=="y" (',
' SET CMD_T5=wrong',
') ELSE (',
' SET CMD_T5=else_ok',
')',
));
_ok(( defined( $BATsh::Env::STORE{'CMD_T5'} ) ? $BATsh::Env::STORE{'CMD_T5'} : '' ) eq 'else_ok',
'CMD5: IF/ELSE multiline block');
},
# CMD6: FOR %%V IN (list) DO
sub {
delete $BATsh::Env::STORE{'CMD_T6'};
BATsh->run_string(join("\n",
'SET CMD_T6=',
'FOR %%I IN (A B C) DO SET CMD_T6=%CMD_T6%%%I',
));
_ok(( defined( $BATsh::Env::STORE{'CMD_T6'} ) ? $BATsh::Env::STORE{'CMD_T6'} : '' ) eq 'ABC',
'CMD6: FOR %%V IN (list) DO accumulates');
},
# CMD7: FOR /L %%N IN (1,1,5) DO
sub {
delete $BATsh::Env::STORE{'CMD_T7'};
BATsh->run_string(join("\n",
'SET CMD_T7=0',
'FOR /L %%N IN (1,1,5) DO SET /A CMD_T7=%CMD_T7%+1',
));
_ok(( defined( $BATsh::Env::STORE{'CMD_T7'} ) ? $BATsh::Env::STORE{'CMD_T7'} : '' ) eq '5',
'CMD7: FOR /L counts 5 iterations');
},
# CMD8: SET /A arithmetic
sub {
delete $BATsh::Env::STORE{'CMD_T8'};
BATsh->run_string("SET /A CMD_T8=6*7");
_ok(( defined( $BATsh::Env::STORE{'CMD_T8'} ) ? $BATsh::Env::STORE{'CMD_T8'} : '' ) eq '42',
'CMD8: SET /A 6*7 = 42');
},
# CMD9: GOTO skips lines until label
sub {
delete $BATsh::Env::STORE{'CMD_T9'};
BATsh->run_string(join("\n",
'SET CMD_T9=before',
'GOTO :SKIP9',
'SET CMD_T9=should_skip',
':SKIP9',
'SET CMD_T9=%CMD_T9%_after',
));
_ok(( defined( $BATsh::Env::STORE{'CMD_T9'} ) ? $BATsh::Env::STORE{'CMD_T9'} : '' ) eq 'before_after',
'CMD9: GOTO skips to label');
},
# CMD10: SETLOCAL / ENDLOCAL restores scope
sub {
$BATsh::Env::STORE{'CMD_T10'} = 'outer';
BATsh->run_string(join("\n",
'SETLOCAL',
'SET CMD_T10=inner',
'ENDLOCAL',
));
_ok(( defined( $BATsh::Env::STORE{'CMD_T10'} ) ? $BATsh::Env::STORE{'CMD_T10'} : '' ) eq 'outer',
'CMD10: SETLOCAL/ENDLOCAL restores variable');
},
# CMD11: IF DEFINED
sub {
$BATsh::Env::STORE{'CMD_T11_DEFINED'} = 'yes';
delete $BATsh::Env::STORE{'CMD_T11_RESULT'};
BATsh->run_string(join("\n",
'IF DEFINED CMD_T11_DEFINED SET CMD_T11_RESULT=defined_ok',
));
_ok(( defined( $BATsh::Env::STORE{'CMD_T11_RESULT'} ) ? $BATsh::Env::STORE{'CMD_T11_RESULT'} : '' ) eq 'defined_ok',
'CMD11: IF DEFINED');
},
# CMD12: IF NOT
sub {
delete $BATsh::Env::STORE{'CMD_T12'};
BATsh->run_string(join("\n",
'IF NOT "a"=="b" SET CMD_T12=not_ok',
));
_ok(( defined( $BATsh::Env::STORE{'CMD_T12'} ) ? $BATsh::Env::STORE{'CMD_T12'} : '' ) eq 'not_ok',
'CMD12: IF NOT condition');
},
# CMD13: SETLOCAL nested
# CMD_T13_L1 is set BETWEEN the two ENDLOCALs.
# The outer SETLOCAL was taken before CMD_T13_L1 existed, so ENDLOCAL
( run in 1.175 second using v1.01-cache-2.11-cpan-71847e10f99 )