xref: /openbsd-src/gnu/usr.bin/perl/cpan/JSON-PP/t/119_incr_parse_utf8.t (revision f2a19305cfc49ea4d1a5feb55cd6c283c6f1e031)
1*f2a19305Safresh1use strict;
2*f2a19305Safresh1use warnings;
3*f2a19305Safresh1use Test::More tests => 24;
4*f2a19305Safresh1
5*f2a19305Safresh1use utf8;
6*f2a19305Safresh1use JSON::PP;
7*f2a19305Safresh1use Encode;
8*f2a19305Safresh1use charnames qw< :full >;
9*f2a19305Safresh1
10*f2a19305Safresh1use vars qw< @vs >;
11*f2a19305Safresh1
12*f2a19305Safresh1############################################################
13*f2a19305Safresh1###  These first tests mimic the ones in `t/001_utf8.t`  ###
14*f2a19305Safresh1############################################################
15*f2a19305Safresh1
16*f2a19305Safresh1scalar eval { JSON::PP->new->allow_nonref (1)->utf8 (1)->incr_parse ('"ü"') };
17*f2a19305Safresh1like $@, qr/malformed UTF-8/;
18*f2a19305Safresh1
19*f2a19305Safresh1ok (JSON::PP->new->allow_nonref (1)->incr_parse ('"ü"') eq "ü");
20*f2a19305Safresh1ok (JSON::PP->new->allow_nonref (1)->incr_parse ('"\u00fc"') eq "ü");
21*f2a19305Safresh1ok (JSON::PP->new->allow_nonref (1)->incr_parse ('"\ud801\udc02' . "\x{10204}\"") eq "\x{10402}\x{10204}");
22*f2a19305Safresh1ok (JSON::PP->new->allow_nonref (1)->incr_parse ('"\"\n\\\\\r\t\f\b"') eq "\"\012\\\015\011\014\010");
23*f2a19305Safresh1
24*f2a19305Safresh1
25*f2a19305Safresh1my $JSON_TXT = <<JSON_TXT;
26*f2a19305Safresh1{ "a": "1" }
27*f2a19305Safresh1{ "b": "\N{BULLET}" }
28*f2a19305Safresh1{ "c": "3" }
29*f2a19305Safresh1JSON_TXT
30*f2a19305Safresh1
31*f2a19305Safresh1#######################
32*f2a19305Safresh1###  With '->utf8'  ###
33*f2a19305Safresh1#######################
34*f2a19305Safresh1
35*f2a19305Safresh1@vs = eval { JSON::PP->new->utf8->incr_parse( $JSON_TXT ) };
36*f2a19305Safresh1like $@, qr/Wide character in subroutine entry/;
37*f2a19305Safresh1
38*f2a19305Safresh1
39*f2a19305Safresh1@vs = eval { JSON::PP->new->utf8->incr_parse( encode 'UTF-8' => $JSON_TXT ) };
40*f2a19305Safresh1
41*f2a19305Safresh1ok( !$@ );
42*f2a19305Safresh1ok( scalar @vs == 3 );
43*f2a19305Safresh1
44*f2a19305Safresh1is_deeply( \@vs, [ { a => "1" }, { b => "\N{BULLET}" }, { c => "3" } ] );
45*f2a19305Safresh1is_deeply( $vs[0], { a => "1" } );
46*f2a19305Safresh1is_deeply( $vs[1], { b => "\N{BULLET}" } );
47*f2a19305Safresh1is_deeply( $vs[2], { c => "3" } );
48*f2a19305Safresh1
49*f2a19305Safresh1
50*f2a19305Safresh1# Double-Encoded => "You Get What You Ask For"
51*f2a19305Safresh1
52*f2a19305Safresh1@vs = eval { JSON::PP->new->utf8->incr_parse( encode 'UTF-8' => ( encode 'UTF-8' => $JSON_TXT ) ) };
53*f2a19305Safresh1
54*f2a19305Safresh1ok( !$@ );
55*f2a19305Safresh1ok( scalar @vs == 3 );
56*f2a19305Safresh1
57*f2a19305Safresh1is_deeply( \@vs, [ { a => "1" }, { b => "\x{E2}\x{80}\x{A2}" }, { c => "3" } ] );
58*f2a19305Safresh1is_deeply( $vs[0], { a => "1" } );
59*f2a19305Safresh1is_deeply( $vs[1], { b => "\x{E2}\x{80}\x{A2}" } );
60*f2a19305Safresh1is_deeply( $vs[2], { c => "3" } );
61*f2a19305Safresh1
62*f2a19305Safresh1
63*f2a19305Safresh1##########################
64*f2a19305Safresh1###  Without '->utf8'  ###
65*f2a19305Safresh1##########################
66*f2a19305Safresh1
67*f2a19305Safresh1@vs = eval { JSON::PP->new->incr_parse( $JSON_TXT ) };
68*f2a19305Safresh1
69*f2a19305Safresh1ok( !$@ );
70*f2a19305Safresh1ok( scalar @vs == 3 );
71*f2a19305Safresh1
72*f2a19305Safresh1is_deeply( \@vs, [ { a => "1" }, { b => "\N{BULLET}" }, { c => "3" } ] );
73*f2a19305Safresh1is_deeply( $vs[0], { a => "1" } );
74*f2a19305Safresh1is_deeply( $vs[1], { b => "\N{BULLET}" } );
75*f2a19305Safresh1is_deeply( $vs[2], { c => "3" } );
76