tests for DOES
Toby Inkster [Fri, 19 Oct 2012 13:51:47 +0000 (14:51 +0100)]
t/does-Moo.t [new file with mode: 0644]
t/does.t [new file with mode: 0644]

diff --git a/t/does-Moo.t b/t/does-Moo.t
new file mode 100644 (file)
index 0000000..a064384
--- /dev/null
@@ -0,0 +1,61 @@
+use Test::More;
+BEGIN {
+  plan skip_all => 'requires Moo'
+    unless eval { require Moo; require Moo::Role; 1 };
+  plan tests => 14;
+}
+
+BEGIN {
+  package Local::Role1;
+  use Moo::Role;
+}
+
+BEGIN {
+  package Local::Role2;
+  use Moo::Role;
+}
+
+BEGIN {
+  package Local::Class1;
+  use Moo;
+  with qw(
+    Local::Role1
+    Local::Role2
+  );
+}
+
+BEGIN {
+  package Local::Class2;
+  use Moo;
+  with qw( Local::Role1 );
+  with qw( Local::Role2 );
+}
+
+BEGIN {
+  package Local::Class3;
+  use Moo;
+  with qw( Local::Role1 );
+  with qw( Local::Role2 );
+  sub DOES {
+    my ($proto, $role) = @_;
+    return 1 if $role eq 'Local::Role3';
+    return $proto->does($role);
+  }
+}
+
+for my $c (1 .. 3) {
+  my $class = "Local::Class$c";
+  for my $r (1 .. 2) {
+    my $role = "Local::Role$r";
+    ok($class->does($role), "$class\->does($role)");
+    ok($class->DOES($role), "$class\->DOES($role)");
+  }
+}
+
+{
+  my $class = "Local::Class3";
+  my $role = "Local::Role3";
+  ok( ! $class->does($role), "$class\->does($role)");
+  ok(   $class->DOES($role), "$class\->DOES($role)");
+}
+
diff --git a/t/does.t b/t/does.t
new file mode 100644 (file)
index 0000000..c17ebfd
--- /dev/null
+++ b/t/does.t
@@ -0,0 +1,55 @@
+use Test::More tests => 14;
+
+BEGIN {
+  package Local::Role1;
+  use Role::Tiny;
+}
+
+BEGIN {
+  package Local::Role2;
+  use Role::Tiny;
+}
+
+BEGIN {
+  package Local::Class1;
+  use Role::Tiny::With;
+  with qw(
+    Local::Role1
+    Local::Role2
+  );
+}
+
+BEGIN {
+  package Local::Class2;
+  use Role::Tiny::With;
+  with qw( Local::Role1 );
+  with qw( Local::Role2 );
+}
+
+BEGIN {
+  package Local::Class3;
+  use Role::Tiny::With;
+  with qw( Local::Role1 );
+  with qw( Local::Role2 );
+  sub DOES {
+    my ($proto, $role) = @_;
+    return 1 if $role eq 'Local::Role3';
+    return $proto->Role::Tiny::does_role($role);
+  }
+}
+
+for my $c (1 .. 3) {
+  my $class = "Local::Class$c";
+  for my $r (1 .. 2) {
+    my $role = "Local::Role$r";
+    ok($class->does($role), "$class\->does($role)");
+    ok($class->DOES($role), "$class\->DOES($role)");
+  }
+}
+
+{
+  my $class = "Local::Class3";
+  my $role = "Local::Role3";
+  ok( ! $class->does($role), "$class\->does($role)");
+  ok(   $class->DOES($role), "$class\->DOES($role)");
+}