The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;

use Test::More;
use Test::Moose;

use Bread::Board;

{
    package My::Foo;
    use Moose;

    has 'bar' => (
        is       => 'ro',
        isa      => 'My::Bar',
        required => 1
    );

    package My::Bar;
    use Moose;

    has 'foo' => (
        is       => 'ro',
        isa      => 'My::Foo',
        required => 1
    );

}

{
    my $c = container 'MyTestContainer' => as {
        typemap 'My::Foo' => infer;
    };

    ok($c->has_type_mapping_for('My::Foo'), '... have a type mapping for My::Foo');

    {
        my $foo = $c->resolve( type => 'My::Foo' );
        isa_ok($foo, 'My::Foo');
        isa_ok($foo->bar, 'My::Bar');
    }

    {
        my $bar = $c->resolve( service => 'type:My::Bar' );
        isa_ok($bar, 'My::Bar');
        isa_ok($bar->foo, 'My::Foo');
    }
}

done_testing;