File: 153_sugar_container_inheritance.t

package info (click to toggle)
libbread-board-perl 0.29-1~bpo70%2B1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy-backports
  • size: 620 kB
  • sloc: perl: 5,280; makefile: 13
file content (116 lines) | stat: -rw-r--r-- 2,737 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/usr/bin/perl

use strict;
use warnings;

use Test::More;
use Test::Fatal;

use Bread::Board;

{
    my $c = container Foo => as {
        container Bar => as {
            service baz => 21;
        };

        container Moo => ['Bar'] => as {
            service kooh => (
                block => sub {
                    my ($s) = @_;
                    $s->param('baz') * 2;
                },
                dependencies => {
                    baz => depends_on('Bar/baz'),
                },
            );
        };
    };

    container $c => as {
        container '+Bar' => as {
            service bif => 123;
        };

        container '+Moo' => as {
            service boo => (
                block => sub {
                    my ($s) = @_;
                    $s->param('a') + $s->param('b');
                },
                dependencies => {
                    a => depends_on('kooh'),
                    b => depends_on('Bar/bif'),
                },
            );
        };
    };

    is $c->resolve(service => 'Bar/baz'), 21;
    is $c->resolve(service => 'Bar/bif'), 123;

    my $p = $c->fetch('Moo')->create(Bar => $c->fetch('Bar'));
    is $p->resolve(service => 'kooh'), 42;
    is $p->resolve(service => 'boo'), 165;

    like exception {
        container '+Foo' => as {};
    }, qr/^Inheriting containers isn't possible outside of the context of a container/;

    like exception {
        container $c => as {
            container '+Buf' => as {};
        };
    }, qr/^Could not find container or service for Buf in Foo/;

    like exception {
        container $c => as {
            container '+Buf' => ['Moo'] => as {};
        };
    }, qr/^Declaring container parameters when inheriting is not supported/;
}

{
    {
        package Thing;
        use Moose;
        has bar => (is => 'ro', required => 1);
        no Moose;
    }

    {
        package TestThing;
        use Moose;
        extends 'Thing';
        no Moose;
    }

    my $c = container Foo => as {
        service bar => 42;

        container Moo => as {
            container Kooh => as {
                service boo => (
                    class => 'Thing',
                    dependencies => {
                        bar => '../../bar',
                    },
                );
            };
        };
    };

    isa_ok $c->resolve(service => 'Moo/Kooh/boo'), 'Thing';
    is $c->resolve(service => 'Moo/Kooh/boo')->bar, 42;

    container $c => as {
        container '+Moo/Kooh' => as {
            service '+boo' => (class => 'TestThing');
        };
    };

    isa_ok $c->resolve(service => 'Moo/Kooh/boo'), 'TestThing';
    is $c->resolve(service => 'Moo/Kooh/boo')->bar, 42;
}

done_testing;