Make sure all the XS methods die when called as a class method, and test for this
[gitmo/Class-MOP.git] / t / 080_meta_package.t
index 4a6f2f5..4a8b03e 100644 (file)
@@ -3,16 +3,20 @@
 use strict;
 use warnings;
 
-use Test::More tests => 92;
+use Test::More tests => 97;
 use Test::Exception;
 
-BEGIN {
-    use_ok('Class::MOP');        
-    use_ok('Class::MOP::Package');            
-}
+use Class::MOP;
+use Class::MOP::Package;
+
+
+dies_ok { Class::MOP::Package->get_all_package_symbols } q{... can't call get_all_package_symbols() as a class method};
+dies_ok { Class::MOP::Package->name } q{... can't call name() as a class method};
 
 {
     package Foo;
+
+    use constant SOME_CONSTANT => 1;
     
     sub meta { Class::MOP::Package->initialize('Foo') }
 }
@@ -22,6 +26,7 @@ BEGIN {
 
 ok(!defined($Foo::{foo}), '... the %foo slot has not been created yet');
 ok(!Foo->meta->has_package_symbol('%foo'), '... the meta agrees');
+ok(!defined($Foo::{foo}), '... checking doesn\' vivify');
 
 lives_ok {
     Foo->meta->add_package_symbol('%foo' => { one => 1 });
@@ -230,7 +235,6 @@ is(Foo->meta->get_package_symbol('@foo'), $ARRAY, '... got the right values for
 
 {
     my %syms = Foo->meta->get_all_package_symbols;
-
     is_deeply(
         [ sort keys %syms ],
         [ sort Foo->meta->list_all_package_symbols ],
@@ -252,6 +256,28 @@ is(Foo->meta->get_package_symbol('@foo'), $ARRAY, '... got the right values for
     } 
 }
 
+{
+    Foo->meta->add_package_symbol('%zork');
+
+    my %syms = Foo->meta->get_all_package_symbols('HASH');
+
+    is_deeply(
+        [ sort keys %syms ],
+        [ sort Foo->meta->list_all_package_symbols('HASH') ],
+        '... the fetched symbols are the same as the listed ones'
+    );
+
+    foreach my $symbol (keys %syms) {
+        is($syms{$symbol}, Foo->meta->get_package_symbol('%' . $symbol), '... got the right symbol');
+    }
+
+    no warnings 'once';
+    is_deeply(
+        \%syms,
+        { zork => \%Foo::zork },
+        "got the right ones",
+    );
+}
 # check some errors
 
 dies_ok {