Merge 'trunk' into 'Class-C3-PurePerl'
[gitmo/Class-C3.git] / t / 24_more_overload.t
diff --git a/t/24_more_overload.t b/t/24_more_overload.t
new file mode 100644 (file)
index 0000000..d02c8de
--- /dev/null
@@ -0,0 +1,67 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 4;
+
+BEGIN {
+    use_ok('Class::C3');
+}
+
+{
+    package BaseTest;
+    use Class::C3;
+    sub new { bless {} => shift }    
+    
+    package OverloadingTest;
+    use Class::C3;
+    use base 'BaseTest';        
+    use overload '+'  => sub { die "called plus operator in OT" },
+                 fallback => 0;
+    
+    package InheritingFromOverloadedTest;
+    use base 'OverloadingTest';
+    use Class::C3;
+    use overload '+'  => sub { die "called plus operator in IFOT" },
+                 fallback => 1;
+
+    package IFOTX;
+    use Class::C3;
+    use base 'OverloadingTest';
+
+    package IFIFOT;
+    use Class::C3;
+    use base 'InheritingFromOverloadedTest';
+
+    package Foo;
+    use Class::C3;
+    use base 'BaseTest';
+    use overload '+'  => sub { die "called plus operator in Foo" },
+                 fallback => 1;
+
+    package Bar;
+    use Class::C3;
+    use base 'Foo';
+    use overload '+'  => sub { die "called plus operator in Bar" },
+                 fallback => 0;
+
+    package Baz;
+    use Class::C3;
+    use base 'Bar';
+}
+
+Class::C3::initialize();
+
+my $x = IFOTX->new();
+eval { $x += 1 };
+like($@, qr/no method found,/);
+
+my $y = IFIFOT->new();
+eval { $y += 1 };
+like($@, qr/called plus operator in IFOT/);
+
+my $z = Baz->new();
+eval { $z += 1 };
+like($@, qr/no method found,/);
+