More fixes for requiring Test::Exception 0.27
[gitmo/Mouse.git] / lib / Mouse / Util.pm
index d30abf3..04c5ee4 100644 (file)
@@ -3,6 +3,7 @@ package Mouse::Util;
 use strict;
 use warnings;
 use base 'Exporter';
+use Carp;
 
 BEGIN {
     our %dependencies = (
@@ -121,9 +122,9 @@ BEGIN {
 #       ^^^^^   CODE TAKEN FROM MRO::COMPAT   ^^^^^
         },
 #       VVVVV   CODE TAKEN FROM TEST::EXCEPTION   VVVVV
-        'Test::Exception' => do {
+        'Test::Exception 0.27' => do {
 
-            my $Tester = Test::Builder->new;
+            my $Tester;
 
             my $is_exception = sub {
                 my $exception = shift;
@@ -154,6 +155,8 @@ BEGIN {
                         unless defined $description;
                     my $exception = $try_as_caller->($coderef);
 
+                    $Tester ||= Test::Builder->new;
+
                     my $regex = $Tester->maybe_regex( $expecting );
                     my $ok = $regex
                         ? ( $exception =~ m/$regex/ )
@@ -171,6 +174,9 @@ BEGIN {
                 'lives_ok' => sub (&;$) {
                     my ( $coderef, $description ) = @_;
                     my $exception = $try_as_caller->( $coderef );
+
+                    $Tester ||= Test::Builder->new;
+
                     my $ok = $Tester->ok( ! $is_exception->( $exception ), $description );
                     $Tester->diag( $exception_as_string->( "died:", $exception ) ) unless $ok;
                     $@ = $exception;
@@ -188,16 +194,18 @@ BEGIN {
         test => [qw/throws_ok lives_ok/],
     );
 
-    for my $module_name (keys %dependencies) {
+    for my $module (keys %dependencies) {
+        my ($module_name, $version) = split ' ', $module;
+
         my $loaded = do {
             local $SIG{__DIE__} = 'DEFAULT';
-            eval "require $module_name; 1";
+            eval "use $module (); 1";
         };
 
         $loaded{$module_name} = $loaded;
 
-        for my $method_name (keys %{ $dependencies{ $module_name } }) {
-            my $producer = $dependencies{$module_name}{$method_name};
+        for my $method_name (keys %{ $dependencies{ $module } }) {
+            my $producer = $dependencies{$module}{$method_name};
             my $implementation;
 
             if (ref($producer) eq 'HASH') {