new overload fallback fixes, matches the behavior of normal overload and overload...
[gitmo/Class-C3.git] / t / 24_more_overload.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 4;
7
8 BEGIN {
9     use_ok('Class::C3');
10 }
11
12 {
13     package BaseTest;
14     use Class::C3;
15     sub new { bless {} => shift }    
16     
17     package OverloadingTest;
18     use Class::C3;
19     use base 'BaseTest';        
20     use overload '+'  => sub { die "called plus operator in OT" },
21                  fallback => 0;
22     
23     package InheritingFromOverloadedTest;
24     use base 'OverloadingTest';
25     use Class::C3;
26     use overload '+'  => sub { die "called plus operator in IFOT" },
27                  fallback => 1;
28
29     package IFOTX;
30     use Class::C3;
31     use base 'OverloadingTest';
32
33     package IFIFOT;
34     use Class::C3;
35     use base 'InheritingFromOverloadedTest';
36
37     package Foo;
38     use Class::C3;
39     use base 'BaseTest';
40     use overload '+'  => sub { die "called plus operator in Foo" },
41                  fallback => 1;
42
43     package Bar;
44     use Class::C3;
45     use base 'Foo';
46     use overload '+'  => sub { die "called plus operator in Bar" },
47                  fallback => 0;
48
49     package Baz;
50     use Class::C3;
51     use base 'Bar';
52 }
53
54 Class::C3::initialize();
55
56 my $x = IFOTX->new();
57 eval { $x += 1 };
58 like($@, qr/no method found,/);
59
60 my $y = IFIFOT->new();
61 eval { $y += 1 };
62 like($@, qr/called plus operator in IFOT/);
63
64 my $z = Baz->new();
65 eval { $z += 1 };
66 like($@, qr/no method found,/);
67