Login
Fix ProhibitPunctuationVars in tests.
[gknop/Perl-Critic.git] / t / 92_memory_leaks.t
1 #!perl
2
3 ##############################################################################
4 #      $URL$
5 #     $Date$
6 #   $Author$
7 # $Revision$
8 ##############################################################################
9
10 use 5.006001;
11 use strict;
12 use warnings;
13
14 use English qw< -no_match_vars >;
15 use Carp qw< confess >;
16
17 use PPI::Document;
18
19 use Perl::Critic::PolicyFactory -test => 1;
20 use Perl::Critic::Document;
21 use Perl::Critic;
22 use Perl::Critic::TestUtils qw();
23
24 use Test::More; #plan set below
25
26 #-----------------------------------------------------------------------------
27
28 our $VERSION = '1.088';
29
30 #-----------------------------------------------------------------------------
31
32 Perl::Critic::TestUtils::block_perlcriticrc();
33
34 eval 'use Test::Memory::Cycle'; ## no critic
35 plan skip_all => 'Test::Memory::Cycle requried to test memory leaks'
36     if $EVAL_ERROR;
37
38 #-----------------------------------------------------------------------------
39 {
40
41     # We have to create and test Perl::Critic::Document for memory leaks
42     # separately because it is not a persistent attribute of the Perl::Critic
43     # object.  The current API requires us to create the P::C::Document from
44     # an instance of an existing PPI::Document.  In the future, I hope to make
45     # that interface a little more opaque.  But this works for now.
46
47     # Coincidentally, I've discovered that PPI::Documents may or may not
48     # contain circular references, depending on the input code.  On some
49     # level, I'm sure this makes perfect sense, but I haven't stopped to think
50     # about it.  The particular input we use here does not seem to create
51     # circular references.
52
53     my $code    = q{print foo(); split /this/, $that;};
54     my $ppi_doc = PPI::Document->new( \$code );
55     my $pc_doc  = Perl::Critic::Document->new( $ppi_doc );
56     my $critic  = Perl::Critic->new( -severity => 1 );
57     my @violations = $critic->critique( $pc_doc );
58     confess "No violations were created" if not @violations;
59
60     # One test for each violation, plus one each for Critic and Document.
61     plan( tests => scalar @violations + 2 );
62
63     memory_cycle_ok( $pc_doc );
64     memory_cycle_ok( $critic );
65     memory_cycle_ok($_) for @violations;
66 }
67
68 #-----------------------------------------------------------------------------
69
70 # ensure we run true if this test is loaded by
71 # t/92_memory_leaks.t.without_optional_dependencies.t
72 1;
73
74 ###############################################################################
75 # Local Variables:
76 #   mode: cperl
77 #   cperl-indent-level: 4
78 #   fill-column: 78
79 #   indent-tabs-mode: nil
80 #   c-indentation-style: bsd
81 # End:
82 # ex: set ts=8 sts=4 sw=4 tw=78 ft=perl expandtab shiftround :