| 1 | #!./perl
|
|---|
| 2 |
|
|---|
| 3 | #
|
|---|
| 4 | # test method calls and autoloading.
|
|---|
| 5 | #
|
|---|
| 6 |
|
|---|
| 7 | BEGIN {
|
|---|
| 8 | chdir 't' if -d 't';
|
|---|
| 9 | @INC = qw(. ../lib);
|
|---|
| 10 | require "test.pl";
|
|---|
| 11 | }
|
|---|
| 12 |
|
|---|
| 13 | print "1..78\n";
|
|---|
| 14 |
|
|---|
| 15 | @A::ISA = 'B';
|
|---|
| 16 | @B::ISA = 'C';
|
|---|
| 17 |
|
|---|
| 18 | sub C::d {"C::d"}
|
|---|
| 19 | sub D::d {"D::d"}
|
|---|
| 20 |
|
|---|
| 21 | # First, some basic checks of method-calling syntax:
|
|---|
| 22 | $obj = bless [], "Pack";
|
|---|
| 23 | sub Pack::method { shift; join(",", "method", @_) }
|
|---|
| 24 | $mname = "method";
|
|---|
| 25 |
|
|---|
| 26 | is(Pack->method("a","b","c"), "method,a,b,c");
|
|---|
| 27 | is(Pack->$mname("a","b","c"), "method,a,b,c");
|
|---|
| 28 | is(method Pack ("a","b","c"), "method,a,b,c");
|
|---|
| 29 | is((method Pack "a","b","c"), "method,a,b,c");
|
|---|
| 30 |
|
|---|
| 31 | is(Pack->method(), "method");
|
|---|
| 32 | is(Pack->$mname(), "method");
|
|---|
| 33 | is(method Pack (), "method");
|
|---|
| 34 | is(Pack->method, "method");
|
|---|
| 35 | is(Pack->$mname, "method");
|
|---|
| 36 | is(method Pack, "method");
|
|---|
| 37 |
|
|---|
| 38 | is($obj->method("a","b","c"), "method,a,b,c");
|
|---|
| 39 | is($obj->$mname("a","b","c"), "method,a,b,c");
|
|---|
| 40 | is((method $obj ("a","b","c")), "method,a,b,c");
|
|---|
| 41 | is((method $obj "a","b","c"), "method,a,b,c");
|
|---|
| 42 |
|
|---|
| 43 | is($obj->method(0), "method,0");
|
|---|
| 44 | is($obj->method(1), "method,1");
|
|---|
| 45 |
|
|---|
| 46 | is($obj->method(), "method");
|
|---|
| 47 | is($obj->$mname(), "method");
|
|---|
| 48 | is((method $obj ()), "method");
|
|---|
| 49 | is($obj->method, "method");
|
|---|
| 50 | is($obj->$mname, "method");
|
|---|
| 51 | is(method $obj, "method");
|
|---|
| 52 |
|
|---|
| 53 | is( A->d, "C::d"); # Update hash table;
|
|---|
| 54 |
|
|---|
| 55 | *B::d = \&D::d; # Import now.
|
|---|
| 56 | is(A->d, "D::d"); # Update hash table;
|
|---|
| 57 |
|
|---|
| 58 | {
|
|---|
| 59 | local @A::ISA = qw(C); # Update hash table with split() assignment
|
|---|
| 60 | is(A->d, "C::d");
|
|---|
| 61 | $#A::ISA = -1;
|
|---|
| 62 | is(eval { A->d } || "fail", "fail");
|
|---|
| 63 | }
|
|---|
| 64 | is(A->d, "D::d");
|
|---|
| 65 |
|
|---|
| 66 | {
|
|---|
| 67 | local *B::d;
|
|---|
| 68 | eval 'sub B::d {"B::d1"}'; # Import now.
|
|---|
| 69 | is(A->d, "B::d1"); # Update hash table;
|
|---|
| 70 | undef &B::d;
|
|---|
| 71 | is((eval { A->d }, ($@ =~ /Undefined subroutine/)), 1);
|
|---|
| 72 | }
|
|---|
| 73 |
|
|---|
| 74 | is(A->d, "D::d"); # Back to previous state
|
|---|
| 75 |
|
|---|
| 76 | eval 'sub B::d {"B::d2"}'; # Import now.
|
|---|
|
|---|