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 lib 'lib';
use Test::More tests => 6;
use Test::Fatal;

use t::Utils;

rebuild_tfiles();
local_ubic(service_dirs => ['t/service/loaders']);

use Ubic::ServiceLoader::Ext::ini;
use Ubic::Settings;

my $loader = Ubic::ServiceLoader::Ext::ini->new;

{
    my $service = $loader->load(Ubic::Settings->service_dir.'/bar.ini');
    ok $service->isa('Ubic::Service::SimpleDaemon'), 'load service using ini loader';
    is $service->{bin}, 'sleep 200', 'ini loader passes options to constructor';
}

{
    my $service = $loader->load(Ubic::Settings->service_dir.'/default-module.ini');
    ok $service->isa('Ubic::Service::SimpleDaemon'), 'SimpleDaemon is a default module for ini configs';
}

my $error;
$error = exception {
    $loader->load(Ubic::Settings->service_dir.'/invalid.ini')
};
like $error, qr/Unknown section/, "attempt to load config with unknown section fails";

$error = exception {
    $loader->load(Ubic::Settings->service_dir.'/invalid2.ini')
};
like $error, qr/Unknown option/, "attempt to load config with unknown root-level option";

$error = exception {
    $loader->load(Ubic::Settings->service_dir.'/invalid3.ini')
};
like $error, qr/Syntax error at line 4/, "attempt to load config with syntax error";