use inlined module hiding in tests
[catagits/Catalyst-Runtime.git] / t / aggregate / unit_core_log_autoflush.t
1 use strict;
2 use warnings;
3
4 use Test::More tests => 20;
5
6 use Catalyst::Log;
7
8 local *Catalyst::Log::_send_to_log;
9 local our @MESSAGES;
10 {
11     no warnings 'redefine';
12     *Catalyst::Log::_send_to_log = sub {
13         my $self = shift;
14         push @MESSAGES, @_;
15     };
16 }
17
18 my $LOG = 'Catalyst::Log';
19
20 can_ok $LOG, 'new';
21 ok my $log = $LOG->new, '... and creating a new log object should succeed';
22 isa_ok $log, $LOG, '... and the object it returns';
23
24 can_ok $log, 'is_info';
25 ok $log->is_info, '... and the default behavior is to allow info messages';
26
27 can_ok $log, 'info';
28 ok $log->info('hello there!'),
29     '... passing it an info message should succeed';
30
31 ok @MESSAGES, '... and immediately flush the log';
32 is scalar @MESSAGES, 1, '... with one log message';
33 like $MESSAGES[0], qr/^\[info\] hello there!$/,
34     '... which should match the format we expect';
35
36 {
37
38     package Catalyst::Log::Subclass;
39     use base qw/Catalyst::Log/;
40
41     sub _send_to_log {
42         my $self = shift;
43         push @MESSAGES, '---';
44         push @MESSAGES, @_;
45     }
46 }
47
48 @MESSAGES = (); # clear the message log
49
50 my $SUBCLASS = 'Catalyst::Log::Subclass';
51 can_ok $SUBCLASS, 'new';
52 ok $log = Catalyst::Log::Subclass->new,
53     '... and the log subclass constructor should return a new object';
54 isa_ok $log, $SUBCLASS, '... and the object it returns';
55 isa_ok $log, $LOG,      '... and it also';
56
57 can_ok $log, 'info';
58 ok $log->info('hi there!'),
59     '... passing it an info message should succeed';
60
61 ok @MESSAGES, '... and immediately flush the log';
62 is scalar @MESSAGES, 2, '... with two log messages';
63 is $MESSAGES[0], '---', '... with the first one being our new data';
64 like $MESSAGES[1], qr/^\[info\] hi there!$/,
65     '... which should match the format we expect';
66