got rid of all the use_ok junk except for 000_load.t
[gitmo/Class-MOP.git] / t / 017_add_method_modifier.t
index fde84a2..079d921 100644 (file)
@@ -3,12 +3,10 @@
 use strict;
 use warnings;
 
-use Test::More no_plan => 53;
+use Test::More tests => 19;
 use Test::Exception;
 
-BEGIN {
-    use_ok('Class::MOP');
-}
+use Class::MOP;
 
 {
     package BankAccount;
@@ -19,17 +17,16 @@ BEGIN {
         
     use Carp 'confess';
     
-    BankAccount->meta->add_attribute('$:balance' => (
+    BankAccount->meta->add_attribute('balance' => (
         accessor => 'balance',
                init_arg => 'balance',
         default  => 0
     ));
     
     sub new { (shift)->meta->new_object(@_) }
-    
+
     sub deposit {
         my ($self, $amount) = @_;
-               #warn "deposited $amount in $self";
         $self->balance($self->balance + $amount);
     }
     
@@ -38,7 +35,6 @@ BEGIN {
         my $current_balance = $self->balance();
         ($current_balance >= $amount)
             || confess "Account overdrawn";
-               #warn "withdrew $amount from $self";
         $self->balance($current_balance - $amount);
     }
 
@@ -46,27 +42,27 @@ BEGIN {
        
        use strict;
        use warnings;
-       
+    use metaclass;     
+
        use base 'BankAccount';
        
-    CheckingAccount->meta->add_attribute('$:overdraft_account' => (
+    CheckingAccount->meta->add_attribute('overdraft_account' => (
         accessor => 'overdraft_account',
                init_arg => 'overdraft',
     ));        
 
        CheckingAccount->meta->add_before_method_modifier('withdraw' => sub {
                my ($self, $amount) = @_;
-               #warn "hello from before";
                my $overdraft_amount = $amount - $self->balance();
                if ($overdraft_amount > 0) {
-                       #warn "overdrawn $overdraft_amount";
                        $self->overdraft_account->withdraw($overdraft_amount);
                        $self->deposit($overdraft_amount);
                }
-               #warn "balance after overdraft : " . $self->balance;            
        });
 
        ::ok(CheckingAccount->meta->has_method('withdraw'), '... checking account now has a withdraw method');
+       ::isa_ok(CheckingAccount->meta->get_method('withdraw'), 'Class::MOP::Method::Wrapped');
+       ::isa_ok(BankAccount->meta->get_method('withdraw'), 'Class::MOP::Method');              
 }
 
 
@@ -78,6 +74,10 @@ lives_ok {
        $savings_account->withdraw(50);
 } '... withdrew from savings successfully';
 is($savings_account->balance, 200, '... got the right savings balance after withdrawl');
+dies_ok {
+       $savings_account->withdraw(250);
+} '... could not withdraw from savings successfully';
+
 
 $savings_account->deposit(150);
 is($savings_account->balance, 350, '... got the right savings balance after deposit');
@@ -94,9 +94,14 @@ is($checking_account->overdraft_account, $savings_account, '... got the right ov
 is($checking_account->balance, 100, '... got the right checkings balance');
 
 lives_ok {
-       $checking_account->withdraw(200);
+       $checking_account->withdraw(50);
 } '... withdrew from checking successfully';
+is($checking_account->balance, 50, '... got the right checkings balance after withdrawl');
+is($savings_account->balance, 350, '... got the right savings balance after checking withdrawl (no overdraft)');
 
+lives_ok {
+       $checking_account->withdraw(200);
+} '... withdrew from checking successfully';
 is($checking_account->balance, 0, '... got the right checkings balance after withdrawl');
-is($savings_account->balance, 250, '... got the right savings balance after overdraft withdrawl');
+is($savings_account->balance, 200, '... got the right savings balance after overdraft withdrawl');