summaryrefslogtreecommitdiff
path: root/t/attributes/trigger_and_coerce.t
diff options
context:
space:
mode:
Diffstat (limited to 't/attributes/trigger_and_coerce.t')
-rw-r--r--t/attributes/trigger_and_coerce.t53
1 files changed, 53 insertions, 0 deletions
diff --git a/t/attributes/trigger_and_coerce.t b/t/attributes/trigger_and_coerce.t
new file mode 100644
index 0000000..d28b7ce
--- /dev/null
+++ b/t/attributes/trigger_and_coerce.t
@@ -0,0 +1,53 @@
+use strict;
+use warnings;
+
+use Test::More;
+
+
+{
+
+ package Fake::DateTime;
+ use Moose;
+
+ has 'string_repr' => ( is => 'ro' );
+
+ package Mortgage;
+ use Moose;
+ use Moose::Util::TypeConstraints;
+
+ coerce 'Fake::DateTime' => from 'Str' =>
+ via { Fake::DateTime->new( string_repr => $_ ) };
+
+ has 'closing_date' => (
+ is => 'rw',
+ isa => 'Fake::DateTime',
+ coerce => 1,
+ trigger => sub {
+ my ( $self, $val ) = @_;
+ ::pass('... trigger is being called');
+ ::isa_ok( $self->closing_date, 'Fake::DateTime' );
+ ::isa_ok( $val, 'Fake::DateTime' );
+ }
+ );
+}
+
+{
+ my $mtg = Mortgage->new( closing_date => 'yesterday' );
+ isa_ok( $mtg, 'Mortgage' );
+
+ # check that coercion worked
+ isa_ok( $mtg->closing_date, 'Fake::DateTime' );
+}
+
+Mortgage->meta->make_immutable;
+ok( Mortgage->meta->is_immutable, '... Mortgage is now immutable' );
+
+{
+ my $mtg = Mortgage->new( closing_date => 'yesterday' );
+ isa_ok( $mtg, 'Mortgage' );
+
+ # check that coercion worked
+ isa_ok( $mtg->closing_date, 'Fake::DateTime' );
+}
+
+done_testing;