Blame t/113_overloaded_eq.t
|
Packit |
a557cb |
use strict;
|
|
Packit |
a557cb |
use Test::More tests => 4;
|
|
Packit |
a557cb |
|
|
Packit |
a557cb |
BEGIN {
|
|
Packit |
a557cb |
$ENV{ PERL_JSON_BACKEND } = 0;
|
|
Packit |
a557cb |
}
|
|
Packit |
a557cb |
|
|
Packit |
a557cb |
BEGIN { $ENV{PERL_JSON_BACKEND} ||= "JSON::backportPP"; }
|
|
Packit |
a557cb |
|
|
Packit |
a557cb |
use JSON;
|
|
Packit |
a557cb |
|
|
Packit |
a557cb |
my $json = JSON->new->convert_blessed;
|
|
Packit |
a557cb |
|
|
Packit |
a557cb |
my $obj = OverloadedObject->new( 'foo' );
|
|
Packit |
a557cb |
ok( $obj eq 'foo' );
|
|
Packit |
a557cb |
is( $json->encode( [ $obj ] ), q{["foo"]} );
|
|
Packit |
a557cb |
|
|
Packit |
a557cb |
# rt.cpan.org #64783
|
|
Packit |
a557cb |
my $foo = bless {}, 'Foo';
|
|
Packit |
a557cb |
my $bar = bless {}, 'Bar';
|
|
Packit |
a557cb |
|
|
Packit |
a557cb |
eval q{ $json->encode( $foo ) };
|
|
Packit |
a557cb |
ok($@);
|
|
Packit |
a557cb |
eval q{ $json->encode( $bar ) };
|
|
Packit |
a557cb |
ok(!$@);
|
|
Packit |
a557cb |
|
|
Packit |
a557cb |
|
|
Packit |
a557cb |
package Foo;
|
|
Packit |
a557cb |
|
|
Packit |
a557cb |
use strict;
|
|
Packit |
a557cb |
use overload (
|
|
Packit |
a557cb |
'eq' => sub { 0 },
|
|
Packit |
a557cb |
'""' => sub { $_[0] },
|
|
Packit |
a557cb |
fallback => 1,
|
|
Packit |
a557cb |
);
|
|
Packit |
a557cb |
|
|
Packit |
a557cb |
sub TO_JSON {
|
|
Packit |
a557cb |
return $_[0];
|
|
Packit |
a557cb |
}
|
|
Packit |
a557cb |
|
|
Packit |
a557cb |
package Bar;
|
|
Packit |
a557cb |
|
|
Packit |
a557cb |
use strict;
|
|
Packit |
a557cb |
use overload (
|
|
Packit |
a557cb |
'eq' => sub { 0 },
|
|
Packit |
a557cb |
'""' => sub { $_[0] },
|
|
Packit |
a557cb |
fallback => 1,
|
|
Packit |
a557cb |
);
|
|
Packit |
a557cb |
|
|
Packit |
a557cb |
sub TO_JSON {
|
|
Packit |
a557cb |
return overload::StrVal($_[0]);
|
|
Packit |
a557cb |
}
|
|
Packit |
a557cb |
|
|
Packit |
a557cb |
|
|
Packit |
a557cb |
package OverloadedObject;
|
|
Packit |
a557cb |
|
|
Packit |
a557cb |
use overload 'eq' => sub { $_[0]->{v} eq $_[1] }, '""' => sub { $_[0]->{v} }, fallback => 1;
|
|
Packit |
a557cb |
|
|
Packit |
a557cb |
|
|
Packit |
a557cb |
sub new {
|
|
Packit |
a557cb |
bless { v => $_[1] }, $_[0];
|
|
Packit |
a557cb |
}
|
|
Packit |
a557cb |
|
|
Packit |
a557cb |
|
|
Packit |
a557cb |
sub TO_JSON { "$_[0]"; }
|
|
Packit |
a557cb |
|