#!perl
use strict;
use warnings;
use Test::More tests => 14;
use Mouse ();
BEGIN{
package MyMouse;
use Mouse;
Mouse::Exporter->setup_import_methods(
as_is => [qw(foo)],
also => [qw(Mouse)],
);
sub foo{ 100 }
$INC{'MyMouse.pm'}++;
package MyMouseEx;
use Mouse;
Mouse::Exporter->setup_import_methods(
as_is => [\&bar],
also => [qw(MyMouse)],
# groups => {
# foobar_only => [qw(foo bar)],
# },
);
sub bar{ 200 }
$INC{'MyMouseEx.pm'}++;
}
can_ok 'MyMouse', qw(import unimport);
can_ok 'MyMouseEx', qw(import unimport);
{
package MyApp;
use Test::More;
use MyMouse;
can_ok __PACKAGE__, 'meta';
ok defined(&foo), 'foo is imported';
ok defined(&has), 'has is also imported';
no MyMouse;
ok !defined(&foo), 'foo is unimported';
ok !defined(&has), 'has is also unimported';
}
{
package MyAppEx;
use Test::More;
use MyMouseEx;
can_ok __PACKAGE__, 'meta';
ok defined(&foo), 'foo is imported';
ok defined(&bar), 'foo is also imported';
ok defined(&has), 'has is also imported';
no MyMouseEx;
ok !defined(&foo), 'foo is unimported';
ok !defined(&bar), 'foo is also unimported';
ok !defined(&has), 'has is also unimported';
}
# exporting groups are not implemented in Moose::Exporter
#{
# package MyAppExTags;
# use Test::More;
# use MyMouseEx qw(:foobar_only);
#
# can_ok __PACKAGE__, 'meta';
# ok defined(&foo);
# ok defined(&bar);
# ok!defined(&has), "export tags";
#}