one more memory leak
[gitmo/Package-Stash-XS.git] / t / 20-leaks.t
index 4e48bd3..caebd4f 100644 (file)
@@ -48,24 +48,23 @@ use Symbol;
 
 {
     my $foo = Package::Stash->new('Foo');
-    leaks_cmp_ok {
+    no_leaks_ok {
         $foo->add_package_symbol('$scalar');
         $foo->add_package_symbol('@array');
         $foo->add_package_symbol('%hash');
         $foo->add_package_symbol('io');
-    } '==', 4, "add_package_symbol doesn't leak";
+    } "add_package_symbol doesn't leak";
 }
 
 {
     my $foo = Package::Stash->new('Foo');
-    leaks_cmp_ok {
+    no_leaks_ok {
         $foo->add_package_symbol('$scalar_init' => 1);
         $foo->add_package_symbol('@array_init' => []);
         $foo->add_package_symbol('%hash_init' => {});
-        # hmmm, wonder why this coderef isn't treated as a leak
         $foo->add_package_symbol('&code_init' => sub { "foo" });
         $foo->add_package_symbol('io_init' => Symbol::geniosym);
-    } '==', 9, "add_package_symbol doesn't leak";
+    } "add_package_symbol doesn't leak";
     is(exception {
         is(Foo->code_init, 'foo', "sub installed correctly")
     }, undef, "code_init exists");
@@ -142,4 +141,16 @@ use Symbol;
     } "list_all_package_symbols doesn't leak";
 }
 
+# mimic CMOP::create_anon_class
+{
+    my $i = 0;
+    no_leaks_ok {
+        $i++;
+        eval "package Quux$i; 1;";
+        my $quux = Package::Stash->new("Quux$i");
+        $quux->get_or_add_package_symbol('@ISA');
+        delete $::{'Quux' . $i . '::'};
+    } "get_package_symbol doesn't leak during glob expansion";
+}
+
 done_testing;