got rid of all the use_ok junk except for 000_load.t
[gitmo/Class-MOP.git] / t / 021_attribute_errors_and_edge_cases.t
index 1b8c514..aad2a34 100644 (file)
@@ -3,25 +3,89 @@
 use strict;
 use warnings;
 
-use Test::More tests => 20;
+use Test::More tests => 27;
 use Test::Exception;
 
-BEGIN {
-    use_ok('Class::MOP');
-    use_ok('Class::MOP::Attribute');
+BEGIN {use Class::MOP;use Class::MOP::Attribute;
 }
 
+# most values are static
 
 {
-    my $regexp = qr/hello (.*)/;
-    my $attr = Class::MOP::Attribute->new('$test' => (
-        default => $regexp
-    ));    
-    
-    ok($attr->has_default, '... we have a default value');
-    is($attr->default, $regexp, '... and got the value we expected');
+    dies_ok {
+        Class::MOP::Attribute->new('$test' => (
+            default => qr/hello (.*)/
+        ));
+    } '... no refs for defaults';
+
+    dies_ok {
+        Class::MOP::Attribute->new('$test' => (
+            default => []
+        ));
+    } '... no refs for defaults';
+
+    dies_ok {
+        Class::MOP::Attribute->new('$test' => (
+            default => {}
+        ));
+    } '... no refs for defaults';
+
+
+    dies_ok {
+        Class::MOP::Attribute->new('$test' => (
+            default => \(my $var)
+        ));
+    } '... no refs for defaults';
+
+    dies_ok {
+        Class::MOP::Attribute->new('$test' => (
+            default => bless {} => 'Foo'
+        ));
+    } '... no refs for defaults';
+
 }
 
+{
+    dies_ok {
+        Class::MOP::Attribute->new('$test' => (
+            builder => qr/hello (.*)/
+        ));
+    } '... no refs for builders';
+
+    dies_ok {
+        Class::MOP::Attribute->new('$test' => (
+            builder => []
+        ));
+    } '... no refs for builders';
+
+    dies_ok {
+        Class::MOP::Attribute->new('$test' => (
+            builder => {}
+        ));
+    } '... no refs for builders';
+
+
+    dies_ok {
+        Class::MOP::Attribute->new('$test' => (
+            builder => \(my $var)
+        ));
+    } '... no refs for builders';
+
+    dies_ok {
+        Class::MOP::Attribute->new('$test' => (
+            builder => bless {} => 'Foo'
+        ));
+    } '... no refs for builders';
+
+    dies_ok {
+        Class::MOP::Attribute->new('$test' => (
+            builder => 'Foo', default => 'Foo'
+        ));
+    } '... no default AND builder';
+
+}
+
+
 { # bad construtor args
     dies_ok {
         Class::MOP::Attribute->new();
@@ -37,30 +101,30 @@ BEGIN {
 }
 
 {
-    my $attr = Class::MOP::Attribute->new('$test');    
+    my $attr = Class::MOP::Attribute->new('$test');
     dies_ok {
         $attr->attach_to_class();
     } '... attach_to_class died as expected';
-    
+
     dies_ok {
         $attr->attach_to_class('Fail');
-    } '... attach_to_class died as expected';    
-    
+    } '... attach_to_class died as expected';
+
     dies_ok {
         $attr->attach_to_class(bless {} => 'Fail');
-    } '... attach_to_class died as expected';    
+    } '... attach_to_class died as expected';
 }
 
 {
     my $attr = Class::MOP::Attribute->new('$test' => (
         reader => [ 'whoops, this wont work' ]
     ));
-    
+
     $attr->attach_to_class(Class::MOP::Class->initialize('Foo'));
 
     dies_ok {
         $attr->install_accessors;
-    } '... bad reader format';  
+    } '... bad reader format';
 }
 
 {
@@ -82,38 +146,38 @@ BEGIN {
     my $attr = My::Attribute->new('$test' => (
         reader => 'test'
     ));
-    
+
     dies_ok {
         $attr->install_accessors;
-    } '... failed to generate accessors correctly';    
+    } '... failed to generate accessors correctly';
 }
 
 {
     my $attr = Class::MOP::Attribute->new('$test' => (
         predicate => 'has_test'
     ));
-    
-    my $Bar = Class::MOP::Class->create('Bar' => '0.01');
+
+    my $Bar = Class::MOP::Class->create('Bar');
     isa_ok($Bar, 'Class::MOP::Class');
-    
+
     $Bar->add_attribute($attr);
-    
+
     can_ok('Bar', 'has_test');
-    
-    is($attr, $Bar->remove_attribute('$test'), '... removed the $test attribute');    
-    
-    ok(!Bar->can('has_test'), '... Bar no longer has the "has_test" method');    
+
+    is($attr, $Bar->remove_attribute('$test'), '... removed the $test attribute');
+
+    ok(!Bar->can('has_test'), '... Bar no longer has the "has_test" method');
 }
 
 
 {
     # NOTE:
-    # the next three tests once tested that 
-    # the code would fail, but we lifted the 
-    # restriction so you can have an accessor 
-    # along with a reader/writer pair (I mean 
-    # why not really). So now they test that 
-    # it works, which is kinda silly, but it 
+    # the next three tests once tested that
+    # the code would fail, but we lifted the
+    # restriction so you can have an accessor
+    # along with a reader/writer pair (I mean
+    # why not really). So now they test that
+    # it works, which is kinda silly, but it
     # tests the API change, so I keep it.
 
     lives_ok {
@@ -133,7 +197,7 @@ BEGIN {
     lives_ok {
         Class::MOP::Attribute->new('$foo', (
             accessor => 'foo',
-            reader   => 'get_foo',        
+            reader   => 'get_foo',
             writer   => 'set_foo',
         ));
     } '... can create accessors with reader/writers';