use Test::More 'no_plan';
use strict;
my $Class = 'Log::Message::Simple';
my @Carp = qw[carp croak cluck confess];
my @Msg = qw[msg debug error];
my $Text = 'text';
my $Pkg = 'Test::A';
use_ok( $Class );
{ package Test::A;
### set up local equivalents to exported functions
### so we can print to closed FH without having to worry
### about warnings
### close stderr/warnings for that same purpose, as carp
### & friends will print there
for my $name (@Carp, @Msg) {
no strict 'refs';
*$name = sub {
local $^W;
### do the block twice to avoid 'used only once'
### warnings
local $Log::Message::Simple::ERROR_FH;
local $Log::Message::Simple::DEBUG_FH;
local $Log::Message::Simple::MSG_FH;
local $Log::Message::Simple::ERROR_FH;
local $Log::Message::Simple::DEBUG_FH;
local $Log::Message::Simple::MSG_FH;
local *STDERR;
local $SIG{__WARN__} = sub { };
my $ref = $Class->can( $name );
$ref->( @_ );
};
}
}
for my $name (@Carp, @Msg) {
my $ref = $Pkg->can( $name );
ok( $ref, "Found function for '$name'" );
### start with an empty stack?
cmp_ok( scalar @{[$Class->stack]}, '==', 0,
" Starting with empty stack" );
ok(!$Class->stack_as_string," Stringified stack empty" );
### call the func... no output should appear
### eval this -- the croak/confess functions die
eval { $ref->( $Text ); };
my @stack = $Class->stack;
cmp_ok( scalar(@stack), '==', 1,
" Text logged to stack" );
for my $re ( $Text, quotemeta '['.uc($name).']' ) {
like( $Class->stack_as_string, qr/$re/,
" Text as expected" );
}
### empty stack again ###
ok( $Class->flush, " Stack flushed" );
cmp_ok( scalar @{[$Class->stack]}, '==', 0,
" Starting with empty stack" );
ok(!$Class->stack_as_string," Stringified stack empty" );
}