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