Redo conversion to Test::Fatal
[gitmo/Class-MOP.git] / t / 031_method_modifiers.t
index 200b045..cb7078d 100644 (file)
@@ -1,10 +1,8 @@
-#!/usr/bin/perl
-
 use strict;
 use warnings;
 
-use Test::More tests => 24;
-use Test::Exception;
+use Test::More;
+use Test::Fatal;
 
 use Class::MOP;
 use Class::MOP::Method;
@@ -33,10 +31,9 @@ use Class::MOP::Method;
         '... got the right return value from the wrapped method' );
     $trace = '';
 
-    lives_ok {
+    is( exception {
         $wrapped->add_before_modifier( sub { $trace .= 'before -> ' } );
-    }
-    '... added the before modifier okay';
+    }, undef, '... added the before modifier okay' );
 
     $wrapped->();
     is( $trace, 'before -> primary',
@@ -44,10 +41,9 @@ use Class::MOP::Method;
     );
     $trace = '';
 
-    lives_ok {
+    is( exception {
         $wrapped->add_after_modifier( sub { $trace .= ' -> after' } );
-    }
-    '... added the after modifier okay';
+    }, undef, '... added the after modifier okay' );
 
     $wrapped->();
     is( $trace, 'before -> primary -> after',
@@ -73,13 +69,12 @@ use Class::MOP::Method;
 
     is( $wrapped->(), 4, '... got the right value from the wrapped method' );
 
-    lives_ok {
+    is( exception {
         $wrapped->add_around_modifier( sub { ( 3, $_[0]->() ) } );
         $wrapped->add_around_modifier( sub { ( 2, $_[0]->() ) } );
         $wrapped->add_around_modifier( sub { ( 1, $_[0]->() ) } );
         $wrapped->add_around_modifier( sub { ( 0, $_[0]->() ) } );
-    }
-    '... added the around modifier okay';
+    }, undef, '... added the around modifier okay' );
 
     is_deeply(
         [ $wrapped->() ],
@@ -106,29 +101,26 @@ use Class::MOP::Method;
     isa_ok( $wrapped, 'Class::MOP::Method::Wrapped' );
     isa_ok( $wrapped, 'Class::MOP::Method' );
 
-    lives_ok {
+    is( exception {
         $wrapped->add_before_modifier( sub { push @tracelog => 'before 1' } );
         $wrapped->add_before_modifier( sub { push @tracelog => 'before 2' } );
         $wrapped->add_before_modifier( sub { push @tracelog => 'before 3' } );
-    }
-    '... added the before modifier okay';
+    }, undef, '... added the before modifier okay' );
 
-    lives_ok {
+    is( exception {
         $wrapped->add_around_modifier(
             sub { push @tracelog => 'around 1'; $_[0]->(); } );
         $wrapped->add_around_modifier(
             sub { push @tracelog => 'around 2'; $_[0]->(); } );
         $wrapped->add_around_modifier(
             sub { push @tracelog => 'around 3'; $_[0]->(); } );
-    }
-    '... added the around modifier okay';
+    }, undef, '... added the around modifier okay' );
 
-    lives_ok {
+    is( exception {
         $wrapped->add_after_modifier( sub { push @tracelog => 'after 1' } );
         $wrapped->add_after_modifier( sub { push @tracelog => 'after 2' } );
         $wrapped->add_after_modifier( sub { push @tracelog => 'after 3' } );
-    }
-    '... added the after modifier okay';
+    }, undef, '... added the after modifier okay' );
 
     $wrapped->();
     is_deeply(
@@ -143,3 +135,69 @@ use Class::MOP::Method;
     );
 }
 
+# test introspection
+{
+    sub before1 {
+    }
+
+    sub before2 {
+    }
+
+    sub before3 {
+    }
+
+    sub after1 {
+    }
+
+    sub after2 {
+    }
+
+    sub after3 {
+    }
+
+    sub around1 {
+    }
+
+    sub around2 {
+    }
+
+    sub around3 {
+    }
+
+    sub orig {
+    }
+
+    my $method = Class::MOP::Method->wrap(
+        body         => \&orig,
+        package_name => 'main',
+        name         => '__ANON__',
+    );
+
+    my $wrapped = Class::MOP::Method::Wrapped->wrap($method);
+
+    $wrapped->add_before_modifier($_)
+        for \&before1, \&before2, \&before3;
+
+    $wrapped->add_after_modifier($_)
+        for \&after1, \&after2, \&after3;
+
+    $wrapped->add_around_modifier($_)
+        for \&around1, \&around2, \&around3;
+
+    is( $wrapped->get_original_method, $method,
+        'check get_original_method' );
+
+    is_deeply( [ $wrapped->before_modifiers ],
+               [ \&before3, \&before2, \&before1 ],
+               'check before_modifiers' );
+
+    is_deeply( [ $wrapped->after_modifiers ],
+               [ \&after1, \&after2, \&after3 ],
+               'check after_modifiers' );
+
+    is_deeply( [ $wrapped->around_modifiers ],
+               [ \&around3, \&around2, \&around1 ],
+               'check around_modifiers' );
+}
+
+done_testing;