File: 20_unknown.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 (106 lines) | stat: -rwxr-xr-x 3,868 bytes parent folder | download
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/usr/bin/perl -w
use strict;
use Test::More;
BEGIN {
  # allow_unknown method added to JSON::PP in 2.09
  eval 'use JSON::PP 2.09 (); 1'
    or plan skip_all => 'JSON::PP 2.09 required for cross testing';
  $ENV{PERL_JSON_BACKEND} = 'JSON::PP';
}
use constant HAVE_BOOLEANS => ($^V ge v5.36);
plan tests => 32;
use JSON::PP ();
use Cpanel::JSON::XS ();

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

eval q| $json->encode( [ sub {} ] ) |;
ok( $@ =~ /encountered CODE/, $@ );

eval q|  $json->encode( [ \-1 ] ) |;
ok( $@ =~ /cannot encode reference to scalar/, $@ );

eval q|  $json->encode( [ \undef ] ) |;
ok( $@ =~ /cannot encode reference to scalar/, $@ );

eval q|  $json->encode( [ \{} ] ) |;
ok( $@ =~ /cannot encode reference to scalar/, $@ );

# 46
eval q| $json->encode( {false => \""} ) |;
ok( $@ =~ /cannot encode reference to scalar/, $@ );
eval q| $json->encode( {false => \!!""} ) |;
ok( $@ =~ /cannot encode reference to scalar/, $@ );
eval q| $pp->encode( {false => \""} ) |;
ok( $@ =~ /cannot encode reference to scalar/, $@ );
eval q| $pp->encode( {false => \!!""} ) |;
ok( $@ =~ /cannot encode reference to scalar/, $@ );

$json->allow_unknown;
$pp->allow_unknown;

is( $json->encode( [ sub {} ] ), '[null]' );
is( $json->encode( [ \-1 ] ),    '[null]' );
is( $json->encode( [ \undef ] ), '[null]' );
is( $json->encode( [ \{} ] ),    '[null]' );

# 46
is( $pp->encode( {null => \"some"} ),   '{"null":null}',   'pp unknown' );
is( $pp->encode( {null => \""} ),       '{"null":null}',   'pp unknown' );
# valid special yes/no values even without nonref
my $e = $pp->encode( {true => !!1} ); # pp is a bit inconsistent
if (JSON::PP->can('CORE_BOOL') && JSON::PP::CORE_BOOL()) {  # native bool
  is( $pp->encode( {true => !!1} ),       '{"true":true}',   'pp sv_yes' );
  is( $pp->encode( {false => !!0} ),      '{"false":false}', 'pp sv_no' );
  is( $pp->encode( {false => !!""} ),     '{"false":false}', 'pp sv_no' );
} else {
  ok( ($e eq '{"true":"1"}') || ($e eq '{"true":1}'),        'pp sv_yes' );
  is( $pp->encode( {false => !!0} ),      '{"false":""}',    'pp sv_no' );
  is( $pp->encode( {false => !!""} ),     '{"false":""}',    'pp sv_no' );
}
is( $pp->encode( {true => \!!1} ),      '{"true":true}',   'pp \sv_yes');
is( $pp->encode( {false => \!!0} ),     '{"false":null}',  'pp \sv_no' );
is( $pp->encode( {false => \!!""} ),    '{"false":null}',  'pp \sv_no' );

is( $json->encode( {null => \"some"} ), '{"null":null}',   'js unknown' );
is( $json->encode( {null => \""} ),     '{"null":null}',   'js unknown' );
if(HAVE_BOOLEANS) {
   is( $json->encode( {true => !!1} ),     '{"true":true}',   'js sv_yes' );
   is( $json->encode( {false => !!0} ),    '{"false":false}', 'js sv_no' );
   is( $json->encode( {false => !!""} ),   '{"false":false}', 'js sv_no' );
}
else {
   is( $json->encode( {true => !!1} ),     '{"true":1}',      'js sv_yes' );
   is( $json->encode( {false => !!0} ),    '{"false":""}',    'js sv_no' );
   is( $json->encode( {false => !!""} ),   '{"false":""}',    'js sv_no' );
}
is( $json->encode( {true => \!!1} ),    '{"true":true}',   'js \sv_yes' );
is( $json->encode( {false => \!!0} ),   '{"false":null}',  'js \sv_no' );
is( $json->encode( {false => \!!""} ),  '{"false":null}',  'js \sv_no' );

SKIP: {

  skip "this test is for Perl 5.8 or later", 4 if $] < 5.008;

$pp->allow_unknown(0);
$json->allow_unknown(0);

my $fh;
open( $fh, '>hoge.txt' ) or die $!;
END { unlink('hoge.txt'); }

eval q| $pp->encode( [ $fh ] ) |; # upstream changed due to this JSON::XS bug
ok( $@ =~ /(encountered GLOB|cannot encode reference to scalar)/, "pp ".$@ );
eval q| $json->encode( [ $fh ] ) |;
ok( $@ =~ /encountered GLOB/, "js ".$@ );

$pp->allow_unknown(1);
$json->allow_unknown(1);

is( $pp->encode  ( [ $fh ] ),    '[null]' );
is( $json->encode( [ $fh ] ),    '[null]' );

close $fh;

} # skip 5.6