The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More tests => 11;

#----------------------------------------------------------------------
package Foo::Object;

use base 'Clustericious::Client::Object';

sub m { 'return from m' };

#----------------------------------------------------------------------
package Foo::OtherObject;

use base 'Clustericious::Client::Object';

our %classes =
(
    a => 'Foo::Object'
);

sub n { 'return from n' };

#----------------------------------------------------------------------
package main;

use_ok('Clustericious::Client::Object');

my $obj = new_ok('Foo::Object', [ { some => 'stuff' } ]);

is($obj->some, 'stuff', 'access stuff');
is($obj->m, 'return from m', 'call derived class method');

#----------------------------------------------------------------------

$obj = new_ok('Foo::OtherObject', 
              [ { a => { some => 'stuff' },
                  b => { this => 'that' } } ]);

isa_ok($obj, 'Foo::OtherObject');
isa_ok($obj->{a}, 'Foo::Object');
isa_ok($obj->a, 'Foo::Object');

is($obj->n, 'return from n', 'call derived class method');
is($obj->a->m, 'return from m', 'call nested derived class method');
is($obj->b->this, 'that', 'nested object accessor');