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

BEGIN {    
    use_ok('IOC');
    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 $c = IOC::Container->new();

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

foreach my $locale (qw/en fr_ca/) {
    my $obj = $s->instance(locale => $locale);
    isa_ok($obj, 'Localized::Object');
    is($obj->locale, $locale, '... got the right locale (' . $locale . ')');
}

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