use strict;
use warnings;
package test::class;
use RPC::ExtDirect Action => 'test';
use RPC::ExtDirect::Event;
sub echo : ExtDirect(3) {
my $class = shift;
return [ splice @_, 0, 3 ];
}
sub handle_form : ExtDirect(formHandler) {
my ($class, %arg) = @_;
delete $arg{_env};
my @fields = grep { !/^file_uploads$/ } keys %arg;
my %result;
@result{ @fields } = @arg{ @fields };
return \%result;
}
our $EVENT = { name => 'foo', data => 'foo bar' };
sub handle_poll : ExtDirect(pollHandler) {
return RPC::ExtDirect::Event->new($EVENT->{name}, $EVENT->{data});
}
package main;
use Test::More tests => 7;
use_ok 'Test::ExtDirect';
my $echo_data = [ 'foo', [ 'foo', 'bar' ], { foo => 'bar' } ];
my $ret_data = eval {
call_extdirect(action => 'test', method => 'echo', arg => $echo_data)
};
is $@, '', "Echo didn't die";
is_deeply $ret_data, $echo_data, "Echo data matches";
my $form_data = { foo_field => 'foo', bar_field => 'bar' };
$ret_data = eval {
submit_extdirect(action => 'test', method => 'handle_form',
arg => $form_data)
};
is $@, '', "Form didn't die";
is_deeply $ret_data, $form_data, "Form data matches";
my $poll_data = $test::class::EVENT;
$ret_data = eval { poll_extdirect() };
is $@, '', "Poll didn't die";
is_deeply $ret_data, $poll_data, "Poll data matches";