Commit | Line | Data |
7483b81c |
1 | #!/usr/bin/perl -w |
ccbd73a4 |
2 | # $Id: /mirror/googlecode/test-more/t/overload.t 57943 2008-08-18T02:09:22.275428Z brooklyn.kid51 $ |
30e302f8 |
3 | |
4 | BEGIN { |
5 | if( $ENV{PERL_CORE} ) { |
6 | chdir 't'; |
7 | @INC = ('../lib', 'lib'); |
8 | } |
9 | else { |
10 | unshift @INC, 't/lib'; |
11 | } |
12 | } |
30e302f8 |
13 | |
7483b81c |
14 | use strict; |
30e302f8 |
15 | use Test::More; |
16 | |
17 | BEGIN { |
18 | if( !eval "require overload" ) { |
19 | plan skip_all => "needs overload.pm"; |
20 | } |
21 | else { |
b1ddf169 |
22 | plan tests => 13; |
30e302f8 |
23 | } |
24 | } |
25 | |
26 | |
27 | package Overloaded; |
28 | |
29 | use overload |
7483b81c |
30 | q{""} => sub { $_[0]->{string} }, |
b1ddf169 |
31 | q{0+} => sub { $_[0]->{num} }; |
30e302f8 |
32 | |
33 | sub new { |
34 | my $class = shift; |
7483b81c |
35 | bless { string => shift, num => shift }, $class; |
30e302f8 |
36 | } |
37 | |
38 | |
39 | package main; |
40 | |
c00d8759 |
41 | local $SIG{__DIE__} = sub { |
42 | my($call_file, $call_line) = (caller)[1,2]; |
43 | fail("SIGDIE accidentally called"); |
44 | diag("From $call_file at $call_line"); |
45 | }; |
46 | |
7483b81c |
47 | my $obj = Overloaded->new('foo', 42); |
48 | isa_ok $obj, 'Overloaded'; |
30e302f8 |
49 | |
7483b81c |
50 | is $obj, 'foo', 'is() with string overloading'; |
51 | cmp_ok $obj, 'eq', 'foo', 'cmp_ok() ...'; |
b1ddf169 |
52 | cmp_ok $obj, '==', 42, 'cmp_ok() with number overloading'; |
30e302f8 |
53 | |
7483b81c |
54 | is_deeply [$obj], ['foo'], 'is_deeply with string overloading'; |
55 | ok eq_array([$obj], ['foo']), 'eq_array ...'; |
56 | ok eq_hash({foo => $obj}, {foo => 'foo'}), 'eq_hash ...'; |
b1ddf169 |
57 | |
58 | # rt.cpan.org 13506 |
59 | is_deeply $obj, 'foo', 'is_deeply with string overloading at the top'; |
60 | |
61 | Test::More->builder->is_num($obj, 42); |
62 | Test::More->builder->is_eq ($obj, "foo"); |
63 | |
64 | |
65 | { |
66 | # rt.cpan.org 14675 |
67 | package TestPackage; |
68 | use overload q{""} => sub { ::fail("This should not be called") }; |
69 | |
70 | package Foo; |
71 | ::is_deeply(['TestPackage'], ['TestPackage']); |
72 | ::is_deeply({'TestPackage' => 'TestPackage'}, |
73 | {'TestPackage' => 'TestPackage'}); |
74 | ::is_deeply('TestPackage', 'TestPackage'); |
75 | } |