use strict;
use warnings;
use Test::More;
use Test::Builder;
use Test::Builder::Clutch;
plan tests => 14;
ok(1, 'ok() works');
TODO: {
local $TODO = 'TODO block works';
fail 'abject failure';
}
subtest 'subtest works' => sub {
plan tests => 2;
pass;
pass;
};
subtest 'failure in subtest disengaged' => sub {
plan tests => 3;
ok 1, 'abject pass';
Test::Builder::Clutch->disengage;
my $ok = ok undef;
Test::Builder::Clutch->engage;
ok !$ok, 'ok() returned false while clutch disengaged';
ok 1, 'abject pass';
};
TODO: {
local $TODO = 'subtest inside TODO';
subtest 'subtest inside TODO works' => sub {
plan tests => 2;
pass;
fail 'abject failure';
};
}
TODO: {
local $TODO = 'subtest inside subtest inside TODO';
subtest 'subtest inside subtest inside TODO works' => sub {
plan tests => 2;
pass;
subtest 'subtest inside TODO works' => sub {
plan tests => 2;
pass;
fail 'abject failure';
}
};
}
Test::Builder::Clutch->disengage;
pass 'clutch is disengaged'; # DO NOT COUNT THIS TEST
Test::Builder::Clutch->engage;
pass 'clutch is engaged';
ok(Test::Builder->new->is_passing, 'test is still passing');
Test::Builder::Clutch->disengage;
fail 'clutch is disengaged'; # DO NOT COUNT THIS TEST
Test::Builder::Clutch->engage;
pass 'clutch is engaged';
ok(Test::Builder->new->is_passing,
'test reports as passing when clutch engaged');
ok(Test::Builder->new->failed_while_disengaged,
'failure while disengaged was recorded');
Test::Builder::Clutch->disengage;
my $ok = Test::Builder->new->is_passing;
Test::Builder::Clutch->engage;
ok !$ok, 'test reports as not passing when clutch disengaged';
my $Test = Test::Builder->new;
TODO: {
local $TODO = 'Test::Builder failures inside TODO';
$Test->ok(0, 'abject failure');
$Test->subtest('Test::Builder->subtest with failures' => sub {
$Test->plan(tests => 2);
$Test->ok(1);
$Test->ok(0, 'abject failure');
});
}