#!/usr/bin/env perl
use strict;
use warnings;
-use Test::More tests => 16;
+use Test::More tests => 21;
use Test::Exception;
my @trigger;
is_deeply([splice @trigger], [[$object2, 100, $object2->meta->get_attribute('attr')]], "correct arguments to trigger in the constructor");
do {
- package Class2;
+ package Parent;
use Mouse;
has attr => (
is => 'rw',
- default => 10,
trigger => {
before => sub {
push @trigger, ['before', @_];
},
around => sub {
my $code = shift;
- push @trigger, ['around-before', @_];
- $code->();
- push @trigger, ['around-after', @_];
+ my ($self, $value, $attr) = @_;
+
+ push @trigger, ['around-before', $self, $value, $attr];
+ $code->($self, 4 * $value, $attr);
+ push @trigger, ['around-after', $self, $value, $attr];
},
},
);
+
+ package Child;
+ use Mouse;
+ extends 'Parent';
+
+ has '+attr' => (
+ default => 10,
+ );
};
-my $o2 = Class2->new;
+my $child = Child->new;
is(@trigger, 0, "trigger not called on constructor with default");
-is($o2->attr, 10, "reader");
+is($child->attr, 10, "reader");
+is(@trigger, 0, "trigger not called on reader");
+
+is($child->attr(5), 20, "writer");
+is_deeply([splice @trigger], [
+ ['before', $child, 5, Child->meta->get_attribute('attr')],
+ ['around-before', $child, 5, Child->meta->get_attribute('attr')],
+ ['around-after', $child, 5, Child->meta->get_attribute('attr')],
+ ['after', $child, 20, Child->meta->get_attribute('attr')],
+]);
+
+my $parent = Parent->new(attr => 2);
+is_deeply([splice @trigger], [
+ ['before', $parent, 2, Parent->meta->get_attribute('attr')],
+ ['around-before', $parent, 2, Parent->meta->get_attribute('attr')],
+ ['around-after', $parent, 2, Parent->meta->get_attribute('attr')],
+ ['after', $parent, 8, Parent->meta->get_attribute('attr')],
+]);
+
+is($parent->attr, 8, "reader");
is(@trigger, 0, "trigger not called on reader");
-is($o2->attr(5), 5, "writer");
+is($parent->attr(10), 40, "writer");
is_deeply([splice @trigger], [
- ['before', $o2, 5, $o2->meta->get_attribute('attr')],
- ['after', $o2, 5, $o2->meta->get_attribute('attr')],
+ ['before', $parent, 10, Parent->meta->get_attribute('attr')],
+ ['around-before', $parent, 10, Parent->meta->get_attribute('attr')],
+ ['around-after', $parent, 10, Parent->meta->get_attribute('attr')],
+ ['after', $parent, 40, Parent->meta->get_attribute('attr')],
]);