integrate cfgperl changes#6293..6324 into mainline
[p5sagit/p5-mst-13.2.git] / t / op / method.t
index 0912f1e..6e25310 100755 (executable)
@@ -4,7 +4,12 @@
 # test method calls and autoloading.
 #
 
-print "1..46\n";
+BEGIN {
+    chdir 't' if -d 't';
+    unshift @INC, '../lib' if -d '../lib';
+}
+
+print "1..53\n";
 
 @A::ISA = 'B';
 @B::ISA = 'C';
@@ -155,3 +160,28 @@ test(A->eee(), "new B: In A::eee, 4");     # Which sticks
 
 # this test added due to bug discovery
 test(defined(@{"unknown_package::ISA"}) ? "defined" : "undefined", "undefined");
+
+# test that failed subroutine calls don't affect method calls
+{
+    package A1;
+    sub foo { "foo" }
+    package A2;
+    @ISA = 'A1';
+    package main;
+    test(A2->foo(), "foo");
+    test(do { eval 'A2::foo()'; $@ ? 1 : 0}, 1);
+    test(A2->foo(), "foo");
+}
+
+{
+    test(do { use Config; eval 'Config->foo()';
+             $@ =~ /^\QCan't locate object method "foo" via package "Config" at/ ? 1 : $@}, 1);
+    test(do { use Config; eval '$d = bless {}, "Config"; $d->foo()';
+             $@ =~ /^\QCan't locate object method "foo" via package "Config" at/ ? 1 : $@}, 1);
+}
+
+test(do { eval 'E->foo()';
+         $@ =~ /^\QCan't locate object method "foo" via package "E" (perhaps / ? 1 : $@}, 1);
+test(do { eval '$e = bless {}, "E"; $e->foo()';
+         $@ =~ /^\QCan't locate object method "foo" via package "E" (perhaps / ? 1 : $@}, 1);
+