clean up ::Destructor
[gitmo/Moose.git] / t / 300_immutable / 001_immutable_moose.t
index f057976..48c0674 100644 (file)
@@ -3,32 +3,56 @@
 use strict;
 use warnings;
 
-use Test::More tests => 8;
-use Test::Exception;
+use Test::More;
+use Test::Fatal;
+
+use Moose::Meta::Role;
 
-BEGIN {
-    use_ok('Moose');
-    use_ok('Moose::Meta::Role');
-}
 
 {
-  package FooRole;
-  our $VERSION = '0.01';
-  sub foo { 'FooRole::foo' }
+    package FooRole;
+    our $VERSION = '0.01';
+    sub foo {'FooRole::foo'}
 }
 
 {
-  package Foo;
-  use Moose;
+    package Foo;
+    use Moose;
+
+    #two checks because the inlined methods are different when
+    #there is a TC present.
+    has 'foos' => ( is => 'ro', lazy_build => 1 );
+    has 'bars' => ( isa => 'Str', is => 'ro', lazy_build => 1 );
+    has 'bazes' => ( isa => 'Str', is => 'ro', builder => '_build_bazes' );
+    sub _build_foos  {"many foos"}
+    sub _build_bars  {"many bars"}
+    sub _build_bazes {"many bazes"}
 }
 
 {
-  my $foo_role = Moose::Meta::Role->initialize('FooRole');
-  my $meta = Foo->meta;
-  lives_ok{ $meta->make_immutable       } "Foo is imutable";
-  dies_ok{  $meta->add_role($foo_role)  } "Add Role is locked";
-  lives_ok{ $meta->make_mutable         } "Foo is mutable";
-  lives_ok{ $meta->add_role($foo_role)  } "Add Role is unlocked";
+    my $foo_role = Moose::Meta::Role->initialize('FooRole');
+    my $meta     = Foo->meta;
+
+    is( exception { Foo->new }, undef, "lazy_build works" );
+    is( Foo->new->foos, 'many foos',
+        "correct value for 'foos'  before inlining constructor" );
+    is( Foo->new->bars, 'many bars',
+        "correct value for 'bars'  before inlining constructor" );
+    is( Foo->new->bazes, 'many bazes',
+        "correct value for 'bazes' before inlining constructor" );
+    is( exception { $meta->make_immutable }, undef, "Foo is imutable" );
+    is( exception { $meta->identifier }, undef, "->identifier on metaclass lives" );
+    isnt( exception { $meta->add_role($foo_role) }, undef, "Add Role is locked" );
+    is( exception { Foo->new }, undef, "Inlined constructor works with lazy_build" );
+    is( Foo->new->foos, 'many foos',
+        "correct value for 'foos'  after inlining constructor" );
+    is( Foo->new->bars, 'many bars',
+        "correct value for 'bars'  after inlining constructor" );
+    is( Foo->new->bazes, 'many bazes',
+        "correct value for 'bazes' after inlining constructor" );
+    is( exception { $meta->make_mutable }, undef, "Foo is mutable" );
+    is( exception { $meta->add_role($foo_role) }, undef, "Add Role is unlocked" );
+
 }
 
 {
@@ -49,14 +73,14 @@ BEGIN {
   sub BUILD { 'baz' }
 }
 
-lives_ok { Bar->meta->make_immutable }
-  'Immutable meta with single BUILD';
+is( exception { Bar->meta->make_immutable }, undef, 'Immutable meta with single BUILD' );
 
-lives_ok { Baz->meta->make_immutable }
-  'Immutable meta with multiple BUILDs';
+is( exception { Baz->meta->make_immutable }, undef, 'Immutable meta with multiple BUILDs' );
 
 =pod
 
 Nothing here yet, but soon :)
 
 =cut
+
+done_testing;