6 use Test::More no_plan => 1; #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";
155 BEGIN { constant->import($_ => __PACKAGE__ . "::$_") for qw(foo zot) };
156 } "resolved with method";
158 # fix these later ...
160 local $TODO = "TODO: add support for attribute methods fufilling reqs";
166 has foo => ( default => __PACKAGE__ . "::foo", is => "rw" );
169 BEGIN { constant->import($_ => __PACKAGE__ . "::$_") for qw(zot) };
172 } "resolved with attr";
174 can_ok( Class::D->new, qw(foo bar xxy zot) );
175 is( eval { Class::D->new->bar }, "Role::H::bar", "bar" );
176 is( eval { Class::D->new->xxy }, "Role::I::xxy", "xxy" );
179 is( eval { Class::D->new->foo }, "Class::D::foo", "foo" );
180 is( eval { Class::D->new->zot }, "Class::D::zot", "zot" );
182 can_ok( Class::E->new, qw(foo bar xxy zot) );
184 is( eval { Class::E->new->foo }, "Class::E::foo", "foo" );
185 is( eval { Class::E->new->zot }, "Class::E::zot", "zot" );
186 is( eval { Class::E->new->bar }, "Role::H::bar", "bar" );
187 is( eval { Class::E->new->xxy }, "Role::J::xxy", "xxy" );