Remove use_ok tests
[gitmo/Class-MOP.git] / t / 031_method_modifiers.t
CommitLineData
de19f115 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
e5698763 6use Test::More tests => 24;
de19f115 7use Test::Exception;
8
e5698763 9use Class::MOP;
10use Class::MOP::Method;
de19f115 11
855d2774 12# test before and afters
13{
14 my $trace = '';
de19f115 15
b38f3848 16 my $method = Class::MOP::Method->wrap(
5caf45ce 17 body => sub { $trace .= 'primary' },
b38f3848 18 package_name => 'main',
19 name => '__ANON__',
20 );
855d2774 21 isa_ok($method, 'Class::MOP::Method');
de19f115 22
855d2774 23 $method->();
24 is($trace, 'primary', '... got the right return value from method');
25 $trace = '';
de19f115 26
ddc8edba 27 my $wrapped = Class::MOP::Method::Wrapped->wrap($method);
28 isa_ok($wrapped, 'Class::MOP::Method::Wrapped');
855d2774 29 isa_ok($wrapped, 'Class::MOP::Method');
30
31 $wrapped->();
32 is($trace, 'primary', '... got the right return value from the wrapped method');
33 $trace = '';
34
35 lives_ok {
36 $wrapped->add_before_modifier(sub { $trace .= 'before -> ' });
37 } '... added the before modifier okay';
38
39 $wrapped->();
40 is($trace, 'before -> primary', '... got the right return value from the wrapped method (w/ before)');
41 $trace = '';
42
43 lives_ok {
44 $wrapped->add_after_modifier(sub { $trace .= ' -> after' });
45 } '... added the after modifier okay';
46
47 $wrapped->();
48 is($trace, 'before -> primary -> after', '... got the right return value from the wrapped method (w/ before)');
49 $trace = '';
50}
51
52# test around method
53{
b38f3848 54 my $method = Class::MOP::Method->wrap(
55 sub { 4 },
56 package_name => 'main',
57 name => '__ANON__',
58 );
855d2774 59 isa_ok($method, 'Class::MOP::Method');
60
61 is($method->(), 4, '... got the right value from the wrapped method');
62
ddc8edba 63 my $wrapped = Class::MOP::Method::Wrapped->wrap($method);
64 isa_ok($wrapped, 'Class::MOP::Method::Wrapped');
855d2774 65 isa_ok($wrapped, 'Class::MOP::Method');
66
67 is($wrapped->(), 4, '... got the right value from the wrapped method');
68
69 lives_ok {
70 $wrapped->add_around_modifier(sub { (3, $_[0]->()) });
71 $wrapped->add_around_modifier(sub { (2, $_[0]->()) });
72 $wrapped->add_around_modifier(sub { (1, $_[0]->()) });
8768d570 73 $wrapped->add_around_modifier(sub { (0, $_[0]->()) });
855d2774 74 } '... added the around modifier okay';
75
76 is_deeply(
77 [ $wrapped->() ],
8768d570 78 [ 0, 1, 2, 3, 4 ],
79 '... got the right results back from the around methods (in list context)');
80
81 is(scalar $wrapped->(), 4, '... got the right results back from the around methods (in scalar context)');
855d2774 82}
de19f115 83
ee5e71d4 84{
85 my @tracelog;
86
b38f3848 87 my $method = Class::MOP::Method->wrap(
88 sub { push @tracelog => 'primary' },
89 package_name => 'main',
90 name => '__ANON__',
91 );
ee5e71d4 92 isa_ok($method, 'Class::MOP::Method');
93
ddc8edba 94 my $wrapped = Class::MOP::Method::Wrapped->wrap($method);
95 isa_ok($wrapped, 'Class::MOP::Method::Wrapped');
ee5e71d4 96 isa_ok($wrapped, 'Class::MOP::Method');
97
98 lives_ok {
99 $wrapped->add_before_modifier(sub { push @tracelog => 'before 1' });
100 $wrapped->add_before_modifier(sub { push @tracelog => 'before 2' });
101 $wrapped->add_before_modifier(sub { push @tracelog => 'before 3' });
102 } '... added the before modifier okay';
103
104 lives_ok {
96ceced8 105 $wrapped->add_around_modifier(sub { push @tracelog => 'around 1'; $_[0]->(); });
ee5e71d4 106 $wrapped->add_around_modifier(sub { push @tracelog => 'around 2'; $_[0]->(); });
96ceced8 107 $wrapped->add_around_modifier(sub { push @tracelog => 'around 3'; $_[0]->(); });
ee5e71d4 108 } '... added the around modifier okay';
109
110 lives_ok {
96ceced8 111 $wrapped->add_after_modifier(sub { push @tracelog => 'after 1' });
ee5e71d4 112 $wrapped->add_after_modifier(sub { push @tracelog => 'after 2' });
96ceced8 113 $wrapped->add_after_modifier(sub { push @tracelog => 'after 3' });
ee5e71d4 114 } '... added the after modifier okay';
115
116 $wrapped->();
117 is_deeply(
118 \@tracelog,
119 [
120 'before 3', 'before 2', 'before 1', # last-in-first-out order
96ceced8 121 'around 3', 'around 2', 'around 1', # last-in-first-out order
ee5e71d4 122 'primary',
96ceced8 123 'after 1', 'after 2', 'after 3', # first-in-first-out order
ee5e71d4 124 ],
125 '... got the right tracelog from all our before/around/after methods');
126}
de19f115 127
de19f115 128
de19f115 129