The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More;

{
    # so we don't pick up stuff from Moose::Object
    package Base;
    sub foo { } # touch it so that 'extends' doesn't try to load it
}

{
    package Foo;
    use Moose;
    extends 'Base';
    no Moose;
}
can_ok('Foo', 'meta');
is(Foo->meta, Class::MOP::class_of('Foo'));
isa_ok(Foo->meta->get_method('meta'), 'Moose::Meta::Method::Meta');

{
    package Bar;
    use Moose -meta_name => 'bar_meta';
    extends 'Base';
    no Moose;
}
ok(!Bar->can('meta'));
can_ok('Bar', 'bar_meta');
is(Bar->bar_meta, Class::MOP::class_of('Bar'));
isa_ok(Bar->bar_meta->get_method('bar_meta'), 'Moose::Meta::Method::Meta');

{
    package Baz;
    use Moose -meta_name => undef;
    extends 'Base';
    no Moose;
}
ok(!Baz->can('meta'));

my $universal_method_count = scalar Class::MOP::class_of('UNIVERSAL')->get_all_methods;
# 1 because of the dummy method we installed in Base
is( ( scalar Class::MOP::class_of('Baz')->get_all_methods )
    - $universal_method_count, 1 );

done_testing;