summaryrefslogblamecommitdiffstats
path: root/t/011_container_path.t
blob: b0e1b785b2a2d4d51eb7da1c3b7e347a59247786 (plain) (tree)


















































































                                                                      
use v6;
use Test;

use Bread::Board;

class MyApp::Schema { }
class MyApp::View::TT { }

my $c = Bread::Board::Container.new(
    name           => 'Application',
    sub_containers => [
        Bread::Board::Container.new(
            name     => 'Model',
            services => [
                Bread::Board::Literal.new(name => 'dsn', value => ''),
                Bread::Board::ConstructorInjection.new(
                    name         => 'schema',
                    class        => MyApp::Schema,
                    dependencies => {
                        dsn => Bread::Board::Dependency.new(
                            service_path => 'dsn',
                        ),
                        user => Bread::Board::Literal.new(
                            name  => 'user',
                            value => '',
                        ),
                        pass => Bread::Board::Literal.new(
                            name  => 'pass',
                            value => '',
                        ),
                    },
                ),
            ],
        ),
        Bread::Board::Container.new(
            name     => 'View',
            services => [
                Bread::Board::ConstructorInjection.new(
                    name         => 'TT',
                    class        => MyApp::View::TT,
                    dependencies => {
                        tt_include_path => Bread::Board::Literal.new(
                            name  => 'include_path',
                            value => [],
                        ),
                    },
                ),
            ],
        ),
        Bread::Board::Container.new(name => 'Controller'),
    ],
);

my $model = $c.fetch('Model');
isa_ok($model, Bread::Board::Container);
is($model.name, 'Model');

{
    my $model2 = $c.fetch('/Model');
    isa_ok($model2, Bread::Board::Container);
    is($model, $model2);
}

my $dsn = $model.fetch('schema/dsn');
isa_ok($dsn, Bread::Board::Dependency);
is($dsn.service_path, 'dsn');

{
    my $dsn2 = $c.fetch('/Model/schema/dsn');
    isa_ok($dsn2, Bread::Board::Dependency);
    is($dsn, $dsn2);
}

my $root = $model.fetch('../');
isa_ok($root, Bread::Board::Container);
is($root, $c);
is($model, $model.fetch('../Model'));
is($dsn, $model.fetch('../Model/schema/dsn'));
is($model, $dsn.fetch('../Model'));

done;

# vim:ft=perl6:foldmethod=manual