Properly string-eval stuff
[p5sagit/Class-Accessor-Grouped.git] / t / inherited.t
CommitLineData
4f8ce9da 1use Test::More tests => 36;
18026fd5 2use Test::Exception;
e6f2a0fd 3use strict;
4use warnings;
5use lib 't/lib';
6use SuperInheritedGroups;
7use NotHashBased;
8
9my $super = SuperInheritedGroups->new;
10my $base = BaseInheritedGroups->new;
11
9c3d5179 12my @ret = SuperInheritedGroups->basefield;
13
14ok(@ret == 1, 'Return value before set');
15ok(!defined(SuperInheritedGroups->basefield), 'Undef return before set');
16
e6f2a0fd 17# set base. base, super, object = base
18is(BaseInheritedGroups->basefield('All Your Base'), 'All Your Base');
19is(SuperInheritedGroups->basefield, 'All Your Base');
20is($super->basefield, 'All Your Base');
21is($base->basefield, 'All Your Base');
22
23# set super. super = super, base = base, object = super
24is(SuperInheritedGroups->basefield('Now Its Our Base'), 'Now Its Our Base');
25is(SuperInheritedGroups->basefield, 'Now Its Our Base');
26is(BaseInheritedGroups->basefield, 'All Your Base');
27is($super->basefield, 'Now Its Our Base');
28is($base->basefield, 'All Your Base');
29
30#set base
31is($base->basefield('First Base'), 'First Base');
32is($base->basefield, 'First Base');
33is($super->basefield, 'Now Its Our Base');
34is(BaseInheritedGroups->basefield, 'All Your Base');
35is(SuperInheritedGroups->basefield, 'Now Its Our Base');
36
37# set object, object = object, super = super, base = base
38is($super->basefield('Third Base'), 'Third Base');
39is($super->basefield, 'Third Base');
40is(SuperInheritedGroups->basefield, 'Now Its Our Base');
41is(BaseInheritedGroups->basefield, 'All Your Base');
42
43# create new super. new = base, object = object, super = super, base = base
44my $newsuper = SuperInheritedGroups->new;
45is($newsuper->basefield, 'Now Its Our Base');
46is($super->basefield, 'Third Base');
47is(SuperInheritedGroups->basefield, 'Now Its Our Base');
48is(BaseInheritedGroups->basefield, 'All Your Base');
49
50# create new base. new = base, super = super, base = base
51my $newbase = BaseInheritedGroups->new;
52is($newbase->basefield, 'All Your Base');
53is($newsuper->basefield, 'Now Its Our Base');
54is($super->basefield, 'Third Base');
55is(SuperInheritedGroups->basefield, 'Now Its Our Base');
56is(BaseInheritedGroups->basefield, 'All Your Base');
57
58# croak on get/set on non hash-based object
59my $dying = NotHashBased->new;
60
18026fd5 61throws_ok {
ba8c183b 62 $dying->killme;
18026fd5 63} qr/Cannot get.*is not hash-based/;
e6f2a0fd 64
18026fd5 65throws_ok {
ba8c183b 66 $dying->killme('foo');
18026fd5 67} qr/Cannot set.*is not hash-based/;
2d6912a0 68
69# make sure we're get defined items, even 0, ''
70BaseInheritedGroups->basefield('base');
71SuperInheritedGroups->basefield(0);
72is(SuperInheritedGroups->basefield, 0);
73
74BaseInheritedGroups->basefield('base');
75SuperInheritedGroups->basefield('');
76is(SuperInheritedGroups->basefield, '');
77
78BaseInheritedGroups->basefield('base');
79SuperInheritedGroups->basefield(undef);
80is(SuperInheritedGroups->basefield, 'base');
81
c46050d3 82is(BaseInheritedGroups->undefined, undef);
4f8ce9da 83
84# make sure run-time @ISA changes trigger an inheritance chain recalculation
85SuperInheritedGroups->basefield(undef);
86BaseInheritedGroups->basefield('your base');
87
88# dirty hack, emulate Class::C3::Componentised
89require ExtraInheritedGroups;
90unshift @SuperInheritedGroups::ISA, qw/ExtraInheritedGroups/;
91
92# this comes from ExtraInheritedGroups
93is(SuperInheritedGroups->basefield, 'your extra base!');