#!/usr/bin/env perl
use strict;
use warnings;
use Test::More tests => 24;
use Test::Moose;
{
package MyTest;
use Moose;
use MooseX::Aliases;
use Moose::Util::TypeConstraints;
subtype 'PositiveInt', as 'Int', where { $_ >= 0 };
coerce 'PositiveInt', from 'Int', via { abs };
has foo => (
is => 'ro',
isa => 'PositiveInt',
alias => ['bar'],
coerce => 1,
);
has baz => (
is => 'rw',
isa => 'PositiveInt',
init_arg => undef,
alias => ['quux'],
coerce => 1,
);
}
with_immutable {
my $test1 = MyTest->new(foo => -1, baz => -3);
is($test1->foo, 1, 'Attribute set with default init_arg');
is($test1->baz, undef, 'Attribute set with default init_arg (undef)');
$test1->baz(-3);
is($test1->baz, 3,
'Attribute set with default writer, read with default reader');
is($test1->quux, 3,
'Attribute set with default writer, read with aliased reader');
$test1->quux(4);
is($test1->baz, 4, 'Attribute set with aliased writer');
is($test1->quux, 4, 'Attribute set with aliased writer');
my $test2 = MyTest->new(bar => -1, baz => -3);
is($test2->foo, 1, 'Attribute set wtih aliased init_arg');
is($test2->baz, undef, 'Attribute set with default init_arg (undef)');
$test2->baz(-3);
is($test2->baz, 3,
'Attribute set with default writer, read with default reader');
is($test2->quux, 3,
'Attribute set with default writer, read with aliased reader');
$test2->quux(-4);
is($test2->baz, 4, 'Attribute set with aliased writer');
is($test2->quux, 4, 'Attribute set with aliased writer');
} 'MyTest';