### make sure we can find our conf.pl file BEGIN { use FindBin; require "$FindBin::Bin/inc/conf.pl"; } use strict; use Test::More 'no_plan'; use Data::Dumper; use FileHandle; use CPANPLUS::Error; my $conf = gimme_conf(); my $map = { cp_msg => ["This is just a test message"], msg => ["This is just a test message"], cp_error => ["This is just a test error"], error => ["This is just a test error"], }; ### check if CPANPLUS::Error can do what we expect { for my $name ( keys %$map ) { can_ok('CPANPLUS::Error', $name); can_ok('main', $name); # did it get exported? } } ### make sure we start with an empty stack { CPANPLUS::Error->flush; is( scalar(()=CPANPLUS::Error->stack), 0, "Starting with empty stack" ); } ### global variables test ### { my $file = output_file(); ### this *has* to be set, as we're testing the contents of the file ### to see if it matches what's stored in the buffer. local $CPANPLUS::Error::MSG_FH = output_handle(); local $CPANPLUS::Error::ERROR_FH = output_handle(); ok( -e $file, "Output redirect file exists" ); ok( !-s $file, " Output file is empty" ); ### print a msg & error ### for my $name ( keys %$map ) { my $sub = __PACKAGE__->can( $name ); $sub->( $map->{$name}->[0], 1 ); } ### must close it for Win32 tests! close output_handle; ok( -s $file, " Output file now has size" ); my $fh = FileHandle->new( $file ); ok( $fh, "Opened output file for reading " ); my $contents = do { local $/; <$fh> }; my $string = CPANPLUS::Error->stack_as_string; my $trace = CPANPLUS::Error->stack_as_string(1); ok( $contents, " Got the file contents" ); ok( $string, "Got the error stack as string" ); for my $type ( keys %$map ) { my $tag = $type; $tag =~ s/.+?_//g; for my $str (@{ $map->{$type} } ) { like( $contents, qr/\U\Q$tag/, " Contents matches for '$type'" ); like( $contents, qr/\Q$str/, " Contents matches for '$type'" ); like( $string, qr/\U\Q$tag/, " String matches for '$type'" ); like( $string, qr/\Q$str/, " String matches for '$type'" ); like( $trace, qr/\U\Q$tag/, " Trace matches for '$type'" ); like( $trace, qr/\Q$str/, " Trace matches for '$type'" ); ### extra trace tests ### like( $trace, qr/\Q$str\E.*?\Q$str/s, " Trace holds proper traceback" ); like( $trace, qr/\Q$0/, " Trace holds program name" ); like( $trace, qr/line/, " Trace holds line number information" ); } } ### check the stack, flush it, check again ### is( scalar(()=CPANPLUS::Error->stack), scalar(keys(%$map)), "All items on stack" ); is( scalar(()=CPANPLUS::Error->flush), scalar(keys(%$map)), "All items flushed" ); is( scalar(()=CPANPLUS::Error->stack), 0, "No items on stack" ); } # Local variables: # c-indentation-style: bsd # c-basic-offset: 4 # indent-tabs-mode: nil # End: # vim: expandtab shiftwidth=4: