add stubs for BUILD and DEMOLISH to Moose::Object
[gitmo/Moose.git] / t / 030_roles / 019_build.t
index 1dfc912..41fb2cf 100644 (file)
@@ -2,6 +2,7 @@
 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 $@;
@@ -11,6 +12,8 @@ BEGIN {
 # 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;
 
@@ -51,7 +54,35 @@ 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;
@@ -70,11 +101,21 @@ do {
         'TestRole::BUILD:after',
     ]);
 
-    if (ClassWithBUILD->meta->is_mutable) {
-        ClassWithBUILD->meta->make_immutable;
-        ClassWithoutBUILD->meta->make_immutable;
-        redo;
-    }
-}
+    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);
 
 done_testing;