Fix triggers to pass old value along with new.
[gitmo/MooseX-ClassAttribute.git] / t / lib / SharedTests.pm
index 970bc94..b2f542b 100644 (file)
@@ -76,6 +76,22 @@ use Test::More;
           },
         );
 
+    class_has 'Built' =>
+        ( is      => 'ro',
+          builder => '_BuildIt',
+        );
+
+    class_has 'LazyBuilt' =>
+        ( is      => 'ro',
+          lazy    => 1,
+          builder => '_BuildIt',
+        );
+
+    class_has 'Triggerish' =>
+        ( is      => 'rw',
+          trigger => sub { shift->_CallTrigger(@_) },
+        );
+
     has 'size' =>
         ( is      => 'rw',
           isa     => 'Int',
@@ -91,6 +107,14 @@ use Test::More;
         $self->ObjectCount( $self->ObjectCount() + 1 );
     }
 
+    sub _BuildIt { 42 }
+
+    our @Triggered;
+    sub _CallTrigger
+    {
+        push @Triggered, [@_];
+    }
+
     sub make_immutable
     {
         my $class = shift;
@@ -139,7 +163,7 @@ use Test::More;
 
 sub run_tests
 {
-    plan tests => 24;
+    plan tests => 30;
 
     local $Test::Builder::Level = $Test::Builder::Level + 1;
 
@@ -243,6 +267,29 @@ sub run_tests
         is( HasClassAttribute->GetMapping('a'), 20,
             'value for a in mapping is 20' );
     }
+
+    {
+        is( HasClassAttribute->Built(), 42,
+            'attribute with builder works' );
+
+        is( HasClassAttribute->LazyBuilt(), 42,
+            'attribute with lazy builder works' );
+    }
+
+    {
+        HasClassAttribute->Triggerish(42);
+        is( scalar @HasClassAttribute::Triggered, 1, 'trigger was called' );
+        is( HasClassAttribute->Triggerish(), 42, 'Triggerish is now 42' );
+
+        HasClassAttribute->Triggerish(84);
+        is( HasClassAttribute->Triggerish(), 84, 'Triggerish is now 84' );
+
+        is_deeply( \@HasClassAttribute::Triggered,
+                   [ [ qw( HasClassAttribute 42 ) ],
+                     [ qw( HasClassAttribute 84 42 ) ],
+                   ],
+                   'trigger passes old value correctly' );
+    }
 }