1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
use strict;
use warnings;
use Test::More tests => 30;
use Catalyst ();
sub mock_app {
my $name = shift;
my $meta = Moose->init_meta( for_class => $name );
$meta->superclasses('Catalyst');
$meta->add_after_method_modifier('log', sub {
my ($self, $log) = @_;
if ($log) {
open my $err_fh, '>', \(my $err_out)
or die 'unable to open in memory buffer';
$log->psgienv({ 'psgi.errors' => $err_fh });
}
});
return $name;
}
sub test_log_object {
my ($log, %expected) = @_;
foreach my $level (keys %expected) {
my $method_name = "is_$level";
if ($expected{$level}) {
ok( $log->$method_name(), "Level $level on" );
}
else {
ok( !$log->$method_name(), "Level $level off" );
}
}
}
local %ENV = %ENV;
# Remove all relevant env variables to avoid accidental fail
foreach my $name (grep { /^(CATALYST|TESTAPP)/ } keys %ENV) {
delete $ENV{$name};
}
{
my $app = mock_app('TestAppParseLogLevels');
$app->setup_log('error,warn');
ok !$app->debug, 'Not in debug mode';
test_log_object($app->log,
fatal => 1,
error => 1,
warn => 1,
info => 0,
debug => 0,
);
}
{
local %ENV = %ENV;
$ENV{CATALYST_DEBUG} = 1;
my $app = mock_app('TestAppLogDebugEnvSet');
$app->setup_log('');
ok $app->debug, 'In debug mode';
test_log_object($app->log,
fatal => 1,
error => 1,
warn => 1,
info => 1,
debug => 1,
);
}
{
local %ENV = %ENV;
$ENV{CATALYST_DEBUG} = 0;
my $app = mock_app('TestAppLogDebugEnvUnset');
$app->setup_log('warn');
ok !$app->debug, 'Not In debug mode';
test_log_object($app->log,
fatal => 1,
error => 1,
warn => 1,
info => 0,
debug => 0,
);
}
{
my $app = mock_app('TestAppLogEmptyString');
$app->setup_log('');
ok !$app->debug, 'Not In debug mode';
# Note that by default, you get _all_ the log levels turned on
test_log_object($app->log,
fatal => 1,
error => 1,
warn => 1,
info => 1,
debug => 1,
);
}
{
my $app = mock_app('TestAppLogDebugOnly');
$app->setup_log('debug');
ok $app->debug, 'In debug mode';
test_log_object($app->log,
fatal => 1,
error => 1,
warn => 1,
info => 1,
debug => 1,
);
}
|