xref: /openbsd-src/gnu/usr.bin/perl/t/lib/croak/class (revision 5486feefcc8cb79b19e014ab332cc5dfd05b3b33)
1f2a19305Safresh1__END__
2f2a19305Safresh1# Method calls on no args
3f2a19305Safresh1no warnings 'experimental::class';
4f2a19305Safresh1use feature 'class';
5f2a19305Safresh1class XXX { method m { } }
6f2a19305Safresh1XXX::m()
7f2a19305Safresh1EXPECT
8f2a19305Safresh1Cannot invoke method "m" on a non-instance at - line 5.
9f2a19305Safresh1########
10f2a19305Safresh1# Method calls on non-ref
11f2a19305Safresh1no warnings 'experimental::class';
12f2a19305Safresh1use feature 'class';
13f2a19305Safresh1class XXX { method m { } }
14f2a19305Safresh1XXX::m(123)
15f2a19305Safresh1EXPECT
16f2a19305Safresh1Cannot invoke method "m" on a non-instance at - line 5.
17f2a19305Safresh1########
18f2a19305Safresh1# Method calls on non-object
19f2a19305Safresh1no warnings 'experimental::class';
20f2a19305Safresh1use feature 'class';
21f2a19305Safresh1class XXX { method m { } }
22f2a19305Safresh1XXX::m([])
23f2a19305Safresh1EXPECT
24f2a19305Safresh1Cannot invoke method "m" on a non-instance at - line 5.
25f2a19305Safresh1########
26f2a19305Safresh1# Method calls from a different class
27f2a19305Safresh1no warnings 'experimental::class';
28f2a19305Safresh1use feature 'class';
29f2a19305Safresh1class XXX { method m { } }
30f2a19305Safresh1class YYY {}
31f2a19305Safresh1YYY->new->XXX::m();
32f2a19305Safresh1EXPECT
33f2a19305Safresh1Cannot invoke a method of "XXX" on an instance of "YYY" at - line 6.
34f2a19305Safresh1########
35f2a19305Safresh1no warnings 'experimental::class';
36f2a19305Safresh1use feature 'class';
37f2a19305Safresh1class XXX {}
38f2a19305Safresh1bless [], "XXX";
39f2a19305Safresh1EXPECT
40f2a19305Safresh1Attempt to bless into a class at - line 4.
41f2a19305Safresh1########
42f2a19305Safresh1no warnings 'experimental::class';
43f2a19305Safresh1use feature 'class';
44f2a19305Safresh1class XXX {}
45f2a19305Safresh1bless(XXX->new, "main");
46f2a19305Safresh1EXPECT
47f2a19305Safresh1Can't bless an object reference at - line 4.
48f2a19305Safresh1########
49f2a19305Safresh1no warnings 'experimental::class';
50f2a19305Safresh1use feature 'class';
51f2a19305Safresh1class XXX { field $zz; $zz = 123; }
52f2a19305Safresh1EXPECT
53f2a19305Safresh1Field $zz is not accessible outside a method at - line 3.
54f2a19305Safresh1########
55f2a19305Safresh1no warnings 'experimental::class';
56f2a19305Safresh1use feature 'class';
57f2a19305Safresh1class XXX { field $x; sub f { print $x } }
58f2a19305Safresh1EXPECT
59f2a19305Safresh1Field $x is not accessible outside a method at - line 3.
60f2a19305Safresh1########
61f2a19305Safresh1no warnings 'experimental::class';
62f2a19305Safresh1use feature 'class';
63f2a19305Safresh1class XXX {
64f2a19305Safresh1  field $x;
65f2a19305Safresh1  class YYY { method m { print $x } }
66f2a19305Safresh1}
67f2a19305Safresh1EXPECT
68f2a19305Safresh1Field $x of "XXX" is not accessible in a method of "YYY" at - line 5.
69f2a19305Safresh1########
70f2a19305Safresh1no warnings 'experimental::class';
71f2a19305Safresh1use feature 'class';
72f2a19305Safresh1class XXX {}
73f2a19305Safresh1class XXX {}
74f2a19305Safresh1EXPECT
75f2a19305Safresh1Cannot reopen existing class "XXX" at - line 4.
76f2a19305Safresh1########
77f2a19305Safresh1no warnings 'experimental::class';
78f2a19305Safresh1use feature 'class';
79f2a19305Safresh1class XXX {}
80f2a19305Safresh1push @XXX::ISA, q(Another);
81f2a19305Safresh1EXPECT
82f2a19305Safresh1Modification of a read-only value attempted at - line 4.
83f2a19305Safresh1########
84f2a19305Safresh1no warnings 'experimental::class';
85f2a19305Safresh1use feature 'class';
86f2a19305Safresh1BEGIN { push @XXX::ISA, q(Another); }
87f2a19305Safresh1class XXX {}
88f2a19305Safresh1EXPECT
89f2a19305Safresh1Cannot create class XXX as it already has a non-empty @ISA at - line 4.
90f2a19305Safresh1########
91f2a19305Safresh1use strict;
92f2a19305Safresh1no warnings 'experimental::class';
93f2a19305Safresh1use feature 'class';
94f2a19305Safresh1class XXX {
95f2a19305Safresh1  field $x = $self + 1;
96f2a19305Safresh1}
97f2a19305Safresh1EXPECT
98f2a19305Safresh1Global symbol "$self" requires explicit package name (did you forget to declare "my $self"?) at - line 5.
99f2a19305Safresh1Execution of - aborted due to compilation errors.
100f2a19305Safresh1########
101*5486feefSafresh1# This test is known to leak: see GH #20812.
102f2a19305Safresh1no warnings 'experimental::class';
103f2a19305Safresh1use feature 'class';
104f2a19305Safresh1class XXX {
105f2a19305Safresh1  field $x = last;
106f2a19305Safresh1}
107f2a19305Safresh1EXPECT
108f2a19305Safresh1Can't "last" out of field initialiser expression at - line 5.
109f2a19305Safresh1########
110f2a19305Safresh1use strict;
111f2a19305Safresh1no warnings 'experimental::class';
112f2a19305Safresh1use feature 'class';
113f2a19305Safresh1class XXX {
114f2a19305Safresh1  field $x :param(p);
115f2a19305Safresh1  field $y :param(p);
116f2a19305Safresh1}
117f2a19305Safresh1EXPECT
118f2a19305Safresh1Cannot assign :param(p) to field $y because that name is already in use at - line 6.
119f2a19305Safresh1########
120f2a19305Safresh1use strict;
121f2a19305Safresh1no warnings 'experimental::class';
122f2a19305Safresh1use feature 'class';
123f2a19305Safresh1class XXX {
124f2a19305Safresh1  field $x :param(p);
125f2a19305Safresh1}
126f2a19305Safresh1class YYY :isa(XXX) {
127f2a19305Safresh1  field $y :param(p);
128f2a19305Safresh1}
129f2a19305Safresh1EXPECT
130f2a19305Safresh1Cannot assign :param(p) to field $y because that name is already in use at - line 8.
131*5486feefSafresh1########
132*5486feefSafresh1use strict;
133*5486feefSafresh1no warnings 'experimental::class';
134*5486feefSafresh1use feature 'class';
135*5486feefSafresh1class XXX {
136*5486feefSafresh1  my $classname = __CLASS__;
137*5486feefSafresh1}
138*5486feefSafresh1EXPECT
139*5486feefSafresh1Cannot use __CLASS__ outside of a method or field initializer expression at - line 5.
140*5486feefSafresh1########
141*5486feefSafresh1# NAME try to create an object of incomplete class (error)
142*5486feefSafresh1use v5.36;
143*5486feefSafresh1use feature 'class';
144*5486feefSafresh1no warnings 'experimental::class';
145*5486feefSafresh1eval "class C {";
146*5486feefSafresh1C->new;
147*5486feefSafresh1EXPECT
148*5486feefSafresh1Cannot create an object of incomplete class "C" at - line 5.
149*5486feefSafresh1########
150*5486feefSafresh1# NAME try to create an object of incomplete class (compile-time)
151*5486feefSafresh1use v5.36;
152*5486feefSafresh1use feature 'class';
153*5486feefSafresh1no warnings 'experimental::class';
154*5486feefSafresh1class C { BEGIN { C->new; } };
155*5486feefSafresh1EXPECT
156*5486feefSafresh1Cannot create an object of incomplete class "C" at - line 4.
157*5486feefSafresh1BEGIN failed--compilation aborted at - line 4.
158