The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

use Test::More 0.88;
use Test::Fatal;
use Test::Moose qw( with_immutable );

{
    package DoubleUsage;

    use Moose;
    use MooseX::SlurpyConstructor;

    has slurpy => (
        is      => 'ro',
        slurpy  => 1,
    );
}

pass('adding single slurpy attribute succeeds');

like(
    exception {
        package DoubleUsage;
        has slurpy2 => (
            is      => 'ro',
            slurpy  => 1,
        );
    },
    qr/\QAttempting to use slurpy attribute slurpy2 in class DoubleUsage that already has a slurpy attribute (slurpy)\E/,
    'expected error when trying to add two slurpy attributes to a class',
);

{
    package Role;

    use Moose::Role;
    use MooseX::SlurpyConstructor;

    has thing  => ( is => 'rw' );
    has slurpy => ( is => 'ro', slurpy => 1 );
}

{
    package Standard;

    use Moose;
    with 'Role';

    has 'thing' => ( is => 'rw' );
}

like(
    exception {
        package Standard;
        use MooseX::SlurpyConstructor;
        has slurpy2 => ( is => 'ro', slurpy => 1 );
    },
    qr/\QAttempting to use slurpy attribute slurpy2 in class Standard that already has a slurpy attribute (slurpy)\E/,
    'cannot add a second slurpy attribute in the class when one is already in the role',
);


done_testing();