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 a300af9..4a8b03e 100644 (file)
@@ -3,16 +3,20 @@
 use strict;
 use warnings;
 
-use Test::More tests => 88;
+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 });
@@ -226,7 +231,53 @@ is(Foo->meta->get_package_symbol('@foo'), $ARRAY, '... got the right values for
     ok(defined(*{"Foo::foo"}{ARRAY}), '... the @foo slot has NOT been removed');    
 }
 
+# get_all_package_symbols
+
+{
+    my %syms = Foo->meta->get_all_package_symbols;
+    is_deeply(
+        [ sort keys %syms ],
+        [ sort Foo->meta->list_all_package_symbols ],
+        '... the fetched symbols are the same as the listed ones'
+    ); 
+}
+
+{
+    my %syms = Foo->meta->get_all_package_symbols('CODE');
 
+    is_deeply(
+        [ sort keys %syms ],
+        [ sort Foo->meta->list_all_package_symbols('CODE') ],
+        '... 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');
+    } 
+}
+
+{
+    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 {