support has '+foo'
[gitmo/Moo.git] / t / has-plus.t
diff --git a/t/has-plus.t b/t/has-plus.t
new file mode 100644 (file)
index 0000000..79e8db8
--- /dev/null
@@ -0,0 +1,63 @@
+use strictures 1;
+use Test::More;
+use Test::Fatal;
+
+{
+  package RollyRole;
+
+  use Moo::Role;
+
+  has f => (is => 'ro', default => sub { 0 });
+}
+
+{
+  package ClassyClass;
+
+  use Moo;
+
+  has f => (is => 'ro', default => sub { 1 });
+}
+
+{
+  package UsesTheRole;
+
+  use Moo;
+
+  with 'RollyRole';
+}
+
+{
+  package UsesTheRole2;
+
+  use Moo;
+
+  with 'RollyRole';
+
+  has '+f' => (default => sub { 2 });
+}
+
+{
+
+  package ExtendsTheClass;
+
+  use Moo;
+
+  extends 'ClassyClass';
+
+  has '+f' => (default => sub { 3 });
+}
+
+{
+  package BlowsUp;
+
+  use Moo;
+
+  ::like(::exception { has '+f' => () }, qr/\Qhas '+f'/, 'Kaboom');
+}
+
+is(UsesTheRole->new->f, 0, 'role attr');
+is(ClassyClass->new->f, 1, 'class attr');
+is(UsesTheRole2->new->f, 2, 'role attr with +');
+is(ExtendsTheClass->new->f, 3, 'class attr with +');
+
+done_testing;