Fix triggers to pass old value along with new.
[gitmo/MooseX-ClassAttribute.git] / t / lib / SharedTests.pm
index 1299263..b2f542b 100644 (file)
@@ -87,6 +87,11 @@ use Test::More;
           builder => '_BuildIt',
         );
 
+    class_has 'Triggerish' =>
+        ( is      => 'rw',
+          trigger => sub { shift->_CallTrigger(@_) },
+        );
+
     has 'size' =>
         ( is      => 'rw',
           isa     => 'Int',
@@ -104,6 +109,12 @@ use Test::More;
 
     sub _BuildIt { 42 }
 
+    our @Triggered;
+    sub _CallTrigger
+    {
+        push @Triggered, [@_];
+    }
+
     sub make_immutable
     {
         my $class = shift;
@@ -152,7 +163,7 @@ use Test::More;
 
 sub run_tests
 {
-    plan tests => 26;
+    plan tests => 30;
 
     local $Test::Builder::Level = $Test::Builder::Level + 1;
 
@@ -264,6 +275,21 @@ sub run_tests
         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' );
+    }
 }