steals python directors and adapts to perl5
This commit is contained in:
parent
c151a0d69a
commit
0901a3e867
23 changed files with 1741 additions and 5 deletions
83
Examples/test-suite/perl5/director_finalizer_runme.pl
Normal file
83
Examples/test-suite/perl5/director_finalizer_runme.pl
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
use strict;
|
||||
use warnings;
|
||||
use Test::More tests => 13;
|
||||
BEGIN { use_ok('director_finalizer') }
|
||||
require_ok('director_finalizer');
|
||||
|
||||
{
|
||||
package MyFoo;
|
||||
use base 'director_finalizer::Foo';
|
||||
sub DIRECTOR_DESTROY { my($self) = @_;
|
||||
$self->orStatus(2);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
director_finalizer::resetStatus();
|
||||
my $f = MyFoo->new();
|
||||
undef $f;
|
||||
is(director_finalizer::getStatus(), 3, 'shadow release fires destructor');
|
||||
}
|
||||
|
||||
{ # again, this time with DESTROY
|
||||
director_finalizer::resetStatus();
|
||||
my $f = MyFoo->new();
|
||||
$f->DESTROY();
|
||||
is(director_finalizer::getStatus(), 3, 'DESTROY method fires destructor');
|
||||
}
|
||||
|
||||
{
|
||||
director_finalizer::resetStatus();
|
||||
my $f = MyFoo->new();
|
||||
director_finalizer::launder($f);
|
||||
is(director_finalizer::getStatus(), 0, 'wrap release does not fire destructor');
|
||||
undef $f;
|
||||
is(director_finalizer::getStatus(), 3, 'shadow release still fires destructor');
|
||||
}
|
||||
|
||||
{ # again, this time with DESTROY
|
||||
director_finalizer::resetStatus();
|
||||
my $f = MyFoo->new();
|
||||
director_finalizer::launder($f);
|
||||
is(director_finalizer::getStatus(), 0, 'wrap release does not fire destructor');
|
||||
$f->DESTROY();
|
||||
is(director_finalizer::getStatus(), 3, 'DESTROY method still fires destructor');
|
||||
}
|
||||
|
||||
{
|
||||
director_finalizer::resetStatus();
|
||||
my $f = MyFoo->new();
|
||||
$f->DISOWN();
|
||||
is(director_finalizer::getStatus(), 0, 'shadow release does not fire destructor of disowned object');
|
||||
director_finalizer::deleteFoo($f);
|
||||
is(director_finalizer::getStatus(), 3, 'c++ release fires destructors of disowned object');
|
||||
}
|
||||
|
||||
{ # again, this time with DESTROY
|
||||
my $f = MyFoo->new();
|
||||
$f->DISOWN();
|
||||
director_finalizer::deleteFoo($f);
|
||||
director_finalizer::resetStatus();
|
||||
$f->DESTROY();
|
||||
is(director_finalizer::getStatus(), 0, 'DESTROY method does not fire destructor of disowned object');
|
||||
}
|
||||
|
||||
{
|
||||
director_finalizer::resetStatus();
|
||||
my $f = MyFoo->new();
|
||||
$f->DISOWN();
|
||||
my $g = director_finalizer::launder($f);
|
||||
undef $f;
|
||||
director_finalizer::deleteFoo($g);
|
||||
is(director_finalizer::getStatus(), 3, 'c++ release fires destructors on disowned opaque object');
|
||||
}
|
||||
|
||||
{ # again, this time with DESTROY
|
||||
director_finalizer::resetStatus();
|
||||
my $f = MyFoo->new();
|
||||
$f->DISOWN();
|
||||
my $g = director_finalizer::launder($f);
|
||||
$f->DESTROY();
|
||||
director_finalizer::deleteFoo($g);
|
||||
is(director_finalizer::getStatus(), 3, 'c++ release fires destructors on disowned opaque object after DESTROY');
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue