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