6 use Test::More skip_all => "provisional test";
14 # no conflicts, this doesn't actually test the new behavior, it's just an example
21 BEGIN { constant->import($_ => __PACKAGE__ . "::$_") for qw(bar) };
29 BEGIN { constant->import($_ => __PACKAGE__ . "::$_") for qw(xxy) };
36 with qw(Role::A Role::B); # conflict between 'foo's here
39 BEGIN { constant->import($_ => __PACKAGE__ . "::$_") for qw(foo zot) };
49 BEGIN { constant->import($_ => __PACKAGE__ . "::$_") for qw(zot) };
52 can_ok( Class::A->new, qw(foo bar xxy zot) );
54 is( eval { Class::A->new->foo }, "Role::C::foo", "foo" );
55 is( eval { Class::A->new->zot }, "Class::A::zot", "zot" );
56 is( eval { Class::A->new->bar }, "Role::A::bar", "bar" );
57 is( eval { Class::A->new->xxy }, "Role::B::xxy", "xxy" );
62 # conflict resolved by role, same result as prev
69 BEGIN { constant->import($_ => __PACKAGE__ . "::$_") for qw(foo bar) };
70 } "define role Role::D";
77 BEGIN { constant->import($_ => __PACKAGE__ . "::$_") for qw(foo xxy) };
78 } "define role Role::E";
84 with qw(Role::D Role::E); # conflict between 'foo's here
87 BEGIN { constant->import($_ => __PACKAGE__ . "::$_") for qw(foo zot) };
88 } "define role Role::F";
97 BEGIN { constant->import($_ => __PACKAGE__ . "::$_") for qw(zot) };
98 } "define class Class::B";
100 can_ok( Class::B->new, qw(foo bar xxy zot) );
102 is( eval { Class::B->new->foo }, "Role::F::foo", "foo" );
103 is( eval { Class::B->new->zot }, "Class::B::zot", "zot" );
104 is( eval { Class::B->new->bar }, "Role::D::bar", "bar" );
105 is( eval { Class::B->new->xxy }, "Role::E::xxy", "xxy" );
110 # conflict propagation
117 BEGIN { constant->import($_ => __PACKAGE__ . "::$_") for qw(foo bar) };
118 } "define role Role::H";
125 BEGIN { constant->import($_ => __PACKAGE__ . "::$_") for qw(foo xxy) };
126 } "define role Role::J";
132 with qw(Role::J Role::H); # conflict between 'foo's here
135 BEGIN { constant->import($_ => __PACKAGE__ . "::$_") for qw(zot) };
136 } "define role Role::I";
145 BEGIN { constant->import($_ => __PACKAGE__ . "::$_") for qw(zot) };
146 } qr/requires.*'foo'/, "defining class Class::C fails";
152 has foo => ( default => __PACKAGE__ . "::foo", is => "rw" );
155 BEGIN { constant->import($_ => __PACKAGE__ . "::$_") for qw(zot) };
158 } "resolved with attr";
167 BEGIN { constant->import($_ => __PACKAGE__ . "::$_") for qw(foo zot) };
168 } "resolved with method";
170 can_ok( Class::D->new, qw(foo bar xxy zot) );
172 is( eval { Class::D->new->foo }, "Class::D::foo", "foo" );
173 is( eval { Class::D->new->zot }, "Class::D::zot", "zot" );
174 is( eval { Class::D->new->bar }, "Role::H::bar", "bar" );
175 is( eval { Class::D->new->xxy }, "Role::I::xxy", "xxy" );
177 can_ok( Class::E->new, qw(foo bar xxy zot) );
179 is( eval { Class::E->new->foo }, "Class::E::foo", "foo" );
180 is( eval { Class::E->new->zot }, "Class::E::zot", "zot" );
181 is( eval { Class::E->new->bar }, "Role::H::bar", "bar" );
182 is( eval { Class::E->new->xxy }, "Role::J::xxy", "xxy" );