rt63818 bugfix for false 'also' circular ref error
[gitmo/Moose.git] / t / bugs / moose_exporter_false_circular_reference_rt_63818.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More;
7 use Test::Fatal;
8
9 # OKSet1
10 {
11
12     package TESTING::MooseExporter::Rt63818::OKSet1::ModuleA;
13     use Moose ();
14     Moose::Exporter->setup_import_methods(
15         also => [
16             'Moose',
17         ]
18     );
19 }
20
21 # OKSet2
22 {
23
24     package TESTING::MooseExporter::Rt63818::OKSet2::ModuleA;
25     use Moose ();
26     Moose::Exporter->setup_import_methods(
27         also => [
28             'Moose',
29         ]
30     );
31
32     package TESTING::MooseExporter::Rt63818::OKSet2::ModuleB;
33     use Moose ();
34     Moose::Exporter->setup_import_methods(
35         also => [
36             'Moose',
37         ]
38     );
39 }
40
41 # OKSet3
42 {
43
44     package TESTING::MooseExporter::Rt63818::OKSet3::ModuleA;
45     use Moose ();
46     Moose::Exporter->setup_import_methods(
47         also => [
48             'Moose',
49         ]
50     );
51
52     package TESTING::MooseExporter::Rt63818::OKSet3::ModuleB;
53     use Moose ();
54     Moose::Exporter->setup_import_methods(
55         also => [
56             'Moose',
57             'TESTING::MooseExporter::Rt63818::OKSet3::ModuleA',
58         ]
59     );
60 }
61
62 # OKSet4
63 {
64
65     package TESTING::MooseExporter::Rt63818::OKSet4::ModuleA;
66     use Moose ();
67     Moose::Exporter->setup_import_methods(
68         also => [
69             'Moose',
70         ]
71     );
72
73     package TESTING::MooseExporter::Rt63818::OKSet4::ModuleB;
74     use Moose ();
75     Moose::Exporter->setup_import_methods(
76         also => [
77             'Moose',
78             'TESTING::MooseExporter::Rt63818::OKSet4::ModuleA',
79         ]
80     );
81
82     package TESTING::MooseExporter::Rt63818::OKSet4::ModuleC;
83     use Moose ();
84     Moose::Exporter->setup_import_methods(
85         also => [
86             'Moose',
87             'TESTING::MooseExporter::Rt63818::OKSet4::ModuleA',
88             'TESTING::MooseExporter::Rt63818::OKSet4::ModuleB',
89         ]
90     );
91 }
92
93 # OKSet5
94 {
95
96     package TESTING::MooseExporter::Rt63818::OKSet5::ModuleA;
97     use Moose ();
98     Moose::Exporter->setup_import_methods(
99         also => [
100             'Moose',
101         ]
102     );
103
104     package TESTING::MooseExporter::Rt63818::OKSet5::ModuleB;
105     use Moose ();
106     Moose::Exporter->setup_import_methods(
107         also => [
108             'Moose',
109             'TESTING::MooseExporter::Rt63818::OKSet5::ModuleA',
110         ]
111     );
112
113     package TESTING::MooseExporter::Rt63818::OKSet5::ModuleC;
114     use Moose ();
115     Moose::Exporter->setup_import_methods(
116         also => [
117             'Moose',
118             'TESTING::MooseExporter::Rt63818::OKSet5::ModuleA',
119             'TESTING::MooseExporter::Rt63818::OKSet5::ModuleB',
120         ]
121     );
122
123     package TESTING::MooseExporter::Rt63818::OKSet5::ModuleD;
124     use Moose ();
125     Moose::Exporter->setup_import_methods(
126         also => [
127             'Moose',
128             'TESTING::MooseExporter::Rt63818::OKSet5::ModuleA',
129             'TESTING::MooseExporter::Rt63818::OKSet5::ModuleC',
130         ]
131     );
132 }
133
134 # NotOKSet1
135 {
136
137     package TESTING::MooseExporter::Rt63818::NotOKSet1::ModuleA;
138     use Moose ();
139     ::like(
140         ::exception { Moose::Exporter->setup_import_methods(
141                 also => [
142                     'Moose',
143                     'TESTING::MooseExporter::Rt63818::NotOKSet1::ModuleA',
144                 ]
145             )
146             },
147         qr/\QCircular reference in 'also' parameter to Moose::Exporter between TESTING::MooseExporter::Rt63818::NotOKSet1::ModuleA and TESTING::MooseExporter::Rt63818::NotOKSet1::ModuleA/,
148         'a single-hop circular reference in also dies with an error'
149     );
150 }
151
152 # Alas, I've not figured out how to craft a test which shows that we get the
153 # same error for multi-hop circularity... instead I get tests that die because
154 # one of the circularly-referenced things was not loaded.
155
156 done_testing;