Heray-Was-Here
Server : Apache
System : Linux vps103298.mylogin.co 4.18.0-513.11.1.el8_9.x86_64 #1 SMP Wed Jan 17 02:00:40 EST 2024 x86_64
User : calvet ( 273824)
PHP Version : 7.4.33
Disable Function : NONE
Directory :  /usr/share/doc/perl-Mouse/t/001_mouse/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //usr/share/doc/perl-Mouse/t/001_mouse/007-attributes.t
#!/usr/bin/perl
use strict;
use warnings;
use Test::More;
use Test::Exception;
use Test::Mouse;

use lib 't/lib';
use MooseCompat;

do {
    package Class;
    use Mouse;

    has 'x' => (
        is => 'bare',
    );

    has 'y' => (
        is => 'ro',
    );

    has 'z' => (
        is => 'rw',
    );

    has 'attr' => (
        accessor => 'rw_attr',
        reader   => 'read_attr',
        writer   => 'write_attr',
    );
    has 'attr2' => (
        is       => 'rw',
        accessor => 'rw_attr2',
    );
};
with_immutable {
    ok(!Class->can('x'), "No accessor is injected if 'is' has no value");
    can_ok('Class', 'y', 'z');

    has_attribute_ok 'Class', 'x';
    has_attribute_ok 'Class', 'y';
    has_attribute_ok 'Class', 'z';

    my $object = Class->new;

    ok(!$object->can('x'), "No accessor is injected if 'is' has no value");
    can_ok($object, 'y', 'z');

    is($object->y, undef);

    throws_ok {
        $object->y(10);
    } qr/Cannot assign a value to a read-only accessor/;

    is($object->y, undef);

    is($object->z, undef);
    is($object->z(10), 10);
    is($object->z, 10);

    can_ok($object, qw(rw_attr read_attr write_attr));
    $object->write_attr(42);
    is $object->rw_attr, 42;
    is $object->read_attr, 42;
    $object->rw_attr(100);
    is $object->rw_attr, 100;
    is $object->read_attr, 100;

    is $object->write_attr("piyo"), "piyo";
    is $object->rw_attr("yopi"),    "yopi";

    can_ok $object, qw(rw_attr2);
    ok !$object->can('attr2'), "doesn't have attr2";

    dies_ok {
        Class->rw_attr();
    };
    dies_ok {
        Class->read_attr();
    };
    dies_ok {
        Class->write_attr(42);
    };

    my @attrs = map { $_->name }
        sort { $a->insertion_order <=> $b->insertion_order } $object->meta->get_all_attributes;
    is join(' ', @attrs), 'x y z attr attr2', 'insertion_order';
} qw(Class);
done_testing;

Hry