#!/usr/bin/perl -w
use strict;
use Test::More qw/no_plan/;
BEGIN { use_ok( 'Class::Inner' ); }
package Parent;
sub new { my $class = shift; bless [@_], $class }
sub a { 'A' };
sub b { 'B' };
sub poly { $_[0]->b }
package main;
ok(my $p = Parent->new, "Parent can instantiate");
ok($p->isa('Parent'), '$p is a Parent');
is($p->a(), 'A', '$p->a is A');
is($p->b(), 'B', '$p->b is B');
is($p->poly(), 'B', '$p->poly is B');
my $ic = Class::Inner->new(
parent => 'Parent',
methods => { b => sub {
my $self = shift;
lc($self->SUPER);
},
c => sub { 'C' } },
args => [qw/a b c/]
);
ok(ref($ic) && $ic->isa('Parent'),
'$ic is a Parent');
my $ic_class = ref($ic); # Remember this for later...
ok(eq_array($ic, [qw/a b c/]), 'constructor test');
is($ic->a(), 'A', '$ic->a is A');
is($ic->b(), 'b', '$ic->b is b');
is($ic->c(), 'C', '$ic->c is C');
is($ic->poly(), 'b', '$ic->poly is b');
# Check that destruction works.
$ic = undef;
ok(!$ic_class->isa('Parent'), 'Class dismissed');
syntax highlighted by Code2HTML, v. 0.9.1