1#!/usr/bin/env perl
2use strict;
3use warnings;
4use Test::More;
5
6use Bread::Board;
7
8{
9    package NonMoose;
10    sub new { bless { data => $_[0] }, shift }
11}
12
13{
14    package Foo;
15    use Moose;
16
17    has non_moose => (
18        is       => 'ro',
19        isa      => 'NonMoose',
20        required => 1,
21    );
22}
23
24{
25    package Bar;
26    use Moose;
27
28    has foo => (
29        is       => 'ro',
30        isa      => 'Foo',
31        required => 1,
32    );
33}
34
35{
36    my $c = container Stuff => as {
37        service non_moose => NonMoose->new("foo");
38        service foo => (
39            class        => 'Foo',
40            dependencies => ['non_moose'],
41        );
42        typemap 'Foo' => 'foo';
43        typemap 'Bar' => infer;
44    };
45
46    my $bar = $c->resolve(type => 'Bar');
47    isa_ok($bar->foo->non_moose, 'NonMoose');
48}
49
50{
51    package Foo::Sub;
52    use Moose;
53
54    extends 'Foo';
55}
56
57{
58    my $c = container Stuff => as {
59        service non_moose => NonMoose->new("foo");
60        service foo => (
61            class        => 'Foo::Sub',
62            dependencies => ['non_moose'],
63        );
64        typemap 'Foo::Sub' => 'foo';
65        typemap 'Bar' => infer;
66    };
67
68    my $bar = $c->resolve(type => 'Bar');
69    isa_ok($bar->foo->non_moose, 'NonMoose');
70}
71
72done_testing;
73