use strict;
use warnings;
+use Class::MOP::Class;
use Catalyst::Runtime;
-use Test::More tests => 18;
+use Test::More tests => 29;
{
# Silence the log.
- no warnings 'redefine';
- *Catalyst::Log::_send_to_log = sub {};
+ my $meta = Catalyst::Log->meta;
+ $meta->make_mutable;
+ $meta->remove_method('_send_to_log');
+ $meta->add_method('_send_to_log', sub {});
}
-TESTDEBUG: {
- package MyTestDebug;
- use parent qw/Catalyst/;
- __PACKAGE__->setup(
- '-Debug',
- );
+sub build_test_app_with_setup {
+ my ($name, @flags) = @_;
+ my $flags = '(' . join(', ', map { "'".$_."'" } @flags) . ')';
+ $flags = '' if $flags eq '()';
+ eval qq{
+ package $name;
+ use Catalyst $flags;
+ $name->setup;
+ };
+ die $@ if $@;
+ return $name;
}
-ok my $c = MyTestDebug->new, 'Get debug app object';
-ok my $log = $c->log, 'Get log object';
-isa_ok $log, 'Catalyst::Log', 'It should be a Catalyst::Log object';
-ok !$log->is_warn, 'Warnings should be disabled';
-ok !$log->is_error, 'Errors should be disabled';
-ok !$log->is_fatal, 'Fatal errors should be disabled';
-ok !$log->is_info, 'Info should be disabled';
-ok $log->is_debug, 'Debugging should be enabled';
-can_ok 'MyTestDebug', 'debug';
-ok +MyTestDebug->debug, 'And it should return true';
-
-
-TESTAPP: {
- package MyTestLog;
- use parent qw/Catalyst/;
- __PACKAGE__->setup(
- '-Log=warn,error,fatal'
- );
+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 = build_test_app_with_setup('TestAppMyTestDebug', '-Debug');
+
+ ok my $c = $app->new, 'Get debug app object';
+ ok my $log = $c->log, 'Get log object';
+ isa_ok $log, 'Catalyst::Log', 'It should be a Catalyst::Log object';
+ ok $log->is_warn, 'Warnings should be enabled';
+ ok $log->is_error, 'Errors should be enabled';
+ ok $log->is_fatal, 'Fatal errors should be enabled';
+ ok $log->is_info, 'Info should be enabled';
+ ok $log->is_debug, 'Debugging should be enabled';
+ ok $app->debug, 'debug method should return true';
}
-ok $c = MyTestLog->new, 'Get log app object';
-ok $log = $c->log, 'Get log object';
-isa_ok $log, 'Catalyst::Log', 'It should be a Catalyst::Log object';
-ok $log->is_warn, 'Warnings should be enabled';
-ok $log->is_error, 'Errors should be enabled';
-ok $log->is_fatal, 'Fatal errors should be enabled';
-ok !$log->is_info, 'Info should be disabled';
-ok !$log->is_debug, 'Debugging should be disabled';
+{
+ my $app = build_test_app_with_setup('TestAppMyTestLogParam', '-Log=warn,error,fatal');
+
+ ok my $c = $app->new, 'Get log app object';
+ ok my $log = $c->log, 'Get log object';
+ isa_ok $log, 'Catalyst::Log', 'It should be a Catalyst::Log object';
+ ok $log->is_warn, 'Warnings should be enabled';
+ ok $log->is_error, 'Errors should be enabled';
+ ok $log->is_fatal, 'Fatal errors should be enabled';
+ ok !$log->is_info, 'Info should be disabled';
+ ok !$log->is_debug, 'Debugging should be disabled';
+ ok !$c->debug, 'Catalyst debugging is off';
+}
+{
+ my $app = build_test_app_with_setup('TestAppMyTestNoParams');
+
+ ok my $c = $app->new, 'Get log app object';
+ ok my $log = $c->log, 'Get log object';
+ isa_ok $log, 'Catalyst::Log', 'It should be a Catalyst::Log object';
+ ok $log->is_warn, 'Warnings should be enabled';
+ ok $log->is_error, 'Errors should be enabled';
+ ok $log->is_fatal, 'Fatal errors should be enabled';
+ ok $log->is_info, 'Info should be enabled';
+ ok $log->is_debug, 'Debugging should be enabled';
+ ok !$c->debug, 'Catalyst debugging turned off';
+}
+my $log_meta = Class::MOP::Class->create_anon_class(
+ methods => { map { $_ => sub { 0 } } qw/debug error fatal info warn/ },
+);
+{
+ package TestAppWithOwnLogger;
+ use base qw/Catalyst/;
+ __PACKAGE__->log($log_meta->new_object);
+ __PACKAGE__->setup('-Debug');
+}
+
+ok my $c = TestAppWithOwnLogger->new, 'Get with own logger app object';
+ok $c->debug, '$c->debug is true';
+