This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
UCD.pm: Bump version
[perl5.git] / lib / Class / Struct.t
CommitLineData
ad6edfcb
JH
1#!./perl -w
2
3BEGIN {
4 chdir 't' if -d 't';
5 @INC = '../lib';
6}
7
dd58e686
MP
8#
9# A couple of simple classes to use as struct elements.
10#
ad6edfcb 11package aClass;
ad6edfcb 12sub new { bless {}, shift }
ad6edfcb
JH
13sub meth { 42 }
14
f8aada62 15package RecClass;
f8aada62
JH
16sub new { bless {}, shift }
17
dd58e686
MP
18#
19# The first of our Class::Struct based objects.
20#
ad6edfcb 21package MyObj;
22633ac4
JH
22use Class::Struct;
23use Class::Struct 'struct'; # test out both forms
ad6edfcb
JH
24use Class::Struct SomeClass => { SomeElem => '$' };
25
26struct( s => '$', a => '@', h => '%', c => 'aClass' );
27
dd58e686
MP
28#
29# The second Class::Struct objects:
30# test the 'compile-time without package name' feature.
31#
32package MyOther;
33use Class::Struct s => '$', a => '@', h => '%', c => 'aClass';
ad6edfcb 34
dd58e686
MP
35#
36# back to main...
37#
38package main;
ad6edfcb 39
dd58e686 40use Test::More tests => 24;
ad6edfcb 41
dd58e686
MP
42my $obj = MyObj->new;
43isa_ok $obj, 'MyObj';
ad6edfcb 44
dd58e686
MP
45$obj->s('foo');
46is $obj->s(), 'foo';
ad6edfcb 47
dd58e686 48isa_ok $obj->a, 'ARRAY';
ad6edfcb 49$obj->a(2, 'secundus');
dd58e686 50is $obj->a(2), 'secundus';
ad6edfcb 51
dd58e686
MP
52$obj->a([4,5,6]);
53is $obj->a(1), 5;
ad6edfcb 54
dd58e686 55isa_ok $obj->h, 'HASH';
ad6edfcb 56$obj->h('x', 10);
dd58e686 57is $obj->h('x'), 10;
ad6edfcb 58
dd58e686
MP
59$obj->h({h=>7,r=>8,f=>9});
60is $obj->h('r'), 8;
ad6edfcb 61
dd58e686 62is $obj->c, undef;
ad6edfcb 63
f8aada62 64$obj = MyObj->new( c => aClass->new );
dd58e686
MP
65isa_ok $obj->c, 'aClass';
66is $obj->c->meth(), 42;
ad6edfcb 67
f8aada62 68
8af2e859 69$obj = MyOther->new;
dd58e686 70isa_ok $obj, 'MyOther';
ad6edfcb 71
dd58e686
MP
72$obj->s('foo');
73is $obj->s(), 'foo';
ad6edfcb 74
dd58e686
MP
75isa_ok $obj->a, 'ARRAY';
76$obj->a(2, 'secundus');
77is $obj->a(2), 'secundus';
ad6edfcb 78
726cfeaf 79$obj->a([4,5,6]);
dd58e686 80is $obj->a(1), 5;
726cfeaf 81
dd58e686
MP
82isa_ok $obj->h, 'HASH';
83$obj->h('x', 10);
84is $obj->h('x'), 10;
726cfeaf
JH
85
86$obj->h({h=>7,r=>8,f=>9});
dd58e686 87is $obj->h('r'), 8;
726cfeaf 88
dd58e686
MP
89is $obj->c, undef;
90
91$obj = MyOther->new( c => aClass->new );
92isa_ok $obj->c, 'aClass';
93is $obj->c->meth(), 42;
94
95
96
97my $obk = SomeClass->new();
98$obk->SomeElem(123);
99is $obk->SomeElem(), 123;
f8aada62 100
dd58e686
MP
101my $recobj = RecClass->new();
102isa_ok $recobj, 'RecClass';
726cfeaf 103