use strict;
use warnings;
use Test::More 'no_plan';
use Test::Deep;
use CouchDB::View::Server;
use JSON::XS;
my $j = JSON::XS->new;
my $out = IO::Array->new;
my $server = CouchDB::View::Server->new({
out => $out,
});
$server->process($j->encode([
add_fun => 'sub { dmap(undef, shift) }',
]) . "\n");
is($out->getline, "true\n", "add_fun with valid code");
$server->process($j->encode([
add_fun => 'invalid perl code!!!',
]) . "\n");
cmp_deeply(
eval { $j->decode($out->getline) },
{
error => {
id => 'map_compilation_error',
reason => re(qr/syntax error/),
},
},
"error in invalid code",
);
$server->process(<<"");
["map_doc", {"_id":"8877AFF9789988EE","_rev":46874684684,"field":"value","otherfield":"othervalue"}]\n
is_deeply(
$j->decode($out->getline),
$j->decode(<<""), "correct map");
[[[null,{"_id":"8877AFF9789988EE","_rev":46874684684,"field":"value","otherfield":"othervalue"}]]]\n
package IO::Array;
sub new { bless [] => shift }
sub print {
my $self = shift;
my @new = split /(?<=\n)/, join "", @_;
if (@$self) {
$self->[-1] .= shift @new while $self->[-1] !~ /\n$/;
}
push @$self, @new;
}
sub getline { shift @{+shift} }