X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F100_bugs%2F020_super_recursion.t;h=6ad2904aa52b30ee0ba15710c0c658fba42dc350;hb=a6d3794f353dd356cc916044ae525ce6e23dfc99;hp=89b355cdd420cfeb5dbd59e62edbae2313709578;hpb=085c56c26b79981b8eed77e8c5523c346511ed29;p=gitmo%2FMoose.git diff --git a/t/100_bugs/020_super_recursion.t b/t/100_bugs/020_super_recursion.t index 89b355c..6ad2904 100644 --- a/t/100_bugs/020_super_recursion.t +++ b/t/100_bugs/020_super_recursion.t @@ -1,34 +1,69 @@ -#!/usr/bin/env perl -l -use Test::More qw(no_plan); -our $seen; +use strict; +use warnings; -package A; -use Moose; +use Test::More; -sub foo { ::BAIL_OUT('A::foo called twice') if $main::seen{'A::foo'}++; return 'a' } -sub bar { ::BAIL_OUT('A::bar called twice') if $main::seen{'A::bar'}++; return 'a' } -sub baz { ::BAIL_OUT('A::baz called twice') if $main::seen{'A::baz'}++; return 'a' } +{ + package A; + use Moose; -package B; -use Moose; -extends qw(A); + sub foo { + ::BAIL_OUT('A::foo called twice') if $main::seen{'A::foo'}++; + return 'a'; + } + sub bar { + ::BAIL_OUT('A::bar called twice') if $main::seen{'A::bar'}++; + return 'a'; + } -sub foo { ::BAIL_OUT('B::foo called twice') if $main::seen{'B::foo'}++; return 'b'.super() } -sub bar { ::BAIL_OUT('B::bar called twice') if $main::seen{'B::bar'}++; return 'b'.super() } -override baz => sub { ::BAIL_OUT('B::baz called twice') if $main::seen{'B::baz'}++; return 'b'.super() }; + sub baz { + ::BAIL_OUT('A::baz called twice') if $main::seen{'A::baz'}++; + return 'a'; + } +} -package C; -use Moose; -extends qw(B); +{ + package B; + use Moose; + extends qw(A); -sub foo { return 'c'.super() } -override bar => sub { ::BAIL_OUT('C::bar called twice') if $main::seen{'C::bar'}++; return 'c'.super() }; -override baz => sub { ::BAIL_OUT('C::baz called twice') if $main::seen{'C::baz'}++; return 'c'.super() }; + sub foo { + ::BAIL_OUT('B::foo called twice') if $main::seen{'B::foo'}++; + return 'b' . super(); + } + sub bar { + ::BAIL_OUT('B::bar called twice') if $main::seen{'B::bar'}++; + return 'b' . ( super() || '' ); + } -package main; + override baz => sub { + ::BAIL_OUT('B::baz called twice') if $main::seen{'B::baz'}++; + return 'b' . super(); + }; +} -is(C->new->foo, 'c'); -is(C->new->bar, 'cb'); -is(C->new->baz, 'cba'); +{ + package C; + use Moose; + extends qw(B); + + sub foo { return 'c' . ( super() || '' ) } + + override bar => sub { + ::BAIL_OUT('C::bar called twice') if $main::seen{'C::bar'}++; + return 'c' . super(); + }; + + override baz => sub { + ::BAIL_OUT('C::baz called twice') if $main::seen{'C::baz'}++; + return 'c' . super(); + }; +} + +is( C->new->foo, 'c' ); +is( C->new->bar, 'cb' ); +is( C->new->baz, 'cba' ); + +done_testing;