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 => 5;
use Test::Fatal;

use t::Utils;

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

use Ubic::ServiceLoader::Ext::json;
use Ubic::Settings;

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

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

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

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

$error = exception {
    $loader->load(Ubic::Settings->service_dir.'/jinv2.json')
};
like $error, qr/Failed to parse/, "attempt to load config with syntax error";