my
$class
=
"MongoDB::BSON"
;
require_ok(
$class
);
my
$codec
= new_ok(
$class
, [],
"new with no args"
);
my
@cases
=
qw(
boolean
JSON::PP
Types::Serialiser
Cpanel::JSON::XS
Mojo::JSON
JSON::Tiny
)
;
for
my
$c
(
@cases
) {
subtest
"class $c"
=>
sub
{
plan
skip_all
=>
"requires $c"
unless
eval
"require $c; 1"
;
my
$input
= [
true
=>
eval
"${c}::true()"
,
false
=>
eval
"${c}::false()"
,
];
my
$bson
=
_doc( BSON_BOOL . _ename(
"true"
) .
"\x01"
. BSON_BOOL . _ename(
"false"
) .
"\x00"
);
my
$output
= {
true
=> boolean::true,
false
=> boolean::false,
};
my
$encoded
=
$codec
->encode_one(
$input
, {} );
is_bin(
$encoded
,
$bson
,
"encode_one"
);
my
$decoded
=
$codec
->decode_one(
$encoded
, {} );
cmp_deeply(
$decoded
,
$output
,
"decode_one"
)
or diag
"GOT:"
, _hexdump( explain(
$decoded
) ),
"EXPECTED:"
,
_hexdump( explain(
$output
) );
}
}
done_testing;