Merge branch 'stable'
[gitmo/Class-MOP.git] / t / 086_rebless_instance_away.t
CommitLineData
b2579597 1#!/usr/bin/env perl
2use strict;
3use warnings;
86a4d873 4use Test::More;
b2579597 5use Class::MOP;
6
7my @calls;
8
9do {
10 package My::Meta::Class;
11 use base 'Class::MOP::Class';
12
13 sub rebless_instance_away {
14 push @calls, [@_];
15 shift->SUPER::rebless_instance_away(@_);
16 }
17};
18
19do {
20 package Parent;
21 use metaclass 'My::Meta::Class';
22
23 package Child;
24 use metaclass 'My::Meta::Class';
25 use base 'Parent';
26};
27
28my $person = Parent->meta->new_object;
29Child->meta->rebless_instance($person);
30
31is(@calls, 1, "one call to rebless_instance_away");
32is($calls[0][0]->name, 'Parent', 'rebless_instance_away is called on the old metaclass');
33is($calls[0][1], $person, 'with the instance');
34is($calls[0][2]->name, 'Child', 'and the new metaclass');
35splice @calls;
36
37Child->meta->rebless_instance($person, foo => 1);
38is($calls[0][0]->name, 'Child');
39is($calls[0][1], $person);
40is($calls[0][2]->name, 'Child');
41is($calls[0][3], 'foo');
42is($calls[0][4], 1);
43splice @calls;
44
86a4d873 45done_testing;