X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Finherited.t;h=a2e156799d2781159390714f49a046046465686f;hb=0effd05f2e344651214c390ed5e078f46eba0dc6;hp=43f5b6e43976da22b0367263afb58bd738037542;hpb=c46050d3590413eba374e98a3789b2675c2bbca1;p=p5sagit%2FClass-Accessor-Grouped.git diff --git a/t/inherited.t b/t/inherited.t index 43f5b6e..a2e1567 100644 --- a/t/inherited.t +++ b/t/inherited.t @@ -1,4 +1,5 @@ -use Test::More tests => 33; +use Test::More tests => 36; +use Test::Exception; use strict; use warnings; use lib 't/lib'; @@ -8,6 +9,11 @@ use NotHashBased; my $super = SuperInheritedGroups->new; my $base = BaseInheritedGroups->new; +my @ret = SuperInheritedGroups->basefield; + +ok(@ret == 1, 'Return value before set'); +ok(!defined(SuperInheritedGroups->basefield), 'Undef return before set'); + # set base. base, super, object = base is(BaseInheritedGroups->basefield('All Your Base'), 'All Your Base'); is(SuperInheritedGroups->basefield, 'All Your Base'); @@ -52,15 +58,13 @@ is(BaseInheritedGroups->basefield, 'All Your Base'); # croak on get/set on non hash-based object my $dying = NotHashBased->new; -eval { - $dying->killme; -}; -ok($@ =~ /Cannot get.*is not hash-based/); +throws_ok { + $dying->killme; +} qr/Cannot get.*is not hash-based/; -eval { - $dying->killme('foo'); -}; -ok($@ =~ /Cannot set.*is not hash-based/); +throws_ok { + $dying->killme('foo'); +} qr/Cannot set.*is not hash-based/; # make sure we're get defined items, even 0, '' BaseInheritedGroups->basefield('base'); @@ -76,3 +80,14 @@ SuperInheritedGroups->basefield(undef); is(SuperInheritedGroups->basefield, 'base'); is(BaseInheritedGroups->undefined, undef); + +# make sure run-time @ISA changes trigger an inheritance chain recalculation +SuperInheritedGroups->basefield(undef); +BaseInheritedGroups->basefield('your base'); + +# dirty hack, emulate Class::C3::Componentised +require ExtraInheritedGroups; +unshift @SuperInheritedGroups::ISA, qw/ExtraInheritedGroups/; + +# this comes from ExtraInheritedGroups +is(SuperInheritedGroups->basefield, 'your extra base!');