|
#!/usr/bin/perl -w
BEGIN {
push @INC , 't/lib' ;
}
use constant NOT_ZERO => "__NOT_ZERO__" ; my $IsVMS = $^O eq 'VMS' ;
my $IsWin32 = $^O eq 'MSWin32' ;
my $NoTaintSupport = exists ( $Config {taint_support}) && ! $Config {taint_support};
my $SAMPLE_TESTS = File::Spec->catdir(
File::Spec->curdir,
't' ,
'sample-tests'
);
my %deprecated = map { $_ => 1 } qw(
TAP::Parser::good_plan
TAP::Parser::Result::Plan::passed
TAP::Parser::Result::Test::passed
TAP::Parser::Result::Test::actual_passed
TAP::Parser::Result::passed
) ;
$SIG {__WARN__} = sub {
if ( $_ [0] =~ /is deprecated/ ) {
my @caller = caller (1);
my $sub = $caller [3];
ok exists $deprecated { $sub },
"... we should get a deprecated warning for $sub" ;
}
else {
CORE:: warn @_ ;
}
};
my %samples = (
descriptive => {
results => [
{ is_plan => TRUE,
raw => '1..5' ,
tests_planned => 5,
passed => TRUE,
is_ok => TRUE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
description => "Interlock activated" ,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => "Megathrusters are go" ,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => "Head formed" ,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 4,
description => "Blazing sword formed" ,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 5,
description => "Robeast destroyed" ,
is_unplanned => FALSE,
}
],
plan => '1..5' ,
passed => [ 1 .. 5 ],
actual_passed => [ 1 .. 5 ],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 5,
tests_run => 5,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
},
descriptive_trailing => {
results => [
{ actual_passed => TRUE,
is_actual_ok => TRUE,
description => "Interlock activated" ,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => "Megathrusters are go" ,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => "Head formed" ,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 4,
description => "Blazing sword formed" ,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 5,
description => "Robeast destroyed" ,
is_unplanned => FALSE,
},
{ is_plan => TRUE,
raw => '1..5' ,
tests_planned => 5,
passed => TRUE,
is_ok => TRUE,
},
],
plan => '1..5' ,
passed => [ 1 .. 5 ],
actual_passed => [ 1 .. 5 ],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 5,
tests_run => 5,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
},
empty => {
results => [],
plan => '' ,
passed => [],
actual_passed => [],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => FALSE,
is_good_plan => FALSE,
tests_planned => undef ,
tests_run => 0,
parse_errors => [ 'No plan found in TAP output' ],
'exit' => 0,
wait => 0,
version => 12,
},
simple => {
results => [
{ is_plan => TRUE,
raw => '1..5' ,
tests_planned => 5,
passed => TRUE,
is_ok => TRUE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 4,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 5,
description => "" ,
},
],
plan => '1..5' ,
passed => [ 1 .. 5 ],
actual_passed => [ 1 .. 5 ],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 5,
tests_run => 5,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
},
space_after_plan => {
results => [
{ is_plan => TRUE,
raw => '1..5 ' ,
tests_planned => 5,
passed => TRUE,
is_ok => TRUE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 4,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 5,
description => "" ,
},
],
plan => '1..5' ,
passed => [ 1 .. 5 ],
actual_passed => [ 1 .. 5 ],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 5,
tests_run => 5,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
},
space_after_plan_v13 => {
results => [
{ is_version => TRUE,
raw => 'TAP version 13' ,
},
{ is_plan => TRUE,
raw => '1..5 ' ,
tests_planned => 5,
passed => TRUE,
is_ok => TRUE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 4,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 5,
description => "" ,
},
],
plan => '1..5' ,
passed => [ 1 .. 5 ],
actual_passed => [ 1 .. 5 ],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 5,
tests_run => 5,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 13,
},
simple_yaml => {
results => [
{ is_version => TRUE,
raw => 'TAP version 13' ,
},
{ is_plan => TRUE,
raw => '1..5' ,
tests_planned => 5,
passed => TRUE,
is_ok => TRUE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => "" ,
},
{ is_yaml => TRUE,
data => [
{ 'fnurk' => 'skib' , 'ponk' => 'gleeb' },
{ 'bar' => 'krup' , 'foo' => 'plink' }
],
raw =>
" ---\n -\n fnurk: skib\n ponk: gleeb\n -\n bar: krup\n foo: plink\n ..." ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 4,
description => "" ,
},
{ is_yaml => TRUE,
data => {
'got' => [ '1' , 'pong' , '4' ],
'expected' => [ '1' , '2' , '4' ]
},
raw =>
" ---\n expected:\n - 1\n - 2\n - 4\n got:\n - 1\n - pong\n - 4\n ..." ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 5,
description => "" ,
},
],
plan => '1..5' ,
passed => [ 1 .. 5 ],
actual_passed => [ 1 .. 5 ],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 5,
tests_run => 5,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 13,
},
simple_fail => {
results => [
{ is_plan => TRUE,
raw => '1..5' ,
tests_planned => 5,
passed => TRUE,
is_ok => TRUE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => "" ,
},
{ actual_passed => FALSE,
is_actual_ok => FALSE,
passed => FALSE,
is_ok => FALSE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 4,
description => "" ,
},
{ actual_passed => FALSE,
is_actual_ok => FALSE,
passed => FALSE,
is_ok => FALSE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 5,
description => "" ,
},
],
plan => '1..5' ,
passed => [ 1, 3, 4 ],
actual_passed => [ 1, 3, 4 ],
failed => [ 2, 5 ],
actual_failed => [ 2, 5 ],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 5,
tests_run => 5,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
},
skip => {
results => [
{ is_plan => TRUE,
raw => '1..5' ,
tests_planned => 5,
passed => TRUE,
is_ok => TRUE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => TRUE,
has_todo => FALSE,
number => 2,
description => "" ,
explanation => 'rain delay' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 4,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 5,
description => "" ,
},
],
plan => '1..5' ,
passed => [ 1 .. 5 ],
actual_passed => [ 1 .. 5 ],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [2],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 5,
tests_run => 5,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
},
skip_nomsg => {
results => [
{ is_plan => TRUE,
passed => TRUE,
is_ok => TRUE,
raw => '1..1' ,
tests_planned => 1,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => TRUE,
has_todo => FALSE,
number => 1,
description => "" ,
explanation => '' ,
},
],
plan => '1..1' ,
passed => [1],
actual_passed => [1],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [1],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 1,
tests_run => TRUE,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
},
todo_inline => {
results => [
{ is_plan => TRUE,
passed => TRUE,
is_ok => TRUE,
raw => '1..3' ,
tests_planned => 3,
},
{ actual_passed => FALSE,
is_actual_ok => FALSE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => TRUE,
number => 1,
description => "- Foo" ,
explanation => 'Just testing the todo interface.' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => TRUE,
number => 2,
description => "- Unexpected success" ,
explanation => 'Just testing the todo interface.' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => "- This is not todo" ,
explanation => '' ,
},
],
plan => '1..3' ,
passed => [ 1, 2, 3 ],
actual_passed => [ 2, 3 ],
failed => [],
actual_failed => [1],
todo => [ 1, 2 ],
todo_passed => [2],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 3,
tests_run => 3,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
},
todo => {
results => [
{ is_plan => TRUE,
passed => TRUE,
is_ok => TRUE,
raw => '1..5 todo 3 2;' ,
tests_planned => 5,
todo_list => [ 3, 2 ],
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => "" ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => TRUE,
number => 2,
description => "" ,
explanation => '' ,
},
{ actual_passed => FALSE,
is_actual_ok => FALSE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => TRUE,
number => 3,
description => "" ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 4,
description => "" ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 5,
description => "" ,
explanation => '' ,
},
],
plan => '1..5' ,
passed => [ 1, 2, 3, 4, 5 ],
actual_passed => [ 1, 2, 4, 5 ],
failed => [],
actual_failed => [3],
todo => [ 2, 3 ],
todo_passed => [2],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 5,
tests_run => 5,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
},
duplicates => {
results => [
{ is_plan => TRUE,
passed => TRUE,
is_ok => TRUE,
raw => '1..10' ,
tests_planned => 10,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => '' ,
explanation => '' ,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => '' ,
explanation => '' ,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => '' ,
explanation => '' ,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 4,
description => '' ,
explanation => '' ,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 4,
description => '' ,
explanation => '' ,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 5,
description => '' ,
explanation => '' ,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 6,
description => '' ,
explanation => '' ,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 7,
description => '' ,
explanation => '' ,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 8,
description => '' ,
explanation => '' ,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 9,
description => '' ,
explanation => '' ,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => FALSE,
is_ok => FALSE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 10,
description => '' ,
explanation => '' ,
is_unplanned => TRUE,
},
],
plan => '1..10' ,
passed => [ 1 .. 4, 4 .. 9 ],
actual_passed => [ 1 .. 4, 4 .. 10 ],
failed => [10],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => FALSE,
tests_planned => 10,
tests_run => 11,
parse_errors => [
'Tests out of sequence. Found (4) but expected (5)' ,
'Tests out of sequence. Found (5) but expected (6)' ,
'Tests out of sequence. Found (6) but expected (7)' ,
'Tests out of sequence. Found (7) but expected (8)' ,
'Tests out of sequence. Found (8) but expected (9)' ,
'Tests out of sequence. Found (9) but expected (10)' ,
'Tests out of sequence. Found (10) but expected (11)' ,
'Bad plan. You planned 10 tests but ran 11.' ,
],
'exit' => 0,
wait => 0,
},
no_nums => {
results => [
{ is_plan => TRUE,
passed => TRUE,
is_ok => TRUE,
raw => '1..5' ,
tests_planned => 5,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
description => "" ,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => "" ,
},
{ actual_passed => FALSE,
is_actual_ok => FALSE,
passed => FALSE,
is_ok => FALSE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 4,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 5,
description => "" ,
}
],
plan => '1..5' ,
passed => [ 1, 2, 4, 5 ],
actual_passed => [ 1, 2, 4, 5 ],
failed => [3],
actual_failed => [3],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 5,
tests_run => 5,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
},
bailout => {
results => [
{ is_plan => TRUE,
passed => TRUE,
is_ok => TRUE,
raw => '1..5' ,
tests_planned => 5,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
description => "" ,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => "" ,
},
{ is_bailout => TRUE,
explanation => "GERONIMMMOOOOOO!!!" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 4,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 5,
description => "" ,
}
],
plan => '1..5' ,
passed => [ 1 .. 5 ],
actual_passed => [ 1 .. 5 ],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 5,
tests_run => 5,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
},
no_output => {
results => [],
plan => '' ,
passed => [],
actual_passed => [],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => FALSE,
tests_planned => undef ,
tests_run => 0,
parse_errors => [ 'No plan found in TAP output' , ],
'exit' => 0,
wait => 0,
},
too_many => {
results => [
{ is_plan => TRUE,
passed => TRUE,
is_ok => TRUE,
raw => '1..3' ,
tests_planned => 3,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
description => "" ,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => "" ,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => "" ,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => FALSE,
is_ok => FALSE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 4,
description => "" ,
is_unplanned => TRUE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => FALSE,
is_ok => FALSE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 5,
description => "" ,
is_unplanned => TRUE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => FALSE,
is_ok => FALSE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 6,
description => "" ,
is_unplanned => TRUE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => FALSE,
is_ok => FALSE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 7,
description => "" ,
is_unplanned => TRUE,
},
],
plan => '1..3' ,
passed => [ 1 .. 3 ],
actual_passed => [ 1 .. 7 ],
failed => [ 4 .. 7 ],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => FALSE,
tests_planned => 3,
tests_run => 7,
parse_errors => [ 'Bad plan. You planned 3 tests but ran 7.' ],
'exit' => 4,
wait => NOT_ZERO,
skip_if => sub { $IsVMS },
},
taint => {
results => [
{ is_plan => TRUE,
passed => TRUE,
is_ok => TRUE,
raw => '1..1' ,
tests_planned => TRUE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
description => "- -T honored" ,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
},
],
plan => '1..1' ,
passed => [ 1 .. 1 ],
actual_passed => [ 1 .. 1 ],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => TRUE,
tests_run => TRUE,
parse_errors => [],
'exit' => 0,
wait => 0,
skip_if => sub { $NoTaintSupport },
version => 12,
},
'die' => {
results => [],
plan => '' ,
passed => [],
actual_passed => [],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => FALSE,
tests_planned => undef ,
tests_run => 0,
parse_errors => [ 'No plan found in TAP output' , ],
'exit' => NOT_ZERO,
wait => NOT_ZERO,
},
die_head_end => {
results => [
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 4,
description => '' ,
explanation => '' ,
},
],
plan => '' ,
passed => [ 1 .. 4 ],
actual_passed => [ 1 .. 4 ],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => FALSE,
tests_planned => undef ,
tests_run => 4,
parse_errors => [ 'No plan found in TAP output' , ],
'exit' => NOT_ZERO,
wait => NOT_ZERO,
},
die_last_minute => {
results => [
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 4,
description => '' ,
explanation => '' ,
},
{ is_plan => TRUE,
passed => TRUE,
is_ok => TRUE,
raw => '1..4' ,
tests_planned => 4,
},
],
plan => '1..4' ,
passed => [ 1 .. 4 ],
actual_passed => [ 1 .. 4 ],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 4,
tests_run => 4,
parse_errors => [],
'exit' => NOT_ZERO,
wait => NOT_ZERO,
},
bignum => {
results => [
{ is_plan => TRUE,
passed => TRUE,
is_ok => TRUE,
raw => '1..2' ,
tests_planned => 2,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => FALSE,
is_ok => FALSE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 136211425,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => FALSE,
is_ok => FALSE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 136211426,
description => '' ,
explanation => '' ,
},
],
plan => '1..2' ,
passed => [ 1, 2 ],
actual_passed => [ 1, 2, 136211425, 136211426 ],
failed => [ 136211425, 136211426 ],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => FALSE,
tests_planned => 2,
tests_run => 4,
parse_errors => [
'Tests out of sequence. Found (136211425) but expected (3)' ,
'Tests out of sequence. Found (136211426) but expected (4)' ,
'Bad plan. You planned 2 tests but ran 4.'
],
'exit' => 0,
wait => 0,
},
bignum_many => {
results => [
{ is_plan => TRUE,
passed => TRUE,
is_ok => TRUE,
raw => '1..2' ,
tests_planned => 2,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => FALSE,
is_ok => FALSE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 99997,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => FALSE,
is_ok => FALSE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 99998,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => FALSE,
is_ok => FALSE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 99999,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => FALSE,
is_ok => FALSE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 100000,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => FALSE,
is_ok => FALSE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 100001,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => FALSE,
is_ok => FALSE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 100002,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => FALSE,
is_ok => FALSE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 100003,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => FALSE,
is_ok => FALSE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 100004,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => FALSE,
is_ok => FALSE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 100005,
description => '' ,
explanation => '' ,
},
],
plan => '1..2' ,
passed => [ 1, 2 ],
actual_passed => [ 1, 2, 99997 .. 100005 ],
failed => [ 99997 .. 100005 ],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => FALSE,
tests_planned => 2,
tests_run => 11,
parse_errors => [
'Tests out of sequence. Found (99997) but expected (3)' ,
'Tests out of sequence. Found (99998) but expected (4)' ,
'Tests out of sequence. Found (99999) but expected (5)' ,
'Tests out of sequence. Found (100000) but expected (6)' ,
'Tests out of sequence. Found (100001) but expected (7)' ,
'Tests out of sequence. Found (100002) but expected (8)' ,
'Tests out of sequence. Found (100003) but expected (9)' ,
'Tests out of sequence. Found (100004) but expected (10)' ,
'Tests out of sequence. Found (100005) but expected (11)' ,
'Bad plan. You planned 2 tests but ran 11.'
],
'exit' => 0,
wait => 0,
},
combined => {
results => [
{ is_plan => TRUE,
passed => TRUE,
is_ok => TRUE,
raw => '1..10' ,
tests_planned => 10,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => 'basset hounds got long ears' ,
explanation => '' ,
},
{ actual_passed => FALSE,
is_actual_ok => FALSE,
passed => FALSE,
is_ok => FALSE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => 'all hell broke loose' ,
explanation => '' ,
},
{ actual_passed => FALSE,
is_actual_ok => FALSE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => TRUE,
number => 4,
description => '' ,
explanation => 'if I heard a voice from heaven ...' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 5,
description => 'say "live without loving",' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 6,
description => "I'd beg off." ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => '1' ,
has_todo => FALSE,
number => 7,
description => '' ,
explanation => 'contract negotiations' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 8,
description => 'Girls are such exquisite hell' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => TRUE,
number => 9,
description => 'Elegy 9B' ,
explanation => '' ,
},
{ actual_passed => FALSE,
is_actual_ok => FALSE,
passed => FALSE,
is_ok => FALSE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 10,
description => '' ,
explanation => '' ,
},
],
plan => '1..10' ,
passed => [ 1 .. 2, 4 .. 9 ],
actual_passed => [ 1 .. 2, 5 .. 9 ],
failed => [ 3, 10 ],
actual_failed => [ 3, 4, 10 ],
todo => [ 4, 9 ],
todo_passed => [9],
skipped => [7],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 10,
tests_run => 10,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
},
head_end => {
results => [
{ is_comment => TRUE,
passed => TRUE,
is_ok => TRUE,
comment => 'comments' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 4,
description => '' ,
explanation => '' ,
},
{ is_comment => TRUE,
passed => TRUE,
is_ok => TRUE,
comment => 'comment' ,
},
{ is_plan => TRUE,
passed => TRUE,
is_ok => TRUE,
raw => '1..4' ,
tests_planned => 4,
},
{ is_comment => TRUE,
passed => TRUE,
is_ok => TRUE,
comment => 'more ignored stuff' ,
},
{ is_comment => TRUE,
passed => TRUE,
is_ok => TRUE,
comment => 'and yet more' ,
},
],
plan => '1..4' ,
passed => [ 1 .. 4 ],
actual_passed => [ 1 .. 4 ],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 4,
tests_run => 4,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
},
head_fail => {
results => [
{ is_comment => TRUE,
passed => TRUE,
is_ok => TRUE,
comment => 'comments' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => '' ,
explanation => '' ,
},
{ actual_passed => FALSE,
is_actual_ok => FALSE,
passed => FALSE,
is_ok => FALSE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 4,
description => '' ,
explanation => '' ,
},
{ is_comment => TRUE,
passed => TRUE,
is_ok => TRUE,
comment => 'comment' ,
},
{ is_plan => TRUE,
passed => TRUE,
is_ok => TRUE,
raw => '1..4' ,
tests_planned => 4,
},
{ is_comment => TRUE,
passed => TRUE,
is_ok => TRUE,
comment => 'more ignored stuff' ,
},
{ is_comment => TRUE,
passed => TRUE,
is_ok => TRUE,
comment => 'and yet more' ,
},
],
plan => '1..4' ,
passed => [ 1, 3, 4 ],
actual_passed => [ 1, 3, 4 ],
failed => [2],
actual_failed => [2],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 4,
tests_run => 4,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
},
out_of_order => {
results => [
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => '- Test that argument passing works' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description =>
'- Test that passing arguments as references work' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 4,
description => '- Test a normal sub' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 6,
description => '- Detach test' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 8,
description => '- Nested thread test' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 9,
description => '- Nested thread test' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 10,
description => '- Wanted 7, got 7' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 11,
description => '- Wanted 7, got 7' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 12,
description => '- Wanted 8, got 8' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 13,
description => '- Wanted 8, got 8' ,
explanation => '' ,
},
{ is_plan => TRUE,
passed => TRUE,
is_ok => TRUE,
raw => '1..15' ,
tests_planned => 15,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 5,
description => '- Check that Config::threads is true' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 7,
description => '- Detach test' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 14,
description =>
'- Check so that tid for threads work for main thread' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 15,
description =>
'- Check so that tid for threads work for main thread' ,
explanation => '' ,
},
],
plan => '1..15' ,
passed => [ 2 .. 4, 6, 8 .. 13, 1, 5, 7, 14, 15 ],
actual_passed => [ 2 .. 4, 6, 8 .. 13, 1, 5, 7, 14, 15 ],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
is_good_plan => FALSE,
tests_planned => 15,
tests_run => 15,
parse_errors => [
'Tests out of sequence. Found (2) but expected (1)' ,
'Tests out of sequence. Found (3) but expected (2)' ,
'Tests out of sequence. Found (4) but expected (3)' ,
'Tests out of sequence. Found (6) but expected (4)' ,
'Tests out of sequence. Found (8) but expected (5)' ,
'Tests out of sequence. Found (9) but expected (6)' ,
'Tests out of sequence. Found (10) but expected (7)' ,
'Tests out of sequence. Found (11) but expected (8)' ,
'Tests out of sequence. Found (12) but expected (9)' ,
'Tests out of sequence. Found (13) but expected (10)' ,
'Plan (1..15) must be at the beginning or end of the TAP output' ,
'Tests out of sequence. Found (1) but expected (11)' ,
'Tests out of sequence. Found (5) but expected (12)' ,
'Tests out of sequence. Found (7) but expected (13)' ,
],
'exit' => 0,
wait => 0,
},
skipall => {
results => [
{ is_plan => TRUE,
raw => '1..0 # skipping: rope' ,
tests_planned => 0,
passed => TRUE,
is_ok => TRUE,
directive => 'SKIP' ,
explanation => 'rope'
},
],
plan => '1..0' ,
passed => [],
actual_passed => [],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 0,
tests_run => 0,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
skip_all => 'rope' ,
},
skipall_v13 => {
results => [
{ is_version => TRUE,
raw => 'TAP version 13' ,
},
{ is_unknown => TRUE,
raw => '1..0 # skipping: rope' ,
},
],
plan => '' ,
passed => [],
actual_passed => [],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => FALSE,
is_good_plan => FALSE,
tests_planned => FALSE,
tests_run => 0,
parse_errors => [ 'No plan found in TAP output' ],
'exit' => 0,
wait => 0,
version => 13,
},
strict => {
results => [
{ is_version => TRUE,
raw => 'TAP version 13' ,
},
{ is_plan => TRUE,
raw => '1..1' ,
},
{ is_pragma => TRUE,
raw => 'pragma +strict' ,
pragmas => [ '+strict' ],
},
{ is_unknown => TRUE, raw => 'Nonsense!' ,
},
{ is_pragma => TRUE,
raw => 'pragma -strict' ,
pragmas => [ '-strict' ],
},
{ is_unknown => TRUE,
raw => "Doesn't matter." ,
},
{ is_test => TRUE,
raw => 'ok 1 All OK' ,
}
],
plan => '1..1' ,
passed => [1],
actual_passed => [1],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 1,
tests_run => 1,
parse_errors => [ 'Unknown TAP token: "Nonsense!"' ],
'exit' => 0,
wait => 0,
version => 13,
},
skipall_nomsg => {
results => [
{ is_plan => TRUE,
raw => '1..0' ,
tests_planned => 0,
passed => TRUE,
is_ok => TRUE,
directive => 'SKIP' ,
explanation => ''
},
],
plan => '1..0' ,
passed => [],
actual_passed => [],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 0,
tests_run => 0,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
skip_all => '(no reason given)' ,
},
todo_misparse => {
results => [
{ is_plan => TRUE,
raw => '1..1' ,
tests_planned => TRUE,
passed => TRUE,
is_ok => TRUE,
},
{ actual_passed => FALSE,
is_actual_ok => FALSE,
passed => FALSE,
is_ok => FALSE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => 'Hamlette # TODOORNOTTODO' ,
explanation => '' ,
},
],
plan => '1..1' ,
passed => [],
actual_passed => [],
failed => [1],
actual_failed => [1],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => TRUE,
tests_run => 1,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
},
shbang_misparse => {
results => [
{ is_plan => TRUE,
raw => '1..2' ,
tests_planned => 2,
passed => TRUE,
is_ok => TRUE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
description => "" ,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => "" ,
},
],
plan => '1..2' ,
passed => [ 1 .. 2 ],
actual_passed => [ 1 .. 2 ],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 2,
tests_run => 2,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
},
switches => {
results => [
{ is_plan => TRUE,
passed => TRUE,
is_ok => TRUE,
raw => '1..1' ,
tests_planned => 1,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => "" ,
explanation => '' ,
},
],
__ARGS__ => { switches => [ '-Mstrict' ] },
plan => '1..1' ,
passed => [1],
actual_passed => [1],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 1,
tests_run => TRUE,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
},
inc_taint => {
results => [
{ is_plan => TRUE,
passed => TRUE,
is_ok => TRUE,
raw => '1..1' ,
tests_planned => 1,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => "" ,
explanation => '' ,
},
],
__ARGS__ => { switches => [ '-Iexamples' ] },
plan => '1..1' ,
passed => [1],
actual_passed => [1],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 1,
tests_run => TRUE,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
},
sequence_misparse => {
results => [
{ is_plan => TRUE,
raw => '1..5' ,
tests_planned => 5,
passed => TRUE,
is_ok => TRUE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => "\# skipped on foobar system" ,
},
{ is_comment => TRUE,
comment => '1234567890123456789012345678901234567890' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 4,
description => "" ,
},
{ is_comment => TRUE,
comment => '1234567890123456789012345678901234567890' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 5,
description => "" ,
},
],
plan => '1..5' ,
passed => [ 1 .. 5 ],
actual_passed => [ 1 .. 5 ],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 5,
tests_run => 5,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
},
( $IsWin32
? ()
: ( stdout_stderr => {
results => [
{ is_comment => TRUE,
passed => TRUE,
is_ok => TRUE,
comment => 'comments' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => '' ,
explanation => '' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => '' ,
explanation => '' ,
},
{ is_comment => TRUE,
passed => TRUE,
is_ok => TRUE,
comment => 'comment' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 4,
description => '' ,
explanation => '' ,
},
{ is_comment => TRUE,
passed => TRUE,
is_ok => TRUE,
comment => 'more ignored stuff' ,
},
{ is_comment => TRUE,
passed => TRUE,
is_ok => TRUE,
comment => 'and yet more' ,
},
{ is_plan => TRUE,
passed => TRUE,
is_ok => TRUE,
raw => '1..4' ,
tests_planned => 4,
},
],
plan => '1..4' ,
passed => [ 1 .. 4 ],
actual_passed => [ 1 .. 4 ],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 4,
tests_run => 4,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
need_open3 => 1,
}
)
),
junk_before_plan => {
results => [
{ is_unknown => TRUE,
raw => 'this is junk' ,
},
{ is_comment => TRUE,
comment => "this is a comment" ,
},
{ is_plan => TRUE,
passed => TRUE,
is_ok => TRUE,
raw => '1..1' ,
tests_planned => 1,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
},
],
plan => '1..1' ,
passed => [ 1 .. 1 ],
actual_passed => [ 1 .. 1 ],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 1,
tests_run => 1,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
},
version_good => {
results => [
{ is_version => TRUE,
raw => 'TAP version 13' ,
},
{ is_plan => TRUE,
raw => '1..5' ,
tests_planned => 5,
passed => TRUE,
is_ok => TRUE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 4,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 5,
description => "" ,
},
],
plan => '1..5' ,
passed => [ 1 .. 5 ],
actual_passed => [ 1 .. 5 ],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 5,
tests_run => 5,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 13,
},
version_old => {
results => [
{ is_version => TRUE,
raw => 'TAP version 12' ,
},
{ is_plan => TRUE,
raw => '1..5' ,
tests_planned => 5,
passed => TRUE,
is_ok => TRUE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 4,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 5,
description => "" ,
},
],
plan => '1..5' ,
passed => [ 1 .. 5 ],
actual_passed => [ 1 .. 5 ],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 5,
tests_run => 5,
parse_errors =>
[ 'Explicit TAP version must be at least 13. Got version 12' ],
'exit' => 0,
wait => 0,
version => 12,
},
version_late => {
results => [
{ is_plan => TRUE,
raw => '1..5' ,
tests_planned => 5,
passed => TRUE,
is_ok => TRUE,
},
{ is_version => TRUE,
raw => 'TAP version 13' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 4,
description => "" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 5,
description => "" ,
},
],
plan => '1..5' ,
passed => [ 1 .. 5 ],
actual_passed => [ 1 .. 5 ],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 5,
tests_run => 5,
parse_errors =>
[ 'If TAP version is present it must be the first line of output' ],
'exit' => 0,
wait => 0,
version => 12,
},
escape_eol => {
results => [
{ is_plan => TRUE,
raw => '1..2' ,
tests_planned => 2,
passed => TRUE,
is_ok => TRUE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
description =>
'Should parse as literal backslash --> \\' ,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => 'Not a continuation line' ,
is_unplanned => FALSE,
},
],
plan => '1..2' ,
passed => [ 1 .. 2 ],
actual_passed => [ 1 .. 2 ],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 2,
tests_run => 2,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
},
escape_hash => {
results => [
{ is_plan => TRUE,
raw => '1..3' ,
tests_planned => 3,
passed => TRUE,
is_ok => TRUE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
description => 'Not a \\# TODO' ,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => 'Not a \\# SKIP' ,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => 'Escaped \\\\\\#' ,
is_unplanned => FALSE,
},
],
plan => '1..3' ,
passed => [ 1 .. 3 ],
actual_passed => [ 1 .. 3 ],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 3,
tests_run => 3,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 12,
},
zero_valid => {
results => [
{ is_plan => TRUE,
raw => '1..5' ,
tests_planned => 5,
passed => TRUE,
is_ok => TRUE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
description => '- One' ,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
description => '- Two' ,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
description => '- Three' ,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
description => '- Four' ,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 0,
is_unplanned => FALSE,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
description => '- Five' ,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 5,
is_unplanned => FALSE,
},
],
plan => '1..5' ,
passed => [ 1 .. 3, 0, 5 ],
actual_passed => [ 1 .. 3, 0, 5 ],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 5,
tests_run => 5,
parse_errors => [
'Tests out of sequence. Found (0) but expected (4)' ,
],
'exit' => 0,
wait => 0,
version => 12,
},
yaml_late_plan => {
results => [
{ is_version => TRUE,
raw => 'TAP version 13' ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 1,
description => "- test suite started" ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 2,
description => "- bogomips" ,
},
{ is_yaml => TRUE,
data => { 'Bogomips' => '5226.88' },
raw =>
" ---\n Bogomips: 5226.88\n ..." ,
},
{ actual_passed => TRUE,
is_actual_ok => TRUE,
passed => TRUE,
is_ok => TRUE,
is_test => TRUE,
has_skip => FALSE,
has_todo => FALSE,
number => 3,
description => "- test suite finished" ,
},
{ is_plan => TRUE,
raw => '1..3' ,
tests_planned => 3,
passed => TRUE,
is_ok => TRUE,
},
],
plan => '1..3' ,
passed => [ 1 .. 3 ],
actual_passed => [ 1 .. 3 ],
failed => [],
actual_failed => [],
todo => [],
todo_passed => [],
skipped => [],
good_plan => TRUE,
is_good_plan => TRUE,
tests_planned => 3,
tests_run => 3,
parse_errors => [],
'exit' => 0,
wait => 0,
version => 13,
},
);
my %HANDLER_FOR = (
NOT_ZERO, sub { no warnings; 0 != shift },
TRUE, sub { no warnings; !! shift },
FALSE, sub { no warnings; ! shift },
);
my $can_open3 = ( $Config {d_fork} || $IsWin32 ) ? 1 : 0;
for my $hide_fork ( 0 .. $can_open3 ) {
if ( $hide_fork ) {
no strict 'refs' ;
no warnings 'redefine' ;
*{ 'TAP::Parser::Iterator::Process::_use_open3' } = sub { return };
}
TEST:
for my $test ( sort keys %samples ) {
my %details = %{ $samples { $test } };
if ( my $skip_if = delete $details {skip_if} ) {
next TEST if $skip_if ->();
}
my $results = delete $details {results};
my $args = delete $details {__ARGS__};
my $need_open3 = delete $details {need_open3};
next TEST if $need_open3 && ( $hide_fork || ! $can_open3 );
unshift @{ $args ->{switches} },
$ENV {PERL_CORE} ? ( map { "-I$_" } @INC ) : ( '-It/lib' );
$args ->{source} = File::Spec->catfile( $SAMPLE_TESTS , $test );
$args ->{merge} = ! $hide_fork ;
my $parser = eval { analyze_test( $test , [ @$results ], $args ) };
my $error = $@;
ok ! $error , "'$test' should parse successfully"
or diag $error ;
if ( $error ) {
my $tests = 0;
while ( my ( $method , $answer ) = each %details ) {
$tests += ref $answer ? 2 : 1;
}
SKIP: {
skip "$test did not parse successfully" , $tests ;
}
}
else {
while ( my ( $method , $answer ) = each %details ) {
if ( my $handler = $HANDLER_FOR { $answer || '' } ) {
ok $handler ->( $parser -> $method () ),
"... and $method should return a reasonable value ($test)" ;
}
elsif ( ! ref $answer ) {
no warnings 'uninitialized' ;
$answer = _vmsify_answer( $method , $answer );
is $parser -> $method (), $answer ,
"... and $method should equal $answer ($test)" ;
}
else {
is scalar $parser -> $method (), scalar @$answer ,
"... and $method should be the correct amount ($test)" ;
is_deeply [ $parser -> $method () ], $answer ,
"... and $method should be the correct values ($test)" ;
}
}
}
}
}
my %Unix2VMS_Exit_Codes = ( 1 => 4, );
sub _vmsify_answer {
my ( $method , $answer ) = @_ ;
return $answer unless $IsVMS ;
if ( $method eq 'exit'
and exists $Unix2VMS_Exit_Codes { $answer } )
{
$answer = $Unix2VMS_Exit_Codes { $answer };
}
return $answer ;
}
sub analyze_test {
my ( $test , $results , $args ) = @_ ;
my $parser = TAP::Parser->new( $args );
my $count = 1;
while ( defined ( my $result = $parser -> next ) ) {
my $expected = shift @$results ;
my $desc
= $result ->is_test
? $result ->description
: $result ->raw;
$desc = $result ->plan
if $result ->is_plan && $desc =~ /SKIP/i;
$desc =~ s/
$desc =~ s/\s+/ /g;
ok defined $expected ,
"$test/$count We should have a result for $desc" ;
while ( my ( $method , $answer ) = each %$expected ) {
if ( my $handler = $HANDLER_FOR { $answer || '' } ) {
ok $handler ->( $result -> $method () ),
"... and $method should return a reasonable value ($test/$count)" ;
}
elsif ( ref $answer ) {
is_deeply scalar ( $result -> $method () ), $answer ,
"... and $method should return the correct structure ($test/$count)" ;
}
else {
is $result -> $method (), $answer ,
"... and $method should return the correct answer ($test/$count)" ;
}
}
$count ++;
}
is @$results , 0,
"... and we should have the correct number of results ($test)" ;
return $parser ;
}
|