Fix leak of $sth during populate() on perls < 5.10
[dbsrgits/DBIx-Class.git] / t / 52cycle.t
1 use strict;
2 use warnings;
3 use Test::More;
4
5 use lib qw(t/lib);
6
7 BEGIN {
8   require DBIx::Class;
9   plan skip_all => 'Test needs: ' . DBIx::Class::Optional::Dependencies->req_missing_for ('test_cycle')
10     unless ( DBIx::Class::Optional::Dependencies->req_ok_for ('test_cycle') );
11 }
12
13 use DBICTest;
14 use DBICTest::Schema;
15 use Scalar::Util 'weaken';
16 use namespace::clean;
17
18 import Test::Memory::Cycle;
19
20 my $weak;
21
22 {
23   my $s = $weak->{schema} = DBICTest->init_schema;
24   ok ($s->storage->connected, 'we are connected');
25   memory_cycle_ok($s, 'No cycles in schema');
26
27   my $storage = $weak->{storage} = $s->storage;
28   memory_cycle_ok($storage, 'No cycles in storage');
29
30   my $rs = $weak->{resultset} = $s->resultset ('Artist');
31   memory_cycle_ok($rs, 'No cycles in resultset');
32
33   my $rsrc = $weak->{resultsource} = $rs->result_source;
34   memory_cycle_ok($rsrc, 'No cycles in resultsource');
35
36   my $row = $weak->{row} = $rs->first;
37   memory_cycle_ok($row, 'No cycles in row');
38
39   my $sqla = $weak->{sqla} = $s->storage->sql_maker;
40   memory_cycle_ok($sqla, 'No cycles in SQL maker');
41
42   my $dbh = $weak->{dbh} = $s->storage->_get_dbh;
43   memory_cycle_ok($dbh, 'No cycles in DBI handle');
44
45   for (@{$dbh->{ChildHandles}}) {
46     $weak->{"$_"} = $_ if $_;
47   }
48
49   weaken $_ for values %$weak;
50   memory_cycle_ok($weak, 'No cycles in weak object collection');
51 }
52
53 for (keys %$weak) {
54   ok (! $weak->{$_}, "No $_ leaks");
55 }
56
57 done_testing;