1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
#!/usr/bin/perl
use v5.18;
use warnings;
use Test2::V0;
use Object::Pad 0.800;
use attributes ();
class Counter {
field $count = 0;
method count :lvalue { $count }
method inc { $count++ };
}
# Counter::count has both :lvalue :method attrs
{
is( [ sort +attributes::get( \&Counter::count ) ],
[ 'lvalue', 'method' ],
'attributes of &Counter::count' );
}
{
my $counter = Counter->new;
is( $counter->count, 0, 'count is initially 0');
$counter->count = 4;
$counter->inc;
is( $counter->count, 5, 'count is 5' );
}
class TwiceCounter {
inherit Counter;
method inc :override { $self->SUPER::inc; $self->SUPER::inc; }
}
{
my $counter2 = TwiceCounter->new;
is( $counter2->count, 0, 'count is initially 0' );
$counter2->inc;
is( $counter2->count, 2, 'count is 2 after double-inc' );
}
class CountFromTen {
inherit Counter;
method from_ten :common {
my $self = $class->new;
$self->count = 10;
return $self;
}
}
{
my $counter10 = CountFromTen->from_ten;
is( $counter10->count, 10, 'count is initially 10' );
}
done_testing;
|