tests for ordered attribute initialization abandoned/self-ordering-attr-init
Ricardo Signes [Tue, 10 Nov 2009 15:32:46 +0000 (10:32 -0500)]
t/020_attributes/040_init_ordering.t [new file with mode: 0644]

diff --git a/t/020_attributes/040_init_ordering.t b/t/020_attributes/040_init_ordering.t
new file mode 100644 (file)
index 0000000..6d75471
--- /dev/null
@@ -0,0 +1,53 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More 'no_plan';
+use Test::Exception;
+
+{
+  package DepAttr;
+  use Moose;
+
+  has x => (
+    is  => 'ro',
+    isa => 'Int',
+    required => 1,
+    default  => sub { 2 * $_[0]->y },
+  );
+
+  has y => (
+    is  => 'ro',
+    isa => 'Int',
+    required => 1,
+    default  => sub { 3 * $_[0]->z },
+  );
+
+  has z => (
+    is  => 'ro',
+    isa => 'Int',
+    required => 1,
+    default  => sub { 4 * $_[0]->x },
+  );
+}
+
+dies_ok {
+    my $obj = DepAttr->new;
+} 'we cannot create an object with attribute dependency loops';
+
+{
+  my $obj = DepAttr->new({ z => 1 });;
+  isa_ok($obj, 'DepAttr', 'result of ->new({z=>1})');
+  is($obj->z, 1, ' ... z = 1');
+  is($obj->y, 3, ' ... y = 3');
+  is($obj->x, 6, ' ... x = 6');
+}
+
+{
+  my $obj = DepAttr->new({ x => 1 });;
+  isa_ok($obj, 'DepAttr', 'result of ->new({x=>1})');
+  is($obj->x,  1, ' ... x = 1');
+  is($obj->y, 12, ' ... y = 12');
+  is($obj->z,  4, ' ... z = 4');
+}