use strict;
use warnings;
use Test::More 'no_plan';
# *all* this is meant to do is test a class that says:
# use metamethod sub { ... }
use lib 't/lib';
require ClassUMS;
my $parent_class = ClassUMS->new({
name => 'ParentClass',
class_methods => { ping => sub { 'pong' }, pong => sub { 'ping' } },
instance_methods => { plugh => sub { 'fool' }, y2 => sub { 'y2' } },
});
my $child_class = $parent_class->new_subclass({
name => 'ChildClass',
class_methods => { ping => sub { 'reply' }, foo => sub { 'bar' } },
instance_methods => { plugh => sub { 'xyzzy' }, foo => sub { 'fee' } },
});
is(ref $parent_class, 'ClassUMS', 'check ref of ParentClass');
is(ref $child_class, 'ClassUMS', 'check ref of ChildClass');
is($parent_class->name, 'ParentClass', 'name of ParentClass');
is($child_class->name, 'ChildClass', 'name of ChildClass');
is($parent_class->ping, 'pong', 'ping ParentClass');
is($child_class->ping, 'reply', 'ping ChildClass');
is($parent_class->pong, 'ping', 'pong ParentClass');
is($child_class->pong, 'ping', 'pong ChildClass');
eval { $parent_class->foo };
like($@, qr/no class method/, 'no "foo" on ParentClass');
is($child_class->foo, 'bar', 'foo on ChildClass');