Sponsoring The Perl Toolchain Summit 2025: Help make this important event another success Learn more

#! perl -I. -w
{
my $dispatch = dispatch_table_from_pod(
plugin => 'jsonrpc',
packages => [qw/
TestProject::ApiCalls
/],
endpoint => '/testing',
);
is_deeply(
$dispatch,
{
'api.uppercase' => dispatch_item(
code => TestProject::ApiCalls->can('do_uppercase'),
package => 'TestProject::ApiCalls',
),
},
"Dispatch table from POD"
);
like(
exception {
dispatch_table_from_pod(
plugin => 'jsonrpc',
packages => [qw/
TestProject::Bogus
/],
endpoint => '/testing',
)
},
qr/Handler not found for bogus.nonexistent: TestProject::Bogus::nonexistent doesn't seem to exist/,
"Setting a non-existent dispatch target throws an exception"
);
}
{
my $xmlrpc = dispatch_table_from_pod(
plugin => 'xmlrpc',
packages => [ 'TestProject::MixedEndpoints' ],
endpoint => '/system',
);
my $system_call = dispatch_item(
package => 'TestProject::MixedEndpoints',
code => TestProject::MixedEndpoints->can('call_for_system'),
);
my $any_call = dispatch_item(
package => 'TestProject::MixedEndpoints',
code => TestProject::MixedEndpoints->can('call_for_all_endpoints'),
);
is_deeply(
$xmlrpc,
{
'system.call' => $system_call,
'any.call' => $any_call,
},
"picked the /system call for xmlrpc"
);
my $jsonrpc = dispatch_table_from_pod(
plugin => 'jsonrpc',
packages => [ 'TestProject::MixedEndpoints' ],
endpoint => '/system',
);
is_deeply(
$jsonrpc,
{
'system_call' => $system_call,
'any_call' => $any_call,
},
"picked the /system call for jsonrpc"
);
my $restrpc = dispatch_table_from_pod(
plugin => 'restrpc',
packages => [ 'TestProject::MixedEndpoints' ],
endpoint => '/system',
);
is_deeply(
$restrpc,
{
'call' => $system_call,
'any-call' => $any_call,
},
"picked the /system call for restrpc"
);
}
{
my $xmlrpc = dispatch_table_from_pod(
plugin => 'xmlrpc',
packages => [ 'TestProject::MixedEndpoints' ],
endpoint => '/testing',
);
my $testing_call = dispatch_item(
package => 'TestProject::MixedEndpoints',
code => TestProject::MixedEndpoints->can('call_for_testing'),
);
my $any_call = dispatch_item(
package => 'TestProject::MixedEndpoints',
code => TestProject::MixedEndpoints->can('call_for_all_endpoints'),
);
is_deeply(
$xmlrpc,
{
'testing.call' => $testing_call,
'any.call' => $any_call,
},
"picked the /testing call for xmlrpc"
);
my $jsonrpc = dispatch_table_from_pod(
plugin => 'jsonrpc',
packages => [ 'TestProject::MixedEndpoints' ],
endpoint => '/testing',
);
is_deeply(
$jsonrpc,
{
'testing_call' => $testing_call,
'any_call' => $any_call,
},
"picked the /testing call for jsonrpc"
);
my $restrpc = dispatch_table_from_pod(
plugin => 'restrpc',
packages => [ 'TestProject::MixedEndpoints' ],
endpoint => '/testing',
);
is_deeply(
$restrpc,
{
'call' => $testing_call,
'any-call' => $any_call,
},
"picked the /testing call for restrpc"
);
}
done_testing();