This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Ensure that the C<exists &Errno::EFOO> idiom continues to work as documented.
[perl5.git] / ext / Errno / t / Errno.t
1 #!./perl -w
2
3 use Test::More tests => 12;
4
5 # Keep this before the use Errno.
6 my $has_einval = exists &Errno::EINVAL;
7
8 BEGIN {
9     use_ok("Errno");
10 }
11
12 BAIL_OUT("No errno's are exported") unless @Errno::EXPORT_OK;
13
14 my $err = $Errno::EXPORT_OK[0];
15 my $num = &{"Errno::$err"};
16
17 is($num, &{"Errno::$err"});
18
19 $! = $num;
20 ok(exists $!{$err});
21
22 $! = 0;
23 ok(! $!{$err});
24
25 ok(join(",",sort keys(%!)) eq join(",",sort @Errno::EXPORT_OK));
26
27 eval { exists $!{[]} };
28 ok(! $@);
29
30 eval {$!{$err} = "qunckkk" };
31 like($@, qr/^ERRNO hash is read only!/);
32
33 eval {delete $!{$err}};
34 like($@, qr/^ERRNO hash is read only!/);
35
36 # The following tests are in trouble if some OS picks errno values
37 # through Acme::MetaSyntactic::batman
38 is($!{EFLRBBB}, "");
39 ok(! exists($!{EFLRBBB}));
40
41 SKIP: {
42     skip("Errno does not have EINVAL", 1)
43         unless grep {$_ eq 'EINVAL'} @Errno::EXPORT_OK;
44     is($has_einval, 1,
45        'exists &Errno::EINVAL compiled before Errno is loaded works fine');
46 }
47
48 SKIP: {
49     skip("Errno does not have EBADF", 1)
50         unless grep {$_ eq 'EBADF'} @Errno::EXPORT_OK;
51     is(exists &Errno::EBADF, 1,
52        'exists &Errno::EBADF compiled after Errno is loaded works fine');
53 }