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