Commit | Line | Data |
8ebc5c01 |
1 | #!./perl |
2 | |
3 | BEGIN { |
4 | chdir 't' if -d 't'; |
dd90d555 |
5 | @INC = ('../lib', 'lib'); |
2246ee03 |
6 | $INC{"feature.pm"} = 1; # so we don't attempt to load feature.pm |
8ebc5c01 |
7 | } |
8 | |
17c59fdf |
9 | print "1..73\n"; |
8ebc5c01 |
10 | |
6a4a49dd |
11 | # Can't require test.pl, as we're testing the use/require mechanism here. |
12 | |
13 | my $test = 1; |
14 | |
15 | sub _ok { |
16 | my ($type, $got, $expected, $name) = @_; |
17 | |
6a4a49dd |
18 | my $result; |
19 | if ($type eq 'is') { |
20 | $result = $got eq $expected; |
21 | } elsif ($type eq 'isnt') { |
22 | $result = $got ne $expected; |
23 | } elsif ($type eq 'like') { |
24 | $result = $got =~ $expected; |
25 | } else { |
26 | die "Unexpected type '$type'$name"; |
27 | } |
28 | if ($result) { |
3cacfbb9 |
29 | if ($name) { |
30 | print "ok $test - $name\n"; |
31 | } else { |
32 | print "ok $test\n"; |
33 | } |
6a4a49dd |
34 | } else { |
3cacfbb9 |
35 | if ($name) { |
36 | print "not ok $test - $name\n"; |
37 | } else { |
38 | print "not ok $test\n"; |
39 | } |
dd90d555 |
40 | my @caller = caller(1); |
3cacfbb9 |
41 | print "# Failed test at $caller[1] line $caller[2]\n"; |
6a4a49dd |
42 | print "# Got '$got'\n"; |
43 | if ($type eq 'is') { |
44 | print "# Expected '$expected'\n"; |
45 | } elsif ($type eq 'isnt') { |
46 | print "# Expected not '$expected'\n"; |
47 | } elsif ($type eq 'like') { |
48 | print "# Expected $expected\n"; |
49 | } |
50 | } |
51 | $test = $test + 1; |
52 | $result; |
9f3d182e |
53 | } |
8ebc5c01 |
54 | |
6a4a49dd |
55 | sub like ($$;$) { |
56 | _ok ('like', @_); |
57 | } |
58 | sub is ($$;$) { |
59 | _ok ('is', @_); |
60 | } |
61 | sub isnt ($$;$) { |
62 | _ok ('isnt', @_); |
8ebc5c01 |
63 | } |
6a4a49dd |
64 | |
17c59fdf |
65 | eval "use 5"; # implicit semicolon |
66 | is ($@, ''); |
67 | |
68 | eval "use 5;"; |
69 | is ($@, ''); |
70 | |
71 | eval "{use 5}"; # [perl #70884] |
72 | is ($@, ''); |
73 | |
74 | eval "{use 5 }"; # [perl #70884] |
75 | is ($@, ''); |
76 | |
f2a3bb21 |
77 | # new style version numbers |
78 | |
79 | eval q{ use v5.5.630; }; |
80 | is ($@, ''); |
81 | |
82 | eval q{ use 10.0.2; }; |
83 | like ($@, qr/^Perl v10\.0\.2 required/); |
84 | |
6a4a49dd |
85 | eval "use 5.000"; # implicit semicolon |
86 | is ($@, ''); |
87 | |
88 | eval "use 5.000;"; |
89 | is ($@, ''); |
8ebc5c01 |
90 | |
468aa647 |
91 | eval "use 6.000;"; |
6a4a49dd |
92 | like ($@, qr/Perl v6\.0\.0 required--this is only \Q$^V\E, stopped/); |
468aa647 |
93 | |
94 | eval "no 6.000;"; |
6a4a49dd |
95 | is ($@, ''); |
468aa647 |
96 | |
97 | eval "no 5.000;"; |
6a4a49dd |
98 | like ($@, qr/Perls since v5\.0\.0 too modern--this is \Q$^V\E, stopped/); |
468aa647 |
99 | |
d1029faa |
100 | eval "use 5.6;"; |
101 | like ($@, qr/Perl v5\.600\.0 required \(did you mean v5\.6\.0\?\)--this is only \Q$^V\E, stopped/); |
102 | |
103 | eval "use 5.8;"; |
104 | like ($@, qr/Perl v5\.800\.0 required \(did you mean v5\.8\.0\?\)--this is only \Q$^V\E, stopped/); |
105 | |
106 | eval "use 5.9;"; |
107 | like ($@, qr/Perl v5\.900\.0 required \(did you mean v5\.9\.0\?\)--this is only \Q$^V\E, stopped/); |
108 | |
109 | eval "use 5.10;"; |
110 | like ($@, qr/Perl v5\.100\.0 required \(did you mean v5\.10\.0\?\)--this is only \Q$^V\E, stopped/); |
111 | |
53eb19dd |
112 | eval "use 5.11;"; |
113 | like ($@, qr/Perl v5\.110\.0 required \(did you mean v5\.11\.0\?\)--this is only \Q$^V\E, stopped/); |
114 | |
6d2c9499 |
115 | eval sprintf "use %.6f;", $]; |
6a4a49dd |
116 | is ($@, ''); |
8ebc5c01 |
117 | |
118 | |
6d2c9499 |
119 | eval sprintf "use %.6f;", $] - 0.000001; |
6a4a49dd |
120 | is ($@, ''); |
8ebc5c01 |
121 | |
6d2c9499 |
122 | eval sprintf("use %.6f;", $] + 1); |
6a4a49dd |
123 | like ($@, qr/Perl v6.\d+.\d+ required--this is only \Q$^V\E, stopped/); |
8ebc5c01 |
124 | |
6d2c9499 |
125 | eval sprintf "use %.6f;", $] + 0.00001; |
6a4a49dd |
126 | like ($@, qr/Perl v5.\d+.\d+ required--this is only \Q$^V\E, stopped/); |
8ebc5c01 |
127 | |
53eb19dd |
128 | # check that "use 5.11.0" (and higher) loads strictures |
129 | eval 'use 5.11.0; ${"foo"} = "bar";'; |
130 | like ($@, qr/Can't use string \("foo"\) as a SCALAR ref while "strict refs" in use/); |
5cc917d6 |
131 | # but that they can be disabled |
132 | eval 'use 5.11.0; no strict "refs"; ${"foo"} = "bar";'; |
133 | is ($@, ""); |
134 | # and they are properly scoped |
135 | eval '{use 5.11.0;} ${"foo"} = "bar";'; |
136 | is ($@, ""); |
53eb19dd |
137 | |
dd90d555 |
138 | { use test_use } # check that subparse saves pending tokens |
8ebc5c01 |
139 | |
dd90d555 |
140 | local $test_use::VERSION = 1.0; |
8ebc5c01 |
141 | |
dd90d555 |
142 | eval "use test_use 0.9"; |
6a4a49dd |
143 | is ($@, ''); |
8ebc5c01 |
144 | |
dd90d555 |
145 | eval "use test_use 1.0"; |
6a4a49dd |
146 | is ($@, ''); |
8ebc5c01 |
147 | |
dd90d555 |
148 | eval "use test_use 1.01"; |
6a4a49dd |
149 | isnt ($@, ''); |
8ebc5c01 |
150 | |
dd90d555 |
151 | eval "use test_use 0.9 qw(fred)"; |
6a4a49dd |
152 | is ($@, ''); |
8ebc5c01 |
153 | |
dd90d555 |
154 | is("@test_use::got", "fred"); |
8ebc5c01 |
155 | |
dd90d555 |
156 | eval "use test_use 1.0 qw(joe)"; |
6a4a49dd |
157 | is ($@, ''); |
158 | |
dd90d555 |
159 | is("@test_use::got", "joe"); |
8ebc5c01 |
160 | |
dd90d555 |
161 | eval "use test_use 1.01 qw(freda)"; |
6a4a49dd |
162 | isnt($@, ''); |
8ebc5c01 |
163 | |
dd90d555 |
164 | is("@test_use::got", "joe"); |
1571675a |
165 | |
166 | { |
dd90d555 |
167 | local $test_use::VERSION = 35.36; |
168 | eval "use test_use v33.55"; |
6a4a49dd |
169 | is ($@, ''); |
1571675a |
170 | |
dd90d555 |
171 | eval "use test_use v100.105"; |
172 | like ($@, qr/test_use version v100.105.0 required--this is only version v35\.360\.0/); |
1571675a |
173 | |
dd90d555 |
174 | eval "use test_use 33.55"; |
6a4a49dd |
175 | is ($@, ''); |
1571675a |
176 | |
dd90d555 |
177 | eval "use test_use 100.105"; |
178 | like ($@, qr/test_use version 100.105 required--this is only version 35.36/); |
1571675a |
179 | |
dd90d555 |
180 | local $test_use::VERSION = '35.36'; |
181 | eval "use test_use v33.55"; |
6a4a49dd |
182 | like ($@, ''); |
1571675a |
183 | |
dd90d555 |
184 | eval "use test_use v100.105"; |
185 | like ($@, qr/test_use version v100.105.0 required--this is only version v35\.360\.0/); |
1571675a |
186 | |
dd90d555 |
187 | eval "use test_use 33.55"; |
6a4a49dd |
188 | is ($@, ''); |
1571675a |
189 | |
dd90d555 |
190 | eval "use test_use 100.105"; |
191 | like ($@, qr/test_use version 100.105 required--this is only version 35.36/); |
1571675a |
192 | |
dd90d555 |
193 | local $test_use::VERSION = v35.36; |
194 | eval "use test_use v33.55"; |
6a4a49dd |
195 | is ($@, ''); |
1571675a |
196 | |
dd90d555 |
197 | eval "use test_use v100.105"; |
198 | like ($@, qr/test_use version v100.105.0 required--this is only version v35\.36\.0/); |
1571675a |
199 | |
dd90d555 |
200 | eval "use test_use 33.55"; |
6a4a49dd |
201 | is ($@, ''); |
1571675a |
202 | |
dd90d555 |
203 | eval "use test_use 100.105"; |
204 | like ($@, qr/test_use version 100.105 required--this is only version v35.36/); |
1571675a |
205 | } |
8312d5ee |
206 | |
207 | |
208 | { |
209 | # Regression test for patch 14937: |
210 | # Check that a .pm file with no package or VERSION doesn't core. |
b1739762 |
211 | # (git commit 2658f4d9934aba5f8b23afcc078dc12b3a40223) |
212 | eval "use test_use_14937 3"; |
213 | like ($@, qr/^test_use_14937 defines neither package nor VERSION--version check failed at/); |
8312d5ee |
214 | } |
3cacfbb9 |
215 | |
216 | my @ver = split /\./, sprintf "%vd", $^V; |
217 | |
218 | foreach my $index (-3..+3) { |
219 | foreach my $v (0, 1) { |
220 | my @parts = @ver; |
221 | if ($index) { |
222 | if ($index < 0) { |
223 | # Jiggle one of the parts down |
224 | --$parts[-$index - 1]; |
8c5f6936 |
225 | if ($parts[-$index - 1] < 0) { |
226 | # perl's version number ends with '.0' |
227 | $parts[-$index - 1] = 0; |
228 | $parts[-$index - 2] -= 2; |
229 | } |
3cacfbb9 |
230 | } else { |
231 | # Jiggle one of the parts up |
232 | ++$parts[$index - 1]; |
233 | } |
234 | } |
235 | my $v_version = sprintf "v%d.%d.%d", @parts; |
236 | my $version; |
237 | if ($v) { |
238 | $version = $v_version; |
239 | } else { |
240 | $version = $parts[0] + $parts[1] / 1000 + $parts[2] / 1000000; |
241 | } |
242 | |
243 | eval "use $version"; |
244 | if ($index > 0) { |
245 | # The future |
246 | like ($@, |
247 | qr/Perl $v_version required--this is only \Q$^V\E, stopped/, |
248 | "use $version"); |
249 | } else { |
250 | # The present or past |
251 | is ($@, '', "use $version"); |
252 | } |
253 | |
254 | eval "no $version"; |
255 | if ($index <= 0) { |
256 | # The present or past |
257 | like ($@, |
258 | qr/Perls since $v_version too modern--this is \Q$^V\E, stopped/, |
259 | "no $version"); |
260 | } else { |
261 | # future |
262 | is ($@, '', "no $version"); |
263 | } |
264 | } |
265 | } |
266 | |