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