File: 108_decode.t

package info (click to toggle)
libcpanel-json-xs-perl 4.39-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,872 kB
  • sloc: perl: 1,165; makefile: 8
file content (54 lines) | stat: -rw-r--r-- 1,561 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#
# decode on Perl 5.005, 5.6, 5.8 or later
#
use strict;
use Test::More tests => 11;

use Cpanel::JSON::XS;
use lib qw(t);
use _unicode_handling;
no utf8;

my $json = Cpanel::JSON::XS->new->allow_nonref;

SKIP: {
  skip "5.6", 1 if $] < 5.008;
  is($json->decode(q|"ü"|),                   "ü"); # utf8
}
is($json->decode(q|"\u00fc"|),           "\xfc"); # latin1
is($json->decode(q|"\u00c3\u00bc"|), "\xc3\xbc"); # utf8

my $str = 'あ'; # Japanese 'a' in utf8
is($json->decode(q|"\u00e3\u0081\u0082"|), $str);
utf8::decode($str) if $] > 5.007; # usually UTF-8 flagged on, but no-op for 5.005.

is($json->decode(q|"\u3042"|), $str);

my $utf8 = $json->decode(q|"\ud808\udf45"|); # chr 12345
utf8::encode($utf8) if $] > 5.007; # UTf-8 flaged off
is($utf8, "\xf0\x92\x8d\x85");

# GH#50 decode >SHORT_STRING_LEN (16384) broken with 3.0206
my $bytes = encode_json(["a" x 32768]);
my $decode = eval { decode_json($bytes); };

ok(!$@, "can decode big string $@");
is_deeply $decode, ["a" x 32768], "successful roundtrip"

  or do {
    my $fh;
    open $fh, '>', 'encode.json' or die $!;
    #END { unlink('encode.json'); }
    print $fh $bytes;
    close $fh;
    open  $fh, '>', 'decode.jxt' or die $!;
    #END { unlink('decode.txt'); }
    print $fh decode_json($bytes);
    close $fh;
  };

$decode = eval { decode_json("true", 0) };
like($@, qr/^JSON text must be an object or array/, 'treat decode_json 0 as not allow_nonref');
$decode = eval { decode_json("true", 1) };
ok(!$@, "treat decode_json 1 as allow_nonref");
is($decode, 1, "decode true as 1");