bump version and update Changes
[gitmo/Class-MOP.git] / t / 080_meta_package.t
index 547ddda..a82ff27 100644 (file)
@@ -1,18 +1,20 @@
-#!/usr/bin/perl
-
 use strict;
 use warnings;
 
-use Test::More tests => 80;
+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 +24,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 });
@@ -185,7 +188,7 @@ is(Foo->meta->get_package_symbol('$foo'), $SCALAR, '... got the right value for
     ok(!defined(*{"Foo::foo"}{HASH}), '... the %foo slot has been removed successfully');
     ok(defined(*{"Foo::foo"}{ARRAY}), '... the @foo slot has NOT been removed');   
     ok(defined(*{"Foo::foo"}{CODE}), '... the &foo slot has NOT been removed');   
-    ok(defined(*{"Foo::foo"}{SCALAR}), '... the $foo slot has NOT been removed');            
+    ok(defined(${"Foo::foo"}), '... the $foo slot has NOT been removed');            
 }
 
 lives_ok {
@@ -205,10 +208,74 @@ is(Foo->meta->get_package_symbol('$foo'), $SCALAR, '... got the right value for
     ok(!defined(*{"Foo::foo"}{HASH}), '... the %foo slot has been removed successfully');    
     ok(!defined(*{"Foo::foo"}{CODE}), '... the &foo slot has now been removed');       
     ok(defined(*{"Foo::foo"}{ARRAY}), '... the @foo slot has NOT been removed');   
-    ok(defined(*{"Foo::foo"}{SCALAR}), '... the $foo slot has NOT been removed');            
+    ok(defined(${"Foo::foo"}), '... the $foo slot has NOT been removed');            
 }
 
+lives_ok {
+    Foo->meta->remove_package_symbol('$foo');
+} '... removed $Foo::foo successfully';
+
+ok(!Foo->meta->has_package_symbol('$foo'), '... the $foo slot no longer exists');
 
+ok(Foo->meta->has_package_symbol('@foo'), '... the @foo slot still exists');
+
+is(Foo->meta->get_package_symbol('@foo'), $ARRAY, '... got the right values for @Foo::foo');
+
+{
+    no strict 'refs';
+    ok(!defined(*{"Foo::foo"}{HASH}), '... the %foo slot has been removed successfully');    
+    ok(!defined(*{"Foo::foo"}{CODE}), '... the &foo slot has now been removed');   
+    ok(!defined(${"Foo::foo"}), '... the $foo slot has now been removed');                           
+    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 {