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 Test::More tests => 4;

use WWW::Metaweb;

our $original_query;
our ($callback1, $callback2) = (0, 0);

$original_query = qq({
	"query":{
		"creator":true,
		"id":"/user/hds/default_domain/www_metaweb_test"
	}
});

sub callback1  {
	my $json = shift;

	$main::callback1 = 1;

	$main::callback1 = 2 if $json =~ /"id":"\/user\/hds\/default_domain\/www_metaweb_test"/;

	return $json;
} # &callback1

sub callback2  {
	my $json = shift;
	
	$main::callback2 = 1;
	
	$json =~ s/"creator":true/"creator":null/;

	return $json;
} # &callback2

my $mh = WWW::Metaweb->connect( server => 'www.freebase.com',
				read_uri => '/api/service/mqlread',
				json_preprocessor => [ \&callback1, \&callback2 ]
			      );

my $result = $mh->read($original_query, 'perl');

cmp_ok($callback1, '>', 0, 'First callback called.');

cmp_ok($callback1, '>', 1, 'JSON sent to callback correctly.');

cmp_ok($callback2, '>', 0, 'Second callback called.');

ok($mh->result_is_ok('query0'), 'Callback altered JSON.');

exit;