57 lines
1.4 KiB
Perl
57 lines
1.4 KiB
Perl
use strict;
|
|
use warnings;
|
|
use Test::More tests => 12;
|
|
BEGIN { use_ok 'director_basic' }
|
|
require_ok 'director_basic';
|
|
|
|
{
|
|
package MyFoo;
|
|
use base 'director_basic::Foo';
|
|
sub ping {
|
|
return 'MyFoo::ping()';
|
|
}
|
|
}
|
|
|
|
{
|
|
package MyOverriddenClass;
|
|
use base 'director_basic::MyClass';
|
|
use fields qw(expectNull nonNullReceived);
|
|
sub new {
|
|
my $self = shift->SUPER::new(@_);
|
|
$self->{expectNull} = undef;
|
|
$self->{nonNullReceived} = undef;
|
|
return $self;
|
|
}
|
|
sub pmethod { my($self, $b) = @_;
|
|
die "null not received as expected"
|
|
if $self->{expectNull} and defined $b;
|
|
return $b;
|
|
}
|
|
}
|
|
|
|
{
|
|
my $a = MyFoo->new();
|
|
isa_ok $a, 'MyFoo';
|
|
is $a->ping(), 'MyFoo::ping()', 'a.ping()';
|
|
is $a->pong(), 'Foo::pong();MyFoo::ping()', 'a.pong()';
|
|
|
|
my $b = director_basic::Foo->new();
|
|
isa_ok $b, 'director_basic::Foo';
|
|
is $b->ping(), 'Foo::ping()', 'b.ping()';
|
|
is $b->pong(), 'Foo::pong();Foo::ping()', 'b.pong()';
|
|
|
|
my $a1 = director_basic::A1->new(1, undef);
|
|
isa_ok $a1, 'director_basic::A1';
|
|
is $a1->rg(2), 2, 'A1.rg';
|
|
|
|
my $my = MyOverriddenClass->new();
|
|
$my->{expectNull} = 1;
|
|
is(director_basic::MyClass::call_pmethod($my, undef), undef,
|
|
'null pointer marshalling');
|
|
|
|
my $myBar = director_basic::Bar->new();
|
|
$my->{expectNull} = undef;
|
|
my $myNewBar = director_basic::MyClass::call_pmethod($my, $myBar);
|
|
isnt($myNewBar, undef, 'non-null pointer marshalling');
|
|
$myNewBar->{x} = 10;
|
|
}
|