use Test::Requires in tests
[gitmo/Moose.git] / t / 030_roles / 019_build.t
index 41fb2cf..faa5cbc 100644 (file)
@@ -2,18 +2,15 @@
 use strict;
 use warnings;
 use Test::More;
-use Test::Moose;
-BEGIN {
-    eval "use Test::Output;";
-    plan skip_all => "Test::Output is required for this test" if $@;
-}
+
+use Test::Requires {
+    'Test::Output' => '0.01', # skip all if not installed
+};
 
 # this test script ensures that my idiom of:
 # role: sub BUILD, after BUILD
 # continues to work to run code after object initialization, whether the class
 # has a BUILD method or not
-# note: as of moose 0.95, this idiom is no longer necessary ('after BUILD' on
-# its own is sufficient)  -doy
 
 my @CALLS;
 
@@ -42,7 +39,7 @@ do {
     use Moose;
 
     ::stderr_is {
-        with 'TestRole' => { excludes => 'BUILD' };
+        with 'TestRole' => { -excludes => 'BUILD' };
     } '';
 
     sub BUILD { push @CALLS, 'ExplicitClassWithBUILD::BUILD' }
@@ -54,35 +51,7 @@ do {
     with 'TestRole';
 };
 
-do {
-    package TestRoleWithoutBUILD;
-    use Moose::Role;
-
-    before BUILD => sub { push @CALLS, 'TestRoleWithoutBUILD::BUILD:before' };
-    after  BUILD => sub { push @CALLS, 'TestRoleWithoutBUILD::BUILD:after' };
-};
-
-do {
-    package AnotherClassWithBUILD;
-    use Moose;
-
-    ::stderr_is {
-        with 'TestRoleWithoutBUILD';
-    } '';
-
-    sub BUILD { push @CALLS, 'AnotherClassWithBUILD::BUILD' }
-};
-
-do {
-    package AnotherClassWithoutBUILD;
-    use Moose;
-
-    ::stderr_is {
-        with 'TestRoleWithoutBUILD';
-    } '';
-};
-
-with_immutable {
+{
     is_deeply([splice @CALLS], [], "no calls to BUILD yet");
 
     ClassWithBUILD->new;
@@ -101,21 +70,11 @@ with_immutable {
         'TestRole::BUILD:after',
     ]);
 
-    AnotherClassWithBUILD->new;
-
-    is_deeply([splice @CALLS], [
-        'TestRoleWithoutBUILD::BUILD:before',
-        'AnotherClassWithBUILD::BUILD',
-        'TestRoleWithoutBUILD::BUILD:after',
-    ]);
-
-    AnotherClassWithoutBUILD->new;
-
-    is_deeply([splice @CALLS], [
-        'TestRoleWithoutBUILD::BUILD:before',
-        'TestRoleWithoutBUILD::BUILD:after',
-    ]);
-} qw(ClassWithBUILD        ClassWithoutBUILD
-     AnotherClassWithBUILD AnotherClassWithoutBUILD);
+    if (ClassWithBUILD->meta->is_mutable) {
+        ClassWithBUILD->meta->make_immutable;
+        ClassWithoutBUILD->meta->make_immutable;
+        redo;
+    }
+}
 
 done_testing;