1use strict; 2use warnings; 3use FindBin; 4use lib "$FindBin::Bin/lib"; 5use Test::More; 6use Log::Dump::Test::Child; 7 8BEGIN { 9 eval { require IO::Capture::Stderr; 1 } 10 or plan skip_all => 'requires IO::Capture::Stderr'; 11} 12 13my $capture = IO::Capture::Stderr->new; 14my $package = 'Log::Dump::Test::Child'; 15my $object = $package->new; 16 17subtest 'log' => sub { 18 for my $target ($package, $object) { 19 $capture->start; 20 $target->log( debug => 'message' ); 21 $capture->stop; 22 my $captured = join "\n", $capture->read; 23 24 like $captured => qr/\[debug\] message/, 'captured'; 25 unlike $captured => qr{Log.Dump(?!.Test)}, 'not from Log::Dump'; 26 } 27}; 28 29subtest 'dump' => sub { 30 for my $target ($package, $object) { 31 $capture->start; 32 $target->log( dump => ['message', 'array'] ); 33 $capture->stop; 34 my $captured = join "\n", $capture->read; 35 36 like $captured => qr/\[dump\] \["message", "array"\]/, 'captured'; 37 unlike $captured => qr{Log.Dump(?!.Test)}, 'not from Log::Dump'; 38 } 39}; 40 41subtest 'error' => sub { 42 for my $target ($package, $object) { 43 $capture->start; 44 $target->log( error => 'message' ); 45 $capture->stop; 46 my $captured = $capture->read; 47 48 like $captured => qr/\[error\] message at/, 'captured'; 49 unlike $captured => qr{Log.Dump(?!.Test)}, 'not from Log::Dump'; 50 } 51}; 52 53subtest 'fatal' => sub { 54 for my $target ($package, $object) { 55 eval { $target->log( fatal => 'message' ) }; 56 57 like $@ => qr/\[fatal\] message at/, 'captured'; 58 unlike $@ => qr{Log.Dump(?!.Test)}, 'not from Log::Dump'; 59 } 60}; 61 62subtest 'array' => sub { 63 for my $target ($package, $object) { 64 $capture->start; 65 $target->log( array => 'message', 'array' ); 66 $capture->stop; 67 my $captured = join "\n", $capture->read; 68 69 like $captured => qr/\[array\] messagearray/, 'captured'; 70 unlike $captured => qr{Log.Dump(?!.Test)}, 'not from Log::Dump'; 71 } 72}; 73 74subtest 'logger' => sub { 75 for my $target ($package, $object) { 76 $capture->start; 77 $target->log( debug => 'message' ); 78 $capture->stop; 79 my $captured = join "\n", $capture->read; 80 81 like $captured => qr/\[debug\] message/, 'captured'; 82 unlike $captured => qr{Log.Dump(?!.Test)}, 'not from Log::Dump'; 83 84 $target->logger(0); 85 is $target->logger => 0, 'logger value is correct'; 86 87 $capture->start; 88 $target->log( debug => 'logger is disabled' ); 89 $capture->stop; 90 $captured = join "\n", $capture->read; 91 92 ok !$captured, 'logger is disabled'; 93 94 $target->logger(1); 95 is $target->logger => 1, 'logger value is correct'; 96 97 $capture->start; 98 $target->log( debug => 'logger is enabled' ); 99 $capture->stop; 100 $captured = join "\n", $capture->read; 101 102 like $captured => qr/\[debug\] logger is enabled/, 'captured'; 103 unlike $captured => qr{Log.Dump(?!.Test)}, 'not from Log::Dump'; 104 } 105}; 106 107subtest 'custom_logger' => sub { 108 for my $target ($package, $object) { 109 $capture->start; 110 $target->log( debug => 'message' ); 111 $capture->stop; 112 my $captured = join "\n", $capture->read; 113 114 like $captured => qr/\[debug\] message/, 'captured'; 115 unlike $captured => qr{Log.Dump(?!.Test)}, 'not from Log::Dump'; 116 117 $target->logger(0); 118 is $target->logger => 0, 'logger value is correct'; 119 120 $capture->start; 121 $target->log( debug => 'logger is disabled' ); 122 $capture->stop; 123 $captured = join "\n", $capture->read; 124 125 ok !$captured, 'logger is disabled'; 126 127 $target->logger('Log::Dump::Test::CustomLogger'); 128 is $target->logger => 'Log::Dump::Test::CustomLogger', 'logger value is correct'; 129 130 $capture->start; 131 $target->log( debug => 'custom logger is enabled' ); 132 $capture->stop; 133 $captured = join "\n", $capture->read; 134 135 like $captured => qr/debug custom logger is enabled/, 'captured'; 136 unlike $captured => qr{Log.Dump(?!.Test)}, 'not from Log::Dump'; 137 138 my $logger_object = Log::Dump::Test::CustomLogger->new; 139 $target->logger($logger_object); 140 141 $capture->start; 142 $target->log( debug => 'custom logger object is enabled' ); 143 $capture->stop; 144 $captured = join "\n", $capture->read; 145 146 like $captured => qr/debug custom logger object is enabled/, 'captured'; 147 unlike $captured => qr{Log.Dump(?!.Test)}, 'not from Log::Dump'; 148 149 $target->logger(1); # back to the default 150 } 151}; 152 153done_testing; 154 155package # 156 Log::Dump::Test::CustomLogger; 157 158sub new { bless {}, shift } 159sub log { shift; print STDERR join ' ', @_ } 160 1611; 162