#!./perl -w

use Test::More tests => 12;

# Keep this before the use Errno.
my $has_einval = exists &Errno::EINVAL;

BEGIN {
    use_ok("Errno");
}

BAIL_OUT("No errno's are exported") unless @Errno::EXPORT_OK;

my $err = $Errno::EXPORT_OK[0];
my $num = &{"Errno::$err"};

is($num, &{"Errno::$err"});

$! = $num;
ok(exists $!{$err});

$! = 0;
ok(! $!{$err});

ok(join(",",sort keys(%!)) eq join(",",sort @Errno::EXPORT_OK));

eval { exists $!{[]} };
ok(! $@);

eval {$!{$err} = "qunckkk" };
like($@, qr/^ERRNO hash is read only!/);

eval {delete $!{$err}};
like($@, qr/^ERRNO hash is read only!/);

# The following tests are in trouble if some OS picks errno values
# through Acme::MetaSyntactic::batman
is($!{EFLRBBB}, "");
ok(! exists($!{EFLRBBB}));

SKIP: {
    skip("Errno does not have EINVAL", 1)
	unless grep {$_ eq 'EINVAL'} @Errno::EXPORT_OK;
    is($has_einval, 1,
       'exists &Errno::EINVAL compiled before Errno is loaded works fine');
}

SKIP: {
    skip("Errno does not have EBADF", 1)
	unless grep {$_ eq 'EBADF'} @Errno::EXPORT_OK;
    is(exists &Errno::EBADF, 1,
       'exists &Errno::EBADF compiled after Errno is loaded works fine');
}