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 tests => 8;
use Test::Exception;

BEGIN {    
    use_ok('IOC');    
    use_ok('IOC::Registry');  
    use_ok('IOC::Service::Parameterized');   
}

{
    package Localized::Object;
    
    use strict;
    use warnings;
    
    sub new {
        my ($class, $locale) = @_;
        bless \$locale => $class;
    }
    
    sub locale { ${$_[0]} }
}

my $s = IOC::Service::Parameterized->new('localized_obj' => sub {
    my ($c, %params) = @_;
    Localized::Object->new($params{locale});
});

my $c1 = IOC::Container->new('foo');
my $c2 = IOC::Container->new('bar');
my $c3 = IOC::Container->new('baz');

$c1->addSubContainer($c2);
$c2->addSubContainer($c3);

lives_ok {
    $c3->register($s)
} '... set container successfully';

my $reg = IOC::Registry->new;
$reg->registerContainer($c1);

foreach my $locale (qw/en fr_ca/) {
    my $obj = $reg->locateService('foo/bar/baz/localized_obj' => (locale => $locale));
    isa_ok($obj, 'Localized::Object');
    is($obj->locale, $locale, '... got the right locale (' . $locale . ')');
}