Heray-Was-Here
Server : Apache
System : Linux vps103298.mylogin.co 4.18.0-513.11.1.el8_9.x86_64 #1 SMP Wed Jan 17 02:00:40 EST 2024 x86_64
User : calvet ( 273824)
PHP Version : 7.4.33
Disable Function : NONE
Directory :  /usr/share/doc/perl-Moose/t/cmop/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //usr/share/doc/perl-Moose/t/cmop/meta_method.t
use strict;
use warnings;
use Test::More;
use Test::Fatal;
use Class::MOP;

{
    can_ok('Class::MOP::Class', 'meta');
    isa_ok(Class::MOP::Class->meta->find_method_by_name('meta'),
           'Class::MOP::Method::Meta');

    {
        package Baz;
        use metaclass;
    }
    can_ok('Baz', 'meta');
    isa_ok(Baz->meta->find_method_by_name('meta'),
           'Class::MOP::Method::Meta');

    my $meta = Class::MOP::Class->create('Quux');
    can_ok('Quux', 'meta');
    isa_ok(Quux->meta->find_method_by_name('meta'),
           'Class::MOP::Method::Meta');
}

{
    {
        package Blarg;
        use metaclass meta_name => 'blarg';
    }
    ok(!Blarg->can('meta'));
    can_ok('Blarg', 'blarg');
    isa_ok(Blarg->blarg->find_method_by_name('blarg'),
           'Class::MOP::Method::Meta');

    my $meta = Class::MOP::Class->create('Blorg', meta_name => 'blorg');
    ok(!Blorg->can('meta'));
    can_ok('Blorg', 'blorg');
    isa_ok(Blorg->blorg->find_method_by_name('blorg'),
           'Class::MOP::Method::Meta');
}

{
    {
        package Foo;
        use metaclass meta_name => undef;
    }

    my $meta = Class::MOP::class_of('Foo');
    ok(!$meta->has_method('meta'), "no meta method was installed");
    $meta->add_method(meta => sub { die 'META' });
    is( exception { $meta->find_method_by_name('meta') }, undef, "can do meta-level stuff" );
    is( exception { $meta->make_immutable }, undef, "can do meta-level stuff" );
    is( exception { $meta->class_precedence_list }, undef, "can do meta-level stuff" );
}

{
    my $meta = Class::MOP::Class->create('Bar', meta_name => undef);
    ok(!$meta->has_method('meta'), "no meta method was installed");
    $meta->add_method(meta => sub { die 'META' });
    is( exception { $meta->find_method_by_name('meta') }, undef, "can do meta-level stuff" );
    is( exception { $meta->make_immutable }, undef, "can do meta-level stuff" );
    is( exception { $meta->class_precedence_list }, undef, "can do meta-level stuff" );
}

done_testing;

Hry