use strict;
use Catalyst qw/
Test::MangleDollarUnderScore
- Test::Errors
- Test::Headers
+ Test::Errors
+ Test::Headers
Test::Plugin
Test::Inline
+TestApp::Plugin::FullyQualified
our $VERSION = '0.01';
-TestApp->config(
- name => 'TestApp',
- root => '/some/dir',
- use_request_uri_for_path => 1,
+TestApp->config(
+ name => 'TestApp',
+ root => '/some/dir',
+ use_request_uri_for_path => 1,
'Controller::Action::Action' => {
action_args => {
action_action_nine => { another_extra_arg => 13 }
# above ->setup so we have some generated methods to be double sure.
has an_attribute_before_we_change_base_classes => ( is => 'ro');
-if ($::setup_leakchecker && try_load_class('CatalystX::LeakChecker')) {
- with 'CatalystX::LeakChecker';
+if ($::setup_leakchecker) {
+ require Scalar::Util;
+ require Devel::Cycle;
has leaks => (
is => 'ro',
default => sub { [] },
);
-}
-sub found_leaks {
- my ($ctx, @leaks) = @_;
- push @{ $ctx->leaks }, @leaks;
-}
+ sub count_leaks {
+ my ($ctx) = @_;
+ return scalar @{ $ctx->leaks };
+ }
+
+ after finalize => sub {
+ my ($ctx) = @_;
+ my @leaks;
-sub count_leaks {
- my ($ctx) = @_;
- return scalar @{ $ctx->leaks };
+ my $weak_ctx = $ctx;
+ Scalar::Util::weaken $weak_ctx;
+
+ Devel::Cycle::find_cycle($ctx, sub {
+ my ($path) = @_;
+ push @leaks, $path
+ if $path->[0]->[2] == $weak_ctx;
+ });
+
+ push @{ $ctx->leaks }, @leaks;
+ };
}
TestApp->setup;
# useful info if something crashes during a test
sub finalize_error {
my $c = shift;
-
+
$c->next::method(@_);
-
+
$c->res->status(500);
$c->res->body( 'FATAL ERROR: ' . join( ', ', @{ $c->error } ) );
}
return $c->maybe::next::method(@_);
}
-# Make sure we can load Inline plugins.
+# Make sure we can load Inline plugins.
package Catalyst::Plugin::Test::Inline;
use Moose;