-
Notifications
You must be signed in to change notification settings - Fork 135
/
basic.t
143 lines (115 loc) · 3.86 KB
/
basic.t
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
use v6;
# L<S10/Packages>
use Test;
plan 21;
regex fairly_conclusive_platform_error {:i ^\N*<<Null?>>}
regex likely_perl6_not_found_err
{:i ^\N*<<not>>\N*<<[f[i|ou]nd|located?|access[ed]?]>>}
package Empty {}
package AlsoEmpty::Nested {}
package Simple {
enum B <a>;
class Bar {method baz {'hi'}};
our $forty_two = 42;
}
is Simple::Bar.new.baz, 'hi', 'class test';
#?rakudo todo 'ticket uses role; RT #62900'
{
is eval('~AlsoEmpty'), 'AlsoEmpty()',
'autovivification(?) for nested packages'
}
#?rakudo todo 'RT #65404'
{
lives_ok {Empty.perl ne "tbd"}, 'test for working .perl method'
}
# change to match likely error (top of file) when passes
#?rakudo todo 'RT #62970'
{
eval 'Empty::no_such_sub()';
ok ~$! !~~ /<fairly_conclusive_platform_error>/,
'Non-existant sub through package';
}
# Not sure whether you should be able to access something in package this way
# might change to match likely error (top of file) when passes
#?rakudo todo 'RT #63432'
{
eval 'Empty.no_such_sub_or_prop';
ok ~$! !~~ /<fairly_conclusive_platform_error>/,
'dot notation with package';
}
#?rakudo todo 'RT #63826'
{
enum SimpleB <a>; # useful for fudging success
is eval('Simple::B::a'), 0, 'enum in package'
}
# more sophisticated variants of test exist elsewhere - but seems basic ...
#?rakudo todo 'RT #59484'
{
is eval('package Simp2 {sub pkg { $?PACKAGE }}; Simp2::pkg'),
'Simp2', 'access to $?PACKAGE variable'
}
#?rakudo todo 'ticket based only on class; RT #60446'
{
lives_ok {Simple::Bar.new.WHO}, 'some WHO implementation';
is eval('~(Simple::Bar.new.WHO)'), 'Simple::Bar',
'WHO implementation with longname'
}
lives_ok {package A1 { role B1 {}; class C1 does A1::B1 {}} },
'can refer to role using package';
#?rakudo todo 'ticket based on module; RT #63510'
{
eval_lives_ok '{package A2 { role B2 {}; class C2 does B2 {} }}',
'since role is in package should not need package name';
}
#?rakudo todo 'ticket based on class(es) not package; RT #65022'
{
eval_lives_ok '{
package C1Home { class Baz {} };
package C2Home { class Baz {} }
}', 'two different packages should be two different Baz';
eval_lives_ok '{
package E1Home { enum EHomeE <a> };
package E2Home { role EHomeE {}; class EHomeC does E2Home::EHomeE {} }
}', 'two different packages should be two different EHomeE';
}
# making test below todo causes trouble right now ...
#?rakudo skip 'ticket based on module; RT #64876'
{
eval_lives_ok 'package InternalCall { sub foo() { return 42 }; foo() }',
'call of method defined in package';
}
#?rakudo todo 'RT #64606'
{
eval_lives_ok 'package DoMap {my @a = map { $_ }, (1, 2, 3)}}',
'map in package';
}
my $outer_lex = 17;
#?rakudo todo 'ticket used class; RT #61356'
{
package RetOuterLex {sub outer_lex_val { $outer_lex } };
is eval('RetOuterLex::outer_lex_val()'), $outer_lex, 'use outer lexical'
}
our $outer_package = 19;
#?rakudo todo 'ticket used class; RT #63588'
{
package RetOuterPack {sub outer_pack_val { $outer_package } };
is eval('RetOuterPack::outer_pack_val()'), $outer_package,
'use outer package var';
eval_lives_ok
'package ModOuterPack { $outer_package = 3 }; $outer_package',
'Should be able to update outer package var';
}
# change tests to match likely error (top of file) when they pass
#?rakudo todo 'RT #64204'
{
eval 'my $x = ::P';
ok ~$! !~~ /<fairly_conclusive_platform_error>/,
'simple package case that should not blow platform';
eval 'A::B';
ok ~$! !~~ /<fairly_conclusive_platform_error>/,
'another simple package case that should not blow platform';
}
#?rakudo skip 'RT #64606'
eval_lives_ok q' module MapTester { (1, 2, 3).map: { $_ } } ',
'map works in a module (RT #64606)';
# vim: ft=perl6