|
Packit |
69e8b9 |
use lib 't', 'lib';
|
|
Packit |
69e8b9 |
use Spiffy ();
|
|
Packit |
69e8b9 |
package A;
|
|
Packit |
69e8b9 |
sub _role_a { qw(a1 a2 a3) }
|
|
Packit |
69e8b9 |
sub a1 {'a1' }
|
|
Packit |
69e8b9 |
sub a2 {'a2' }
|
|
Packit |
69e8b9 |
sub a3 {'a3' }
|
|
Packit |
69e8b9 |
sub _role_A { qw(A1 A2 A3) }
|
|
Packit |
69e8b9 |
sub A1 {'A1' }
|
|
Packit |
69e8b9 |
sub A2 {'A2' }
|
|
Packit |
69e8b9 |
sub A3 {'A3' }
|
|
Packit |
69e8b9 |
sub _role_aA { qw(:a :A foo) }
|
|
Packit |
69e8b9 |
sub foo {'foo'}
|
|
Packit |
69e8b9 |
|
|
Packit |
69e8b9 |
package BB;
|
|
Packit |
69e8b9 |
use base 'A';
|
|
Packit |
69e8b9 |
|
|
Packit |
69e8b9 |
package X;
|
|
Packit |
69e8b9 |
use mixin A => qw(:a !a2);
|
|
Packit |
69e8b9 |
|
|
Packit |
69e8b9 |
package X2;
|
|
Packit |
69e8b9 |
use mixin BB => qw(:a !a2);
|
|
Packit |
69e8b9 |
|
|
Packit |
69e8b9 |
package X3;
|
|
Packit |
69e8b9 |
use mixin A => qw(!:A A2);
|
|
Packit |
69e8b9 |
|
|
Packit |
69e8b9 |
package X4;
|
|
Packit |
69e8b9 |
use mixin A => qw(:aA !a1 !a1 !A1);
|
|
Packit |
69e8b9 |
|
|
Packit |
69e8b9 |
package X5;
|
|
Packit |
69e8b9 |
use mixin A => qw(!:a !:A);
|
|
Packit |
69e8b9 |
|
|
Packit |
69e8b9 |
package main;
|
|
Packit |
69e8b9 |
use Test::More tests => 32;
|
|
Packit |
69e8b9 |
|
|
Packit |
69e8b9 |
ok(X->can('a1'));
|
|
Packit |
69e8b9 |
ok(not X->can('a2'));
|
|
Packit |
69e8b9 |
ok(X->can('a3'));
|
|
Packit |
69e8b9 |
ok(not X->can('A1'));
|
|
Packit |
69e8b9 |
is(X->a1, 'a1');
|
|
Packit |
69e8b9 |
is(X->a3, 'a3');
|
|
Packit |
69e8b9 |
|
|
Packit |
69e8b9 |
ok(X2->can('a1'));
|
|
Packit |
69e8b9 |
ok(not X2->can('a2'));
|
|
Packit |
69e8b9 |
ok(X2->can('a3'));
|
|
Packit |
69e8b9 |
ok(not X2->can('A1'));
|
|
Packit |
69e8b9 |
is(X2->a1, 'a1');
|
|
Packit |
69e8b9 |
is(X2->a3, 'a3');
|
|
Packit |
69e8b9 |
|
|
Packit |
69e8b9 |
ok(X3->can('a1'));
|
|
Packit |
69e8b9 |
ok(X3->can('a2'));
|
|
Packit |
69e8b9 |
ok(X3->can('a3'));
|
|
Packit |
69e8b9 |
ok(not X3->can('A1'));
|
|
Packit |
69e8b9 |
ok(X3->can('A2'));
|
|
Packit |
69e8b9 |
ok(not X3->can('A3'));
|
|
Packit |
69e8b9 |
|
|
Packit |
69e8b9 |
ok(not X4->can('a1'));
|
|
Packit |
69e8b9 |
ok(X4->can('a2'));
|
|
Packit |
69e8b9 |
ok(X4->can('a3'));
|
|
Packit |
69e8b9 |
ok(not X4->can('A1'));
|
|
Packit |
69e8b9 |
ok(X4->can('A2'));
|
|
Packit |
69e8b9 |
ok(X4->can('A3'));
|
|
Packit |
69e8b9 |
ok(X4->can('foo'));
|
|
Packit |
69e8b9 |
|
|
Packit |
69e8b9 |
ok(not X5->can('a1'));
|
|
Packit |
69e8b9 |
ok(not X5->can('a2'));
|
|
Packit |
69e8b9 |
ok(not X5->can('a3'));
|
|
Packit |
69e8b9 |
ok(not X5->can('A1'));
|
|
Packit |
69e8b9 |
ok(not X5->can('A2'));
|
|
Packit |
69e8b9 |
ok(not X5->can('A3'));
|
|
Packit |
69e8b9 |
ok(X5->can('foo'));
|