| 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; |
| } |