add trait_aliases option to Moose::Exporter
[gitmo/Moose.git] / t / 050_metaclasses / 061_moose_exporter_trait_aliases.t
1 #!/usr/bin/env perl
2 use strict;
3 use warnings;
4 use Test::More;
5 use Test::Moose;
6 use Test::Exception;
7
8 {
9     package Attribute::Trait::Awesome;
10     use Moose::Role;
11 }
12
13 BEGIN {
14     package Awesome::Exporter;
15     use Moose::Exporter;
16
17     Moose::Exporter->setup_import_methods(
18         trait_aliases => ['Attribute::Trait::Awesome'],
19     );
20 }
21
22 {
23     package Awesome;
24     use Moose;
25     BEGIN { Awesome::Exporter->import }
26
27     has foo => (
28         traits => [Awesome],
29         is     => 'ro',
30     );
31     ::does_ok(__PACKAGE__->meta->get_attribute('foo'), 'Attribute::Trait::Awesome');
32
33     no Moose;
34     BEGIN { Awesome::Exporter->unimport }
35
36     my $val = eval "Awesome";
37     ::like($@, qr/Bareword "Awesome" not allowed/, "unimported properly");
38     ::is($val, undef, "unimported properly");
39 }
40
41 BEGIN {
42     package Awesome2::Exporter;
43     use Moose::Exporter;
44
45     Moose::Exporter->setup_import_methods(
46         trait_aliases => [
47             [ 'Attribute::Trait::Awesome' => 'Awesome2' ],
48         ],
49     );
50 }
51
52 {
53     package Awesome2;
54     use Moose;
55     BEGIN { Awesome2::Exporter->import }
56
57     has foo => (
58         traits => [Awesome2],
59         is     => 'ro',
60     );
61     ::does_ok(__PACKAGE__->meta->get_attribute('foo'), 'Attribute::Trait::Awesome');
62
63     BEGIN { Awesome2::Exporter->unimport }
64
65     my $val = eval "Awesome2";
66     ::like($@, qr/Bareword "Awesome2" not allowed/, "unimported properly");
67     ::is($val, undef, "unimported properly");
68 }
69
70 {
71     package Awesome2::Rename;
72     use Moose;
73     BEGIN { Awesome2::Exporter->import(Awesome2 => { -as => 'emosewA' }) }
74
75     has foo => (
76         traits => [emosewA],
77         is     => 'ro',
78     );
79     ::does_ok(__PACKAGE__->meta->get_attribute('foo'), 'Attribute::Trait::Awesome');
80
81     BEGIN { Awesome2::Exporter->unimport }
82
83     { our $TODO; local $TODO = "unimporting renamed subs currently doesn't work";
84     my $val = eval "emosewA";
85     ::like($@, qr/Bareword "emosewA" not allowed/, "unimported properly");
86     ::is($val, undef, "unimported properly");
87     }
88 }
89
90 done_testing;