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;
use Test::Moose::More 0.043;

use constant Shortcuts => 'MooseX::AttributeShortcuts::Trait::Attribute';

{
    package TestClass;

    use Moose;
    use namespace::autoclean 0.24;
    use MooseX::AttributeShortcuts;

    # four permutations here: public/normal, private/normal, public/inverse,
    # private/inverse

    has public           => (is => 'rw', predicate =>  1);
    has _private         => (is => 'rw', predicate =>  1);
    has public_inverse   => (is => 'rw', predicate => -1);
    has _private_inverse => (is => 'rw', predicate => -1);
}

validate_class TestClass => (

    methods => [qw{
        public           has_public
        _private         _has_private
        public_inverse   _has_public_inverse
        _private_inverse has_private_inverse
    }],

    attributes => [

        public => {

            -isa      => ['Moose::Meta::Attribute'],
            -does     => [Shortcuts],
            reader    => undef,
            writer    => undef,
            clearer   => undef,
            builder   => undef,
            default   => undef,
            predicate => undef,
            accessor  => 'public',
            predicate => 'has_public',
        },

        _private => {

            -isa      => ['Moose::Meta::Attribute'],
            -does     => [Shortcuts],
            reader    => undef,
            writer    => undef,
            clearer   => undef,
            builder   => undef,
            default   => undef,
            predicate => undef,
            accessor  => '_private',
            predicate => '_has_private',
        },

        public_inverse => {

            -isa      => ['Moose::Meta::Attribute'],
            -does     => [Shortcuts],
            reader    => undef,
            writer    => undef,
            clearer   => undef,
            builder   => undef,
            default   => undef,
            predicate => undef,
            accessor  => 'public_inverse',
            predicate => '_has_public_inverse',
        },

        _private_inverse => {

            -isa      => ['Moose::Meta::Attribute'],
            -does     => [Shortcuts],
            reader    => undef,
            writer    => undef,
            clearer   => undef,
            builder   => undef,
            default   => undef,
            predicate => undef,
            accessor  => '_private_inverse',
            predicate => 'has_private_inverse',
        },
    ],

);


done_testing;