use strict; use warnings; use Test::More tests => 12; use Test::Exception; use FindBin; use lib "$FindBin::Bin/lib"; use vars qw/@warnings/; BEGIN { $SIG{__WARN__} = sub { push @warnings, @_ } } use C3NT; BEGIN { use_ok('Class::C3::Adopt::NEXT'); } my $quux_obj = C3NT::Quux->new; is(scalar @warnings, 0, 'no warnings yet'); is($quux_obj->basic, 42, 'Basic inherited method returns correct value'); like($warnings[0], qr/C3NT::Quux uses NEXT/, 'warning for the first time NEXT is used'); is($quux_obj->basic, 42, 'Basic inherited method returns correct value'); is(scalar @warnings, 3, 'warn only once per class'); { my $non_exist_rval; lives_ok(sub { $non_exist_rval = $quux_obj->non_exist; }, 'Non-existant non-ACTUAL throws no errors'); is($non_exist_rval, undef, 'Non-existant non-ACTUAL returns undef'); } throws_ok(sub { $quux_obj->non_exist_actual; }, qr|non_exist_actual\b.*\bC3NT::Quux|, 'Non-existant ACTUAL throws correct error'); throws_ok(sub { $quux_obj->actual_fail_halfway; }, qr|actual_fail_halfway\b.*\bC3NT::Quux|, 'Non-existant ACTUAL in superclass throws correct error'); is( $quux_obj->c3_then_next, 21, 'C3 then NEXT' ); is( $quux_obj->next_then_c3, 22, 'NEXT then C3' );