The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!perl 

use Test::More tests => 7;

BEGIN {
	use_ok( 'MooseX::Meta::Attribute::Lvalue' );
}

diag( "Testing MooseX::Meta::Attribute::Lvalue $MooseX::Meta::Attribute::Lvalue::VERSION, Perl $], $^X" );


{
    package App;
        use Moose;
        with 'MooseX::Meta::Attribute::Lvalue';

            has 'name' => ( 
                is => 'rw', isa => 'Str' , 
                traits => [ 'Lvalue' ] , 
            );


            has 'count' => (
                is => 'rw', isa => 'Int' ,
                default => 0 ,
                traits => [ 'Lvalue' ] ,
            );


            has 'sign' => ( 
                is => 'rw' , 
                isa => 'Str', 
                # traits => [ 'Lvalue' ]  # This lacks the Lvalue trait
            );

}

package main;
  my $app = App->new( name => 'frank', sign => 'pisces' );
  

  isa_ok( $app, "App" );
  
# DOES ROLES
  ok( $app->meta->get_attribute( 'name' )->does( 'Lvalue' ), "Does Lvalue" );
  ok( $app->meta->get_attribute( 'count' )->does( 'Lvalue' ), "Attribute 'count' does role 'Lvalue'" );
  ok( $app->meta->get_attribute( 'sign' )->does( 'Lvalue' ) == 0, "Doesn't  Lvalue" );

  eval { $app->sign = "aries" };   # lvalue is 0, does not get changed
  ok( $app->sign eq "pisces", "Normal rw attribute" );  
  
  $app->name = "Ralph" ;
  ok( $app->name eq "Ralph", "Lvalue attribute"  );