This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
POSIX: test that all subroutines are exported
authorAaron Crane <arc@cpan.org>
Fri, 13 May 2016 12:50:01 +0000 (13:50 +0100)
committerAaron Crane <arc@cpan.org>
Mon, 16 May 2016 12:47:10 +0000 (13:47 +0100)
ext/POSIX/t/export.t

index 5f71b32..ff852ed 100644 (file)
@@ -182,7 +182,7 @@ my %expect = (
     ],
 );
 
-plan (tests => 2 * keys %expect);
+plan (tests => 2 * keys(%expect) + keys(%POSIX::));
 
 while (my ($var, $expect) = each %expect) {
     my $have = *{$POSIX::{$var}}{ARRAY};
@@ -190,3 +190,23 @@ while (my ($var, $expect) = each %expect) {
           "Correct number of entries for \@POSIX::$var");
     is_deeply([sort @$have], $expect, "Correct entries for \@POSIX::$var");
 }
+
+my %no_export_needed = map +($_ => 1),
+    qw(AUTOLOAD bootstrap constant croak import load_imports
+       unimplemented_message usage);
+
+my %exported = map +($_ => 1),
+    (@POSIX::EXPORT, @POSIX::EXPORT_OK, map @$_, values %POSIX::EXPORT_TAGS);
+
+for my $name (sort keys %POSIX::) {
+    my $code = do { no strict 'refs'; \&{"POSIX::$name"} };
+    if (!defined &$code) {
+        pass("$name need not be exported as it does not name a subroutine");
+    }
+    elsif ($no_export_needed{$name}) {
+        pass("$name need not be exported as it is part of the internals");
+    }
+    else {
+        ok($exported{$name}, "subroutine POSIX::$name is exported somehow");
+    }
+}