Commit | Line | Data |
812082c6 |
1 | use strict; |
2 | use warnings; |
3 | |
abf65c2a |
4 | use Test::More tests => 30; |
812082c6 |
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'); |
53c7cc10 |
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; |
812082c6 |
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 | |
803210fa |
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 | } |
812082c6 |
44 | |
45 | { |
803210fa |
46 | my $app = mock_app('TestAppParseLogLevels'); |
812082c6 |
47 | $app->setup_log('error,warn'); |
48 | ok !$app->debug, 'Not in debug mode'; |
49 | test_log_object($app->log, |
eaae9a92 |
50 | fatal => 1, |
812082c6 |
51 | error => 1, |
52 | warn => 1, |
53 | info => 0, |
54 | debug => 0, |
55 | ); |
56 | } |
57 | { |
803210fa |
58 | local %ENV = %ENV; |
59 | $ENV{CATALYST_DEBUG} = 1; |
60 | my $app = mock_app('TestAppLogDebugEnvSet'); |
812082c6 |
61 | $app->setup_log(''); |
62 | ok $app->debug, 'In debug mode'; |
63 | test_log_object($app->log, |
e2422920 |
64 | fatal => 1, |
65 | error => 1, |
66 | warn => 1, |
67 | info => 1, |
812082c6 |
68 | debug => 1, |
69 | ); |
70 | } |
71 | { |
803210fa |
72 | local %ENV = %ENV; |
73 | $ENV{CATALYST_DEBUG} = 0; |
74 | my $app = mock_app('TestAppLogDebugEnvUnset'); |
abf65c2a |
75 | $app->setup_log('warn'); |
76 | ok !$app->debug, 'Not In debug mode'; |
77 | test_log_object($app->log, |
c72d2e24 |
78 | fatal => 1, |
79 | error => 1, |
abf65c2a |
80 | warn => 1, |
81 | info => 0, |
82 | debug => 0, |
83 | ); |
84 | } |
85 | { |
803210fa |
86 | my $app = mock_app('TestAppLogEmptyString'); |
812082c6 |
87 | $app->setup_log(''); |
88 | ok !$app->debug, 'Not In debug mode'; |
3be47528 |
89 | # Note that by default, you get _all_ the log levels turned on |
c72d2e24 |
90 | test_log_object($app->log, |
91 | fatal => 1, |
92 | error => 1, |
93 | warn => 1, |
94 | info => 1, |
3be47528 |
95 | debug => 1, |
c72d2e24 |
96 | ); |
812082c6 |
97 | } |
98 | { |
803210fa |
99 | my $app = mock_app('TestAppLogDebugOnly'); |
812082c6 |
100 | $app->setup_log('debug'); |
101 | ok $app->debug, 'In debug mode'; |
102 | test_log_object($app->log, |
e2422920 |
103 | fatal => 1, |
104 | error => 1, |
105 | warn => 1, |
106 | info => 1, |
812082c6 |
107 | debug => 1, |
108 | ); |
109 | } |