start sketching out an overload api for the mop
[gitmo/Moose.git] / t / metaclasses / overloading.t
1 #!/usr/bin/env perl
2 use strict;
3 use warnings;
4 use Test::More;
5
6 {
7     package Foo;
8     use Moose;
9 }
10
11 {
12     is_deeply([Foo->meta->get_overload_list], []);
13     is_deeply([Foo->meta->get_overloaded_ops], []);
14 }
15
16 my $plus;
17 my $plus_impl;
18 BEGIN { $plus_impl = sub { $plus = 1; $_[0] + $_[1] } }
19 {
20     package Foo::Overloaded;
21     use Moose;
22     use overload '+' => $plus_impl;
23 }
24
25 {
26     is_deeply([Foo::Overloaded->meta->get_overloaded_ops], ['+']);
27     my @overloads = Foo::Overloaded->meta->get_overload_list;
28     is(scalar(@overloads), 1);
29     my $plus_meth = $overloads[0];
30     isa_ok($plus_meth, 'Class::MOP::Method::Overload');
31     is($plus_meth->op, '+');
32     is($plus_meth->name, '(+');
33     is($plus_meth->body, $plus_impl);
34     is($plus_meth->package_name, 'Foo::Overloaded');
35     is($plus_meth->associated_metaclass, Foo::Overloaded->meta);
36 }
37
38 done_testing;