#! perl -T
use strict;
use warnings;
use Test::More tests => 30;
use Test::MockObject;
my $mock = Test::MockObject->new();
$mock->fake_module( 'Pod::Simple::Text',
VERSION => sub { 1 },
map {
my $sub = $_;
$mock->set_always( $sub => $sub );
$sub => sub { shift; $mock->$sub( @_ ) }
} qw( start_head1 start_item_bullet end_item_bullet handle_text end_head1 )
);
my $module = 'Mail::Action::PodToHelp';
use_ok( $module ) or exit;
my $p2h = bless {}, $module;
can_ok( $module, 'start_head1' );
my $result = $p2h->start_head1( 'args' );
my ($method, $args) = $mock->next_call();
is( $p2h->{_in_head1}, 1, 'start_head1() should set in head1 flag' );
is( $method, 'start_head1', '... calling parent method' );
is( $args->[1], 'args', '... with args' );
is( $result, 'start_head1', '... returning results' );
for my $testmeth (qw( start_item_bullet end_item_bullet ))
{
can_ok( $module, $testmeth );
$p2h->{_show} = 1;
$result = $p2h->$testmeth( 'args' );
($method, $args) = $mock->next_call();
is( $method, $testmeth, "$testmeth() should call parent" );
is( $args->[1], 'args', '... with args' );
is( $result, $testmeth, '... returning results' );
$p2h->{_show} = 0;
is( $p2h->$testmeth(),
undef, '... unless show flag is disabled' );
}
can_ok( $module, 'show_headings' );
$p2h->show_headings( 'first', 'second' );
is_deeply(
$p2h->{_show_headings},
{ first => 1, second => 1 },
'show_headings() should save passed in headings' );
can_ok( $module, 'handle_text' );
$p2h->{_show} = 0;
$result = $p2h->handle_text( '' );
is( $result, undef, 'handle_text() should return without show flag' );
$p2h->{_in_head1} = 1;
$p2h->{_show} = 0;
$p2h->handle_text( 'first' );
is( $p2h->{_show}, 1, '... setting show flag if handling a showable heading' );
$p2h->{_show} = 0;
$p2h->handle_text( 'second' );
is( $p2h->{_show}, 1, '... any showable heading' );
$p2h->{_show} = 0;
$p2h->handle_text( 'yuckyfoo' );
ok( ! $p2h->{_show}, '... but not for anything else' );
$mock->clear();
$p2h->{_in_head1} = 0;
$p2h->{_show} = 1;
$result = $p2h->handle_text( 'text' );
($method, $args) = $mock->next_call();
is( $method, 'handle_text', '... should call parent if show flag is set' );
is( $args->[1], 'text', '... passing args' );
is( $result, 'handle_text', '... returning results' );
can_ok( $module, 'end_head1' );
$p2h->{_in_head1} = 1;
$result = $p2h->end_head1( 'args' );
($method, $args) = $mock->next_call();
is( $p2h->{_in_head1}, 0, 'end_head1() should unset in head1 flag' );
is( $method, 'end_head1', '... calling parent method' );
is( $args->[1], 'args', '... passing args' );