Class-Constructor
view release on metacpan or search on metacpan
t/01-class_constructor.t view on Meta::CPAN
sub bam { $_[0]->{bam} = $_[1] if defined $_[1]; return $_[0]->{bam} }
Test_Class2->mk_constructor(
Name => 'create',
Auto_Init => [ qw / baz bam / ],
);
Test_Class2->mk_constructor(
Name => 'boom',
Auto_Init => 'baz',
);
package main;
$tc = Test_Class2->create(
baz => 'testbaz',
bam => 'testbam',
);
is(ref $tc, 'Test_Class2', 'class2 - object created');
is($tc->baz, 'testbaz', 'class2 - attr1');
is($tc->bam, 'testbam', 'class2 - attr2');
my $tc2 = Test_Class2->boom(
baz => 'testbaz',
);
is(ref $tc, 'Test_Class2', 'object created');
eval {
$tc2 = Test_Class2->boom(
baz => 'testbaz',
bam => 'testbam',
);
};
ok($@ =~ /can\'t\s+autoinitialize/i, 'auto init');
package Test_Class3;
use base qw/ Class::Constructor /;
sub baz { $_[0]->{baz} = $_[1] if defined $_[1]; return $_[0]->{baz} }
sub bam { $_[0]->{bam} = $_[1] if defined $_[1]; return $_[0]->{bam} }
Test_Class3->mk_constructor(
Auto_Init => 'baz',
Init_Method => '_init',
);
sub _init { 1 };
package main;
$tc = Test_Class3->new(
baz => 'testbaz',
bam => 'testbam',
);
is(ref $tc, 'Test_Class3', 'class 3 - object created');
ok(!defined $tc->bam, 'class 3 - initialization blocked');
ok($@ =~ /can\'t\s+autoinitialize/i, 'auto init');
package Test_Class4;
use base qw/ Class::Constructor /;
Test_Class4->mk_constructor(
Init_Method => '_init_1',
Init_Methods => [ '_init_2', '_init_3' ],
);
sub _init_1 {
my $self = shift;
$self->{_state} = 'init1';
}
sub _init_2 {
my $self = shift;
$self->{_state} .= '.init2';
}
sub _init_3 {
my $self = shift;
$self->{_state} .= '.init3';
}
sub get_state {
my $self = shift;
return $self->{_state};
}
package main;
$tc = Test_Class4->new;
is($tc->get_state,'init1.init2.init3', 'initialization methods');
package Subclass_Test;
use base qw/ Class::Constructor /;
sub baz { $_[0]->{baz} = $_[1] if defined $_[1]; return $_[0]->{baz} }
sub bam { $_[0]->{bam} = $_[1] if defined $_[1]; return $_[0]->{bam} }
sub type { $_[0]->{type} = $_[1] if defined $_[1]; return $_[0]->{type} }
Subclass_Test->mk_constructor(
Name => 'create',
Subclass_Param => 'Type',
Auto_Init => [ qw/ baz bam type / ],
);
sub set_bam {
my $self = shift;
$self->bam('no');
};
sub set_baz {
my $self = shift;
$self->baz('no');
};
package main;
( run in 1.709 second using v1.01-cache-2.11-cpan-39bf76dae61 )