#!perl -w BEGIN { unless ($ENV{AUTHOR_TESTING}) { require Test::More; Test::More::plan(skip_all => 'these tests are for testing by the author'); } } use Devel::LeakGuard::Object qw(leakguard); use File::Path qw(mkpath); use File::Temp qw(tempdir); use Test::Most; use Mason::Util qw(write_file); use Mason; sub testleaks { my $code = shift; my $report; $code->(); leakguard( sub { $code->() }, only => 'Mason*', on_leak => sub { $report = shift; } ); if ($report) { my $desc = join("\n", map { sprintf("%s %d %d", $_, @{ $report->{$_} }) } keys(%$report)); ok( 0, "leaks found:\n$desc" ); } else { ok( 1, "no leaks found" ); } } my $root = tempdir('name-XXXX', TMPDIR => 1, CLEANUP => 1); my $comp_root = "$root/comps"; my $data_dir = "$root/data"; mkpath( [ $comp_root, $data_dir ], 0, 0775 ); testleaks( sub { my $interp = Mason->new( comp_root => $comp_root, data_dir => $data_dir ); foreach my $comp (qw(foo bar)) { write_file("$comp_root/$comp.mc", "Hi"); $interp->run("/$comp"); } } ); done_testing();