package ContractEnsuresTest; use strict; use warnings; use base 'TestBase'; use Test::More; use Test::Fatal; use Attribute::Contract::Modifier::Ensures; sub no_params_is_useless : Test { my $self = shift; like( exception { $self->_build_code_ref() }, qr/\QReturn type(s) are required\E/ ); } sub throw_on_error : Test { my $self = shift; my $code_ref = $self->_build_code_ref('REF(SCALAR)'); like( exception { $code_ref->(undef, 1) }, qr/\QArgument 0 must be of type REF(SCALAR)\E/ ); } sub no_errors : Test { my $self = shift; my $code_ref = $self->_build_code_ref('VALUE'); ok($code_ref->(undef)); } sub _build_code_ref { my $self = shift; my ($arguments) = @_; return Attribute::Contract::Modifier::Ensures->modify('package', 'name', sub { 1 }, $arguments); } 1;