The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl

use strict;
use Test::More; # Don't know ahead of time how many
                # modules we have to test.
use File::Find; # To find modules to test.

my @modules; # This will get set in the &wanted subroutine.

# Scan through blib/ looking for modules.
find( { wanted => \&wanted,
        no_chdir => 1,
      },
      "blib" );

# Set the number of tests we're going to do.
plan tests => scalar( @modules ) + 1;

# Loop through each module and check if require_ok works.
foreach my $module ( @modules ) {
  require_ok( $module );
}

# Test the FINDOFF method separately, only if we have the Starlink
# modules installed. Test the availability of Starlink::Config, and
# assume that if that's installed then they're all installed and we
# can test the compilation of FINDOFF.
eval{ require Starlink::Config; };
SKIP: {
  skip "Starlink Perl modules not installed", 1 if $@;
  require_ok( "Astro::Correlate::Method::FINDOFF" );
}

# This determines whether we are interested in the module
# and then stores it in the array @modules

sub wanted {
  my $pm = $_;

  # is it a module
  return unless $pm =~ /\.pm$/;

  # Special case: return if this is FINDOFF.
  return if $pm =~ /FINDOFF/;

  # Remove the blib/lib (assumes unix!)
  $pm =~ s|^blib/lib/||;

  # Translate / to ::
  $pm =~ s|/|::|g;

  # Remove .pm
  $pm =~ s/\.pm$//;

  push(@modules, $pm);
}