Jasonify
view release on metacpan or search on metacpan
t/00-basic.t view on Meta::CPAN
cmp_ok( $true, '==', 11, 'true == 11' );
cmp_ok( $false, '==', \'', 'false == \""' );
cmp_ok( $true, '!=', \'', 'true != \""' );
cmp_ok( $false, '==', \0, 'false == \0' );
cmp_ok( $true, '!=', \0, 'true != \0' );
cmp_ok( $false, '!=', \1, 'false != \1' );
cmp_ok( $true, '==', \1, 'true == \1' );
cmp_ok( $false, '!=', \11, 'false != \11' );
cmp_ok( $true, '==', \11, 'true == \11' );
cmp_ok( $false, 'eq', '', 'false eq ""' );
cmp_ok( $true, 'ne', '', 'true ne ""' );
cmp_ok( $false, 'eq', 0, 'false eq 0' );
cmp_ok( $true, 'ne', 0, 'true ne 0' );
cmp_ok( $false, 'ne', 1, 'false ne 1' );
cmp_ok( $true, 'eq', 1, 'true eq 1' );
cmp_ok( $false, 'ne', 11, 'false ne 11' );
cmp_ok( $true, 'eq', 11, 'true eq 11' );
cmp_ok( $false, 'eq', \'', 'false eq \""' );
cmp_ok( $true, 'ne', \'', 'true ne \""' );
cmp_ok( $false, 'eq', \0, 'false eq \0' );
cmp_ok( $true, 'ne', \0, 'true ne \0' );
cmp_ok( $false, 'ne', \1, 'false ne \1' );
cmp_ok( $true, 'eq', \1, 'true eq \1' );
cmp_ok( $false, 'ne', \11, 'false ne \11' );
cmp_ok( $true, 'eq', \11, 'true eq \11' );
cmp_ok( $false, 'eq', undef, 'false eq undef' );
cmp_ok( $true, 'ne', undef, 'true ne undef' );
cmp_ok( $false, '==', undef, 'false == undef' );
cmp_ok( $true, '!=', undef, 'true != undef' );
is( Jasonify->encode($false), 'false', 'false encodes correctly' );
is( Jasonify->encode($true), 'true', 'true encodes correctly' );
is( Jasonify->encode(\''), 'false', '\"" encodes correctly' );
is( Jasonify->encode(\0), 'false', '\0 encodes correctly' );
is( Jasonify->encode(\1), 'true', '\1 encodes correctly' );
is( Jasonify->encode(\11), 'true', '\11 encodes correctly' );
# Verify numbers
my $int = 9_876_543_210;
my $num = 1_234_567_890.12_345_678_9;
my $numf = Jasonify::Number->formatted( '%.6f', $num );
my $inf = 9**9**9;
my $nan = $inf / $inf;
my $numstr = "$num";
my $numfstr = "1234567890.123457";
is( Jasonify->encode($int), '9876543210', ' int encodes correctly' );
is( Jasonify->encode($num), $numstr, ' num encodes correctly' );
is( Jasonify->encode( -$inf ), '"-Infinity"', '-inf encodes correctly' );
is( Jasonify->encode($inf), '"Infinity"', ' inf encodes correctly' );
is( Jasonify->encode($nan), '"NaN"', ' nan encodes correctly' );
is( Jasonify->encode($numf), $numfstr, 'formatted number encodes correctly' );
# Scalars
is( Jasonify->encode( undef ), 'null', 'scalar undef' );
is( Jasonify->encode( '' ), '""', 'scalar ""' );
is( Jasonify->encode( 0 ), '0', 'scalar 0' );
is( Jasonify->encode( 1 ), '1', 'scalar 1' );
# Scalar references
is( Jasonify->encode( \undef ), 'null', 'scalar reference \undef' );
is( Jasonify->encode( \'' ), 'false', 'scalar reference \""' );
is( Jasonify->encode( \0 ), 'false', 'scalar reference \0' );
is( Jasonify->encode( \1 ), 'true', 'scalar reference \1' );
# Verify arrays
is( Jasonify->encode( [] ), '[]', 'array encodes correctly' );
is( Jasonify->encode( [qw( A 1 )] ), '["A", 1]', 'array encodes correctly' );
my @array = ();
my @value = ();
push @array, [ undef, $false, $true, '', 0, 1 ];
push @value, '[null, false, true, "", 0, 1]';
is( Jasonify->encode($array[-1]), $value[-1], 'array of scalars' );
push @array, [ \undef, \$false, \$true, \'', \0, \1 ];
push @value, '[null, false, true, false, false, true]';
is( Jasonify->encode($array[-1]), $value[-1], 'array of scalar references' );
push @array, [ $int, $num, $numf, $inf, $nan ];
push @value,
qq![9876543210, $numstr, $numfstr, "Infinity", "NaN"]!;
is( Jasonify->encode($array[-1]), $value[-1],
'array of numbers encodes correctly' );
push @array, [ \$int, \$num, \$inf, \$nan ];
push @value, '[true, true, true, true]';
is( Jasonify->encode( $array[-1] ), $value[-1],
'array of number references encodes correctly' );
my $value = join( ', ', @value );
is( Jasonify->encode( \@array ), "[$value]",
'array of arrays encodes correctly' );
is( Jasonify->encode( [ (@array) x 2 ] ), "[$value, $value]",
'doubled array of arrays encodes correctly' );
is( Jasonify->encode( [ @array, \@array ] ), "[$value, [$value]]",
'doubled array of arrays encodes correctly' );
push @array, \@array;
is(
dies { Jasonify->encode( \@array ) },
sprintf(
"Recursive structures not allowed at [%d] at %s line %d.\n",
$#array,
__FILE__,
__LINE__ - 5
),
'nested array of arrays dies correctly'
);
# Verify hashes
is( Jasonify->encode( {} ), '{}', 'hash encodes correctly' );
is( Jasonify->encode( { A => 1 } ), '{"A" : 1}', 'hash encodes correctly' );
my %hash = ();
my %value = ();
$hash{first} = { map { $_ => $_ } $false, $true, '', 0, 1 };
$value{first} = '{"0" : 0, "1" : 1, "" : "", "false" : false, "true" : true}';
is( Jasonify->encode( $hash{first} ), $value{first}, 'hash of scalars' );
$hash{second} = { map { $_ => $_ } $int, $num, $numf };
$value{second} = join( '',
map { sprintf( '"%s" : %s, ', $_, $hash{second}{$_} ) }
sort { $a <=> $b }
keys %{ $hash{second} }
);
$hash{second}{$inf} = $inf;
$hash{second}{$nan} = $nan;
$value{second}
= '{'
. $value{second}
. '"Infinity" : "Infinity", '
. '"NaN" : "NaN"'
. '}';
is( Jasonify->encode( $hash{second} ), $value{second},
'hash of numbers encodes correctly' );
$hash{third} = { map { $_ => \$_ } $int, $num, $inf, $nan };
$value{third}
= '{'
. qq!"$numstr" : true, !
. '"9876543210" : true, '
. '"Infinity" : true, '
. '"NaN" : true'
. '}';
is( Jasonify->encode( $hash{third} ), $value{third},
'hash of number references encodes correctly' );
$hash{fourth} = {%hash};
$value{fourth} = '{'
. join( ', ',
map { sprintf( '"%s" : %s', $_, $value{$_} ) }
qw( first second third ) )
. '}';
is( Jasonify->encode( $hash{fourth} ), $value{fourth},
'hash of hashes encodes correctly' );
$hash{fifth} = \%hash;
is(
dies { Jasonify->encode( \%hash ) },
sprintf(
qq!Recursive structures not allowed at {"%s"} at %s line %d.\n!,
"fifth",
__FILE__,
__LINE__ - 5
),
'nested hash of hashes dies correctly'
);
# Unusual things
is( Jasonify->encode( substr( 'abcdef', 0, 3 ) ), '"abc"', 'lvalue' );
is( Jasonify->encode( qr/abc/ ), '"(?^:abc)"', 'regexp' );
is( Jasonify->encode( v97.98.99 ), '"\u0061\u0062\u0063"', 'vstring "abc"' );
is( Jasonify->encode( v48 ), '"\u0030"', 'vstring "0"' );
is( Jasonify->encode( sub {'abc'} ), 'null', 'code' );
is( Jasonify->encode( *STDIO{IO} ), 'null', 'io' );
# Unusual thing references
is( Jasonify->encode( \substr( 'abcdef', 0, 3 ) ), 'true', 'lvalue ref' );
is( Jasonify->encode( \qr/abc/ ), '"(?^:abc)"', 'regexp ref' );
is( Jasonify->encode( \v97.98.99 ), 'true', 'vstring ref "abc"' );
is( Jasonify->encode( \v48 ), 'false', 'vstring ref "0"' );
is( Jasonify->encode( \sub {'abc'} ), 'null', 'code ref' );
is( Jasonify->encode( \*STDIO{IO} ), 'null', 'io ref' );
# The Jasonify object
my $jasonify = do {
no warnings 'qw';
join(' ', qw(
{"-infinite" : "-Infinity",
"_cache_hit" : 1,
"array_ref" : "[$_]",
"beautify" : null,
"code" : "null",
"dereference" : "$referent$place",
"encode2" :
{"0" : "\\\\u0000",
"1" : "\\\\u0001",
"2" : "\\\\u0002",
"3" : "\\\\u0003",
"4" : "\\\\u0004",
"5" : "\\\\u0005",
t/00-basic.t view on Meta::CPAN
"25" : "\\\\u0019",
"26" : "\\\\u001a",
"27" : "\\\\u001b",
"28" : "\\\\u001c",
"29" : "\\\\u001d",
"30" : "\\\\u001e",
"31" : "\\\\u001f",
"34" : "\\\\\\"",
"92" : "\\\\\\\\",
"127" : "\\\\u007f",
"128" : "\\\\u0080",
"129" : "\\\\u0081",
"130" : "\\\\u0082",
"131" : "\\\\u0083",
"132" : "\\\\u0084",
"133" : "\\\\u0085",
"134" : "\\\\u0086",
"135" : "\\\\u0087",
"136" : "\\\\u0088",
"137" : "\\\\u0089",
"138" : "\\\\u008a",
"139" : "\\\\u008b",
"140" : "\\\\u008c",
"141" : "\\\\u008d",
"142" : "\\\\u008e",
"143" : "\\\\u008f",
"144" : "\\\\u0090",
"145" : "\\\\u0091",
"146" : "\\\\u0092",
"147" : "\\\\u0093",
"148" : "\\\\u0094",
"149" : "\\\\u0095",
"150" : "\\\\u0096",
"151" : "\\\\u0097",
"152" : "\\\\u0098",
"153" : "\\\\u0099",
"154" : "\\\\u009a",
"155" : "\\\\u009b",
"156" : "\\\\u009c",
"157" : "\\\\u009d",
"158" : "\\\\u009e",
"159" : "\\\\u009f",
"8232" : "\\\\u2028",
"8233" : "\\\\u2029",
"byte" : "\\\\u00%02x",
"utf" : 16,
"wide" : "\\\\u%04x"},
"false" : "false",
"format" : "null",
"hash_ref" : "{$_}",
"infinite" : "Infinity",
"io" : "null",
"json_method" : "TO_JSON",
"keyfilter" : null,
"keyfilterdefault" : 1,
"keymap" : null,
"keysort" : null,
"list_sep" : ", ",
"longstr" : -1,
"lvalue" : "$lvalue",
"nonnumber" : "NaN",
"null" : "null",
"object" : "$data",
"overloads" : ["\"\"", "0+"],
"pair" : "$key : $value",
"quote" : "\"",
"quote2" : "\"",
"reference" : "$_",
"tag" : null,
"tag_method" : "FREEZE",
"true" : "true",
"vformat" : "\"\\\\u%0*v4x\"",
"vsep" : "\\\\u"}
))
};
my $jason;
isa_ok( $jason = Jasonify->new(), 'Jasonify' );
is( Jasonify->encode($jason), '{}',
'simple Jasonify object encodes correctly' );
isa_ok( $jason = Jasonify->new( Jasonify->get ), 'Jasonify' );
is( Jasonify->encode($jason), $jasonify,
'compelete Jasonify object encodes correctly' );
### End of File ###
( run in 0.802 second using v1.01-cache-2.11-cpan-39bf76dae61 )