File: gh22169.t

package info (click to toggle)
perl 5.42.0-2
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 128,392 kB
  • sloc: perl: 534,963; ansic: 240,563; sh: 72,042; pascal: 6,934; xml: 2,428; yacc: 1,360; makefile: 1,197; cpp: 208; lisp: 1
file content (60 lines) | stat: -rw-r--r-- 1,223 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!./perl

BEGIN {
    chdir 't' if -d 't';
    require './test.pl';
    set_up_inc('../lib');
    require Config;
}

use v5.36;
use feature 'class';
no warnings 'experimental::class';

class Base {
    method g() { "Base" }
    ADJUST {
        ::fail("original Base ADJUST block should not be called");
    }
}

class Base2 {
    method g() { "Base2" }
}

BEGIN {
    our $saw_end;
    eval <<'CLASS';
class MyTest :isa(Base) {
    field $x = "First";
    field $w :reader;
    ADJUST {
        ::fail("ADJUST from failed class definition called");
    }
    method f () { $x }
    method h() { }
    method z() { }
    # make sure some error above doesn't invalidate the test, this
    BEGIN { ++$saw_end; }
# no }
CLASS
    ok($saw_end, "saw the end of the incomplete class definition");
}

class MyTest :isa(Base2) {
    field $y = "Second";
    method f() { $y }
    ADJUST {
        ::pass("saw adjust in replacement class definition");
    }
}

my $z = new_ok("MyTest");
ok(!$z->can("h"), "h() should no longer be present");
isa_ok($z, "Base2", "check base class");
is($z->g(), "Base2", "Base class correct via g");
is($z->f(), "Second", "f() value");
ok(!$z->can("w"), 'accessor for $w removed');

done_testing();