diff options
Diffstat (limited to 't/exceptions/moose-meta-attribute-native-traits.t')
-rw-r--r-- | t/exceptions/moose-meta-attribute-native-traits.t | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/t/exceptions/moose-meta-attribute-native-traits.t b/t/exceptions/moose-meta-attribute-native-traits.t new file mode 100644 index 0000000..64ba085 --- /dev/null +++ b/t/exceptions/moose-meta-attribute-native-traits.t @@ -0,0 +1,147 @@ +use strict; +use warnings; + +use Test::More; +use Test::Fatal; + +use Moose; + +{ + my $exception = exception { + { + package TestClass; + use Moose; + + has 'foo' => ( + traits => ['Array'], + is => 'ro', + isa => 'Int' + ); + } + }; + + like( + $exception, + qr/The type constraint for foo must be a subtype of ArrayRef but it's a Int/, + "isa is given as Int, but it should be ArrayRef"); + + isa_ok( + $exception, + 'Moose::Exception::WrongTypeConstraintGiven', + "isa is given as Int, but it should be ArrayRef"); + + is( + $exception->required_type, + "ArrayRef", + "isa is given as Int, but it should be ArrayRef"); + + is( + $exception->given_type, + "Int", + "isa is given as Int, but it should be ArrayRef"); + + is( + $exception->attribute_name, + "foo", + "isa is given as Int, but it should be ArrayRef"); +} + +{ + my $exception = exception { + { + package TestClass2; + use Moose; + + has 'foo' => ( + traits => ['Array'], + is => 'ro', + isa => 'ArrayRef', + handles => 'bar' + ); + } + }; + + like( + $exception, + qr/The 'handles' option must be a HASH reference, not bar/, + "'bar' is given as handles"); + + isa_ok( + $exception, + 'Moose::Exception::HandlesMustBeAHashRef', + "'bar' is given as handles"); + + is( + $exception->given_handles, + "bar", + "'bar' is given as handles"); +} + +{ + my $exception = exception { + { + package TraitTest; + use Moose::Role; + with 'Moose::Meta::Attribute::Native::Trait'; + + sub _helper_type { "ArrayRef" } + } + + { + package TestClass3; + use Moose; + + has 'foo' => ( + traits => ['TraitTest'], + is => 'ro', + isa => 'ArrayRef', + handles => { get_count => 'count' } + ); + } + }; + + like( + $exception, + qr/\QCannot calculate native type for Moose::Meta::Class::__ANON__::SERIAL::/, + "cannot calculate native type for the given trait"); + + isa_ok( + $exception, + 'Moose::Exception::CannotCalculateNativeType', + "cannot calculate native type for the given trait"); +} + +{ + my $regex = qr/bar/; + my $exception = exception { + { + package TestClass4; + use Moose; + + has 'foo' => ( + traits => ['Array'], + is => 'ro', + isa => 'ArrayRef', + handles => { get_count => $regex } + ); + } + }; + + like( + $exception, + qr/\QAll values passed to handles must be strings or ARRAY references, not $regex/, + "a Regexp is given to handles"); + #All values passed to handles must be strings or ARRAY references, not (?^:bar) + + isa_ok( + $exception, + 'Moose::Exception::InvalidHandleValue', + "a Regexp is given to handles"); + + is( + $exception->handle_value, + $regex, + "a Regexp is given to handles"); +} + +done_testing; |