]> git.vpit.fr Git - perl/modules/Variable-Magic.git/blobdiff - t/35-stash.t
A better t/01-import.t
[perl/modules/Variable-Magic.git] / t / 35-stash.t
index dc66fa6fc154040fb8989c1e707643832bb7cad5..93bd62c2824c7f2eed9c284bcb85a80f6d8c22bf 100644 (file)
@@ -9,7 +9,7 @@ use Variable::Magic qw/wizard cast dispell VMG_UVAR VMG_OP_INFO_NAME VMG_OP_INFO
 
 my $run;
 if (VMG_UVAR) {
- plan tests => 23;
+ plan tests => 41;
  $run = 1;
 } else {
  plan skip_all => 'uvar magic is required to test symbol table hooks';
@@ -42,17 +42,17 @@ cast %Hlagh::, $wiz;
  eval q{
   die "ok\n";
   package Hlagh;
-  our $a;
+  our $thing;
   {
    package NotHlagh;
-   our $x = @Hlagh::b;
+   our $what = @Hlagh::stuff;
   }
  };
 
  is $@, "ok\n", 'stash: variables compiled fine';
  is_deeply \%mg, {
-  fetch => [ qw/a b/ ],
-  store => [ qw/a b/ ],
+  fetch => [ qw/thing stuff/ ],
+  store => [ qw/thing stuff/ ],
  }, 'stash: variables';
 }
 
@@ -106,6 +106,28 @@ cast %Hlagh::, $wiz;
  }, 'stash: valid method call';
 }
 
+{
+ local %mg;
+
+ eval q{ Hlagh->shoot() };
+
+ is $@, '', 'stash: second valid method call ran fine';
+ is_deeply \%mg, {
+  fetch => [ qw/shoot/ ],
+ }, 'stash: second valid method call';
+}
+
+{
+ local %mg;
+
+ eval q{ my $meth = 'shoot'; Hlagh->$meth() };
+
+ is $@, '', 'stash: valid dynamic method call ran fine';
+ is_deeply \%mg, {
+  store => [ qw/shoot/ ],
+ }, 'stash: valid dynamic method call';
+}
+
 {
  local %mg;
 
@@ -113,13 +135,42 @@ cast %Hlagh::, $wiz;
   package Hlagher;
   our @ISA;
   BEGIN { @ISA = 'Hlagh' }
-  Hlagher->shoot()
+  Hlagher->leave()
  ];
 
  is $@, '', 'inherited valid method call ran fine';
  is_deeply \%mg, {
-  fetch => [ qw/ISA shoot/ ],
- }, 'stash: direct method call';
+  fetch => [ qw/ISA leave/ ],
+ }, 'stash: inherited valid method call';
+}
+
+{
+ local %mg;
+
+ eval q{ Hlagher->leave() };
+
+ is $@, '', 'second inherited valid method call ran fine';
+ is_deeply \%mg, { }, 'stash: second inherited valid method call doesn\'t call magic';
+}
+
+{
+ local %mg;
+
+ eval q{ Hlagher->shoot() };
+
+ is $@, '', 'inherited previously called valid method call ran fine';
+ is_deeply \%mg, {
+  fetch => [ qw/shoot/ ],
+ }, 'stash: inherited previously called valid method call';
+}
+
+{
+ local %mg;
+
+ eval q{ Hlagher->shoot() };
+
+ is $@, '', 'second inherited previously called valid method call ran fine';
+ is_deeply \%mg, { }, 'stash: second inherited previously called valid method call doesn\'t call magic';
 }
 
 {
@@ -134,6 +185,17 @@ cast %Hlagh::, $wiz;
  }, 'stash: invalid method call';
 }
 
+{
+ local %mg;
+
+ eval q{ my $meth = 'unknown_too'; Hlagh->$meth() };
+
+ like $@, qr/^Can't locate object method "unknown_too" via package "Hlagh"/, 'stash: invalid dynamic method call croaked';
+ is_deeply \%mg, {
+  store => [ qw/unknown_too AUTOLOAD/ ],
+ }, 'stash: invalid dynamic method call';
+}
+
 {
  local %mg;
 
@@ -169,6 +231,53 @@ END {
 
 dispell %Hlagh::, $wiz;
 
+{
+ package AutoHlagh;
+
+ use vars qw/$AUTOLOAD/;
+
+ sub AUTOLOAD { return $AUTOLOAD }
+}
+
+cast %AutoHlagh::, $wiz;
+
+{
+ local %mg;
+
+ my $res = eval q{ AutoHlagh->autoloaded() };
+
+ is $@,   '',          'stash: autoloaded method call ran fine';
+ is $res, 'AutoHlagh::autoloaded',
+                       'stash: autoloaded method call returned the right thing';
+ is_deeply \%mg, {
+  fetch => [ qw/autoloaded/ ],
+  store => [ qw/autoloaded AUTOLOAD AUTOLOAD/ ],
+ }, 'stash: autoloaded method call';
+}
+
+{
+ package AutoHlagher;
+
+ our @ISA;
+ BEGIN { @ISA = ('AutoHlagh') }
+}
+
+{
+ local %mg;
+
+ my $res = eval q{ AutoHlagher->also_autoloaded() };
+
+ is $@,   '',     'stash: inherited autoloaded method call ran fine';
+ is $res, 'AutoHlagher::also_autoloaded',
+                  'stash: inherited autoloaded method returned the right thing';
+ is_deeply \%mg, {
+  fetch => [ qw/also_autoloaded AUTOLOAD/ ],
+  store => [ qw/AUTOLOAD/ ],
+ }, 'stash: inherited autoloaded method call';
+}
+
+dispell %AutoHlagh::, $wiz;
+
 $code = 'wizard '
         . join (', ', map { <<CB;
 $_ => sub {