This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[Merge] Constants, inlined subs, TARGs, ...
[perl5.git] / cpan / JSON-PP / t / 113_overloaded_eq.t
CommitLineData
d5424315
DG
1#!/usr/bin/perl
2
3use strict;
05bd2440 4use Test::More tests => 4;
d5424315
DG
5
6BEGIN {
7 $ENV{ PERL_JSON_BACKEND } = 0;
8}
9
10use JSON::PP;
11
05bd2440 12my $json = JSON::PP->new->convert_blessed;
d5424315 13
05bd2440 14my $obj = OverloadedObject->new( 'foo' );
d5424315 15ok( $obj eq 'foo' );
05bd2440 16is( $json->encode( [ $obj ] ), q{["foo"]} );
d5424315 17
05bd2440
CBW
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(!$@);
d5424315 26
d5424315 27
05bd2440
CBW
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}
d5424315
DG
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