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;

BEGIN {
  my $mod = 'Moose';
  local $@;
  eval qq[require $mod; 1];
  if ( my $e = $@ ) {
    my $msg = "$e";
    if ( $e =~ /^Can't locate/ ) {
      $msg = "Test requires module '$mod' but it's not found";
    }
    if ( $ENV{RELEASE_TESTING} ) {
      BAIL_OUT($msg);
    }
    else {
      plan skip_all => $msg;
    }
  }
}

use Test::Fatal;

use lib "t/lib";

use T5Is::TestPackage;

sub cr {
  return T5Is::TestPackage->new(@_);
}

pass("Syntax Compiles");

for ( {}, { roattr => "v" }, { rwattr => "v" }, { bareattr => 'v' }, ) {
  isnt( exception { cr( %{$_} ) }, undef, 'Constraints on requirements still work' );
}

is( exception { cr( rwattr => 'v', roattr => 'v', bareattr => 'v', ) }, undef, 'Construction still works' );

my $i = cr( rwattr => 'v', roattr => 'v', bareattr => 'v', );

isnt( exception { $i->roattr('x') }, undef, "RO works still" );

is( exception { $i->rwattr('x') }, undef, 'RW works still' );

is( $i->rwattr(), 'x', "RW Works as expected" );

done_testing();