The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl
use warnings;
use strict;
use Test::More tests => 6;
use Test::Exception;

lives_ok {
    package Book;
    use Moose;
    has 'text' => (is => 'ro', isa => 'Str', default => 'Shakespeare');

    package ShrinkWrap;
    use MooseX::AttributeInflate;

    has_inflated 'book' => (
        is => 'ro',
        isa => 'Book',
        inflate_args => [text => "There's Waldo!"],
    );

    has 'label' => (is => 'rw', isa => 'Str');

} 'can use "has_inflated"';

happy_path: {
    my $o = ShrinkWrap->new(label => 'Good Book');
    isa_ok $o, 'ShrinkWrap';
    isa_ok $o->book, 'Book';
    is $o->book->text, "There's Waldo!";
    is $o->label, 'Good Book';
}

invalid_type: dies_ok {
    package Blearg;
    use MooseX::AttributeInflate;
    has_inflated 'not_really' => (is => 'ro', isa => 'Int');
} "can't use has_inflated on a non-object";