BEGIN {
plan
skip_all
=>
'no support for core boolean options'
unless
JSON::PP->can(
'CORE_BOOL'
);
}
plan
tests
=> 24;
my
$json
= JSON::PP->new;
is
$json
->get_core_bools, !!0,
'core_bools initially false'
;
$json
->boolean_values(!!0, !!1);
SKIP: {
skip
"core_bools option doesn't register as true for core bools without core boolean support"
, 1
unless
JSON::PP::CORE_BOOL;
is
$json
->get_core_bools, !!1,
'core_bools true when setting bools to core bools'
;
}
$json
->boolean_values(!!1, !!0);
is
$json
->get_core_bools, !!0,
'core_bools false when setting bools to anything other than correct core bools'
;
my
$ret
=
$json
->core_bools;
is
$ret
,
$json
,
"returns the same object"
;
my
(
$new_false
,
$new_true
) =
$json
->get_boolean_values;
is
$json
->get_core_bools, !!1,
'core_bools true when setting core_bools'
;
ok
defined
$new_true
,
"core true value is defined"
;
ok
defined
$new_false
,
"core false value is defined"
;
ok !
ref
$new_true
,
"core true value is not blessed"
;
ok !
ref
$new_false
,
"core falase value is not blessed"
;
{
my
@warnings
;
local
$SIG
{__WARN__} =
sub
{
push
@warnings
,
@_
;
warn
@_
;
};
cmp_ok
$new_true
,
'eq'
,
'1'
,
'core true value is "1"'
;
cmp_ok
$new_true
,
'=='
, 1,
'core true value is 1'
;
cmp_ok
$new_false
,
'eq'
,
''
,
'core false value is ""'
;
cmp_ok
$new_false
,
'=='
, 0,
'core false value is 0'
;
is
scalar
@warnings
, 0,
'no warnings'
;
}
SKIP: {
skip
"core boolean support needed to detect core booleans"
, 4
unless
JSON::PP::CORE_BOOL;
BEGIN { JSON::PP::CORE_BOOL and warnings->unimport(
qw(experimental::builtin)
) }
ok JSON::PP::is_bool(
$new_true
),
'core true is a boolean'
;
ok JSON::PP::is_bool(
$new_false
),
'core false is a boolean'
;
ok builtin::is_bool(
$new_true
),
'core true is a core boolean'
;
ok builtin::is_bool(
$new_false
),
'core false is a core boolean'
;
}
my
$should_true
=
$json
->allow_nonref(1)->decode(
'true'
);
my
$should_false
=
$json
->allow_nonref(1)->decode(
'false'
);
ok !
ref
$should_true
&&
$should_true
,
"JSON true turns into an unblessed true value"
;
ok !
ref
$should_false
&& !
$should_false
,
"JSON false turns into an unblessed false value"
;
SKIP: {
skip
"core boolean support needed to detect core booleans"
, 4
unless
JSON::PP::CORE_BOOL;
ok JSON::PP::is_bool(
$should_true
),
'decoded true is a boolean'
;
ok JSON::PP::is_bool(
$should_false
),
'decoded false is a boolean'
;
ok JSON::PP::is_bool(
$should_true
),
'decoded true is a core boolean'
;
ok JSON::PP::is_bool(
$should_false
),
'decoded false is a core boolean'
;
}