#!/usr/bin/perl
use strict;
use warnings;
use Test::More tests => 37;
use Test::Exception;
BEGIN {
use_ok('IOC::Container');
use_ok('IOC::Service');
}
can_ok("IOC::Container", 'new');
my $container = IOC::Container->new();
isa_ok($container, 'IOC::Container');
can_ok($container, 'setParentContainer');
can_ok($container, 'getParentContainer');
can_ok($container, 'isRootContainer');
can_ok($container, 'addSubContainer');
can_ok($container, 'addSubContainers');
can_ok($container, 'hasSubContainers');
can_ok($container, 'getSubContainerList');
can_ok($container, 'getSubContainer');
can_ok($container, 'getAllSubContainers');
# create some sub-containers
my $sub_container_1 = IOC::Container->new("sub 1");
isa_ok($sub_container_1, 'IOC::Container');
my $sub_container_2 = IOC::Container->new("sub 2");
isa_ok($sub_container_2, 'IOC::Container');
my $sub_container_3 = IOC::Container->new("sub 3");
isa_ok($sub_container_3, 'IOC::Container');
my $sub_container_4 = IOC::Container->new("sub 4");
isa_ok($sub_container_4, 'IOC::Container');
ok(!$container->hasSubContainers(), '... we do not have any subcontainers');
$container->addSubContainer($sub_container_1);
ok($container->hasSubContainers(), '... we do have subcontainers now');
is($sub_container_1, $container->getSubContainer('sub 1'), '... this is our first sub container');
$container->addSubContainers(
$sub_container_2,
$sub_container_3,
$sub_container_4
);
is($sub_container_2, $container->getSubContainer('sub 2'), '... this is our second sub container');
is($sub_container_3, $container->getSubContainer('sub 3'), '... this is our third sub container');
is($sub_container_4, $container->getSubContainer('sub 4'), '... this is our fourth sub container');
is_deeply(
[ sort ($sub_container_1, $sub_container_2, $sub_container_3, $sub_container_4) ],
[ sort $container->getAllSubContainers() ]
, '... we have the same sub_containers');
is_deeply(
[ 'sub 1', 'sub 2', 'sub 3', 'sub 4' ],
[ sort $container->getSubContainerList() ]
, '... we have the same sub_container names');
# now lets take care of some errors
throws_ok {
$container->setParentContainer()
} "IOC::InsufficientArguments", '... got the error we expected';
throws_ok {
$container->setParentContainer("Fail")
} "IOC::InsufficientArguments", '... got the error we expected';
throws_ok {
$container->setParentContainer([])
} "IOC::InsufficientArguments", '... got the error we expected';
throws_ok {
$container->setParentContainer(bless({}, "Fail"))
} "IOC::InsufficientArguments", '... got the error we expected';
throws_ok {
$container->addSubContainer()
} "IOC::InsufficientArguments", '... got the error we expected';
throws_ok {
$container->addSubContainer("Fail")
} "IOC::InsufficientArguments", '... got the error we expected';
throws_ok {
$container->addSubContainer([])
} "IOC::InsufficientArguments", '... got the error we expected';
throws_ok {
$container->addSubContainer(bless({}, "Fail"))
} "IOC::InsufficientArguments", '... got the error we expected';
throws_ok {
$container->addSubContainer(IOC::Container->new('sub 1'))
} "IOC::ContainerAlreadyExists", '... got the error we expected';
throws_ok {
$container->addSubContainers()
} "IOC::InsufficientArguments", '... got the error we expected';
throws_ok {
$container->getSubContainer()
} "IOC::InsufficientArguments", '... got the error we expected';
throws_ok {
$container->getSubContainer("Fail")
} "IOC::ContainerNotFound", '... got the error we expected';