Test case using Exception::Class
[catagits/Catalyst-Runtime.git] / t / unit_core_setup_stats.t
1 use strict;
2 use warnings;
3
4 use Test::More tests => 5;
5 use Class::MOP::Class;
6
7 use Catalyst ();
8
9 my %log_messages; # TODO - Test log messages as expected.
10 my $mock_log = Class::MOP::Class->create_anon_class(
11     methods => {
12         map { my $level = $_;
13             $level => sub {
14                 $log_messages{$level} ||= [];
15                 push(@{ $log_messages{$level} }, $_[1]);
16             },
17         }
18         qw/debug info warn error fatal/,
19     },
20 )->new_object;
21
22 sub mock_app {
23     my $name = shift;
24     %log_messages = (); # Flatten log messages.
25     diag "Setting up mock application: $name";
26     my $meta = Moose->init_meta( for_class => $name );
27     $meta->superclasses('Catalyst');
28     $meta->add_method('log', sub { $mock_log }); 
29     return $meta->name;
30 }
31
32 local %ENV = %ENV;
33
34 # Remove all relevant env variables to avoid accidental fail
35 foreach my $name (grep { /^(CATALYST|TESTAPP)/ } keys %ENV) {
36     delete $ENV{$name};
37 }
38
39 {
40     my $app = mock_app('TestAppNoStats');
41     $app->setup_stats();
42     ok !$app->use_stats, 'stats off by default';
43 }
44 {
45     my $app = mock_app('TestAppStats');
46     $app->setup_stats(1);
47     ok $app->use_stats, 'stats on if you say >setup_stats(1)';
48 }
49 {
50     my $app = mock_app('TestAppStatsDebugTurnsStatsOn');
51     $app->meta->add_method('debug' => sub { 1 });
52     $app->setup_stats();
53     ok $app->use_stats, 'debug on turns stats on';
54 }
55 {
56     local %ENV = %ENV;
57     $ENV{CATALYST_STATS} = 1;
58     my $app = mock_app('TestAppStatsEnvSet');
59     $app->setup_stats();
60     ok $app->use_stats, 'ENV turns stats on';
61 }
62 {
63     local %ENV = %ENV;
64     $ENV{CATALYST_STATS} = 0;
65     my $app = mock_app('TestAppStatsEnvUnset');
66     $app->meta->add_method('debug' => sub { 1 });
67     $app->setup_stats(1);
68     ok !$app->use_stats, 'ENV turns stats off, even when debug on and ->setup_stats(1)';
69 }
70