Add another test file
[gitmo/MooseX-Role-Parameterized.git] / t / 003-apply.t
CommitLineData
0d2825cd 1#!/usr/bin/env perl
2use strict;
3use warnings;
4use Test::More tests => 1;
5use Test::Exception;
6
7do {
8 package MyRole::Storage;
9 use MooseX::Role::Parameterized;
10 use Moose::Util::TypeConstraints;
11
12 parameter format => (
13 is => 'ro',
14 isa => (enum ['Dumper', 'Storable']),
15 required => 1,
16 );
17
18 parameter freeze_method => (
19 is => 'ro',
20 isa => 'Str',
21 lazy => 1,
22 default => sub { "freeze_" . shift->format },
23 );
24
25 parameter thaw_method => (
26 is => 'ro',
27 isa => 'Str',
28 lazy => 1,
29 default => sub { "thaw_" . shift->format },
30 );
31
32 role {
33 my $p = shift;
34 my $format = $p->format;
35
36 my ($freezer, $thawer);
37
38 if ($format eq 'Dumper') {
39 require Data::Dumper;
40 $freezer = \&Data::Dumper::Dumper;
41 $thawer = sub { eval "@_" };
42
43 }
44 elsif ($format eq 'Storable') {
45 require Storable;
46 $freezer = \&Storable::nfreeze;
47 $thawer = \&Storable::thaw;
48 }
49 else {
50 die "Unknown format ($format)";
51 }
52
53 method $p->freeze_method => $freezer;
54 method $p->thaw_method => $thawer;
55 };
56};
57
58throws_ok {
59 package MyClass::Error;
60 use Moose;
61 with 'MyRole::Storage';
62} qr/^Attribute \(format\) is required/;
63
64do {
65 package MyClass::Dumper;
66 use Moose;
67 with 'MyRole::Storage' => {
68 format => 'Dumper',
69 };
70};
71