The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!/usr/bin/perl
# This is automatically generated by author/import-moose-test.pl.
# DO NOT EDIT THIS FILE. ANY CHANGES WILL BE LOST!!!
use lib "t/lib";
use MooseCompat;

use strict;
use warnings;

use Test::More;


{
    package Foo;
    use Mouse;

    sub foo { 'Foo::foo(' . (inner() || '') . ')' };

    package Bar;
    use Mouse;

    extends 'Foo';

    package Baz;
    use Mouse;

    extends 'Foo';

    my $foo_call_counter;
    augment 'foo' => sub {
        die "infinite loop on Baz::foo" if $foo_call_counter++ > 1;
        return 'Baz::foo and ' . Bar->new->foo;
    };
}

my $baz = Baz->new();
isa_ok($baz, 'Baz');
isa_ok($baz, 'Foo');

=pod

When a subclass which augments foo(), calls a subclass which does not augment
foo(), there is a chance for some confusion. If Mouse does not realize that
Bar does not augment foo(), because it is in the call flow of Baz which does,
then we may have an infinite loop.

=cut

is($baz->foo,
  'Foo::foo(Baz::foo and Foo::foo())',
  '... got the right value for 1 augmented subclass calling non-augmented subclass');

done_testing;