Change 31719 by [EMAIL PROTECTED] on 2007/08/15 10:05:31

        Test update to demonstrate @ISA assignment bug:
        
        Subject: Optimized magic_setisa has bug
        From: Rick Delaney <[EMAIL PROTECTED]>
        Date: Tue, 14 Aug 2007 01:45:17 -0400
        Message-Id: <[EMAIL PROTECTED]>

Affected files ...

... //depot/perl/t/mro/basic.t#8 edit

Differences ...

==== //depot/perl/t/mro/basic.t#8 (text) ====
Index: perl/t/mro/basic.t
--- perl/t/mro/basic.t#7~31502~ 2007-06-29 02:00:32.000000000 -0700
+++ perl/t/mro/basic.t  2007-08-15 03:05:31.000000000 -0700
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-require q(./test.pl); plan(tests => 21);
+require q(./test.pl); plan(tests => 29);
 
 {
     package MRO_A;
@@ -146,4 +146,39 @@
     # undef the array itself
     undef @ISACLEAR::ISA;
     ok(eq_array(mro::get_linear_isa('ISACLEAR'),[qw/ISACLEAR/]));
+
+    # Now, clear more than one package's @ISA at once
+    {
+        package ISACLEAR1;
+        our @ISA = qw/WW XX/;
+
+        package ISACLEAR2;
+        our @ISA = qw/YY ZZ/;
+    }
+    # baseline
+    ok(eq_array(mro::get_linear_isa('ISACLEAR1'),[qw/ISACLEAR1 WW XX/]));
+    ok(eq_array(mro::get_linear_isa('ISACLEAR2'),[qw/ISACLEAR2 YY ZZ/]));
+    (@ISACLEAR1::ISA, @ISACLEAR2::ISA) = ();
+
+    {
+        local our $TODO = 1;
+        ok(eq_array(mro::get_linear_isa('ISACLEAR1'),[qw/ISACLEAR1/]));
+    }
+    ok(eq_array(mro::get_linear_isa('ISACLEAR2'),[qw/ISACLEAR2/]));
+}
+
+# Check that recursion bails out "cleanly" in a variety of cases
+# (as opposed to say, bombing the interpreter or something)
+{
+    my @recurse_codes = (
+        '@MRO_R1::ISA = "MRO_R2"; @MRO_R2::ISA = "MRO_R1";',
+        '@MRO_R3::ISA = "MRO_R4"; push(@MRO_R4::ISA, "MRO_R3");',
+        '@MRO_R5::ISA = "MRO_R6"; @MRO_R6::ISA = qw/XX MRO_R5 YY/;',
+        '@MRO_R7::ISA = "MRO_R8"; push(@MRO_R8::ISA, qw/XX MRO_R7 YY/)',
+    );
+    foreach my $code (@recurse_codes) {
+        eval $code;
+        ok($@ =~ /Recursive inheritance detected/);
+    }
 }
+
End of Patch.

Reply via email to