1use strict;
2use warnings;
3use Test::More tests => 4;
4
5BEGIN {
6    $ENV{ PERL_JSON_BACKEND } = 0;
7}
8
9use JSON::PP;
10
11my $json = JSON::PP->new->convert_blessed;
12
13my $obj = OverloadedObject->new( 'foo' );
14ok( $obj eq 'foo' );
15is( $json->encode( [ $obj ] ), q{["foo"]} );
16
17# rt.cpan.org #64783
18my $foo  = bless {}, 'Foo';
19my $bar  = bless {}, 'Bar';
20
21eval q{ $json->encode( $foo ) };
22ok($@);
23eval q{ $json->encode( $bar ) };
24ok(!$@);
25
26
27package Foo;
28
29use strict;
30use warnings;
31use overload (
32    'eq' => sub { 0 },
33    '""' => sub { $_[0] },
34    fallback => 1,
35);
36
37sub TO_JSON {
38    return $_[0];
39}
40
41package Bar;
42
43use strict;
44use warnings;
45use overload (
46    'eq' => sub { 0 },
47    '""' => sub { $_[0] },
48    fallback => 1,
49);
50
51sub TO_JSON {
52    return overload::StrVal($_[0]);
53}
54
55
56package OverloadedObject;
57
58use overload 'eq' => sub { $_[0]->{v} eq $_[1] }, '""' => sub { $_[0]->{v} }, fallback => 1;
59
60
61sub new {
62    bless { v => $_[1] }, $_[0];
63}
64
65
66sub TO_JSON { "$_[0]"; }
67
68