#!/usr/bin/perl
use strict;
use warnings;
use Test::More tests => 9;
use Perl6::MetaModel;
=pod
This test file demonstrates the ability to add methods to a class
which are then accessible from an already created instance.
=cut
my $Foo = class 'Foo' => {
'is' => [ $::Object ],
'methods' => {
'foo' => sub { 'FOO' }
}
};
my $foo = $Foo->new();
isa_ok($foo, 'Foo');
isa_ok($foo, 'Object');
can_ok($foo, 'foo');
is($foo->foo(), 'FOO', '... $foo->foo() works');
ok(!$foo->can('bar'), '... $foo cannot bar() yet');
$Foo->add_method('bar' => ::make_method(sub { 'BAR' }));
can_ok($foo, 'bar');
is($foo->bar(), 'BAR', '... $foo->bar() works');
$::Object->add_method('a_method' => ::make_method(sub { 'Perl6::Object::a_method' }));
can_ok($foo, 'a_method');
is($foo->a_method(), 'Perl6::Object::a_method', '... $foo->a_method() works ("a_method" was added to $::Object)');