END_HELP
}
-use Test::DependentModules qw( test_modules );
+use Test::DependentModules qw( test_module );
use MetaCPAN::API;
use List::Util ();
},
);
-my %bad_module;
-foreach my $line (<DATA>) {
+my %bad_dist;
+my $sec_reason;
+my %skip;
+my %todo;
+
+my $hash;
+for my $line (<DATA>) {
chomp $line;
- if ($line =~ /^\s*(\S+)?\s*(#|$)/) {
- $bad_module{$1}++
- if $1;
- }
- else {
- die "Invalid entry in DATA section: $line";
+ next unless $line =~ /\S/;
+ if ( $line =~ /^#\s*(\w+)(?::\s*(.*?)\s*)?$/ ) {
+ die "Invalid action in DATA section ($1)"
+ unless $1 eq 'SKIP' || $1 eq 'TODO';
+ $hash = $1 eq 'SKIP' ? \%skip : \%todo;
+ $sec_reason = $2;
}
+
+ my ( $dist, $reason ) = $line =~ /^(\S*)\s*(?:#\s*(.*?)\s*)?$/;
+ next unless defined $dist && length $dist;
+
+ $hash->{$dist} = $reason || $sec_reason;
}
-my @modules = sort grep !/^(?:Task|Bundle|Acme)::/, grep !$bad_module{$_}, map {
- if (my $provides = $_->{fields}{provides}) {
- ref $provides ? (sort @$provides)[0] : $provides;
- }
- elsif (my $provides = $_->{fields}{'metadata.provides'}) {
- (sort keys %$provides)[0];
- }
- else {
- my $dist = $_->{fields}{distribution};
- $dist =~ s/-/::/g;
- $dist;
- }
-} @{ $res->{hits}{hits} };
+my %todo_module;
+my @modules;
+for my $hit (@{ $res->{hits}{hits} }) {
+ my $dist = $hit->{fields}{distribution};
+ next
+ if exists $skip{$dist};
+ next
+ if $dist =~ /^(?:Task|Bundle|Acme)-/;
+
+ my $module = (sort { length $a <=> length $b || $a cmp $b } do {
+ if (my $provides = $hit->{fields}{provides}) {
+ ref $provides ? @$provides : ($provides);
+ }
+ elsif (my $provides = $hit->{fields}{'metadata.provides'}) {
+ keys %$provides;
+ }
+ else {
+ (my $module = $dist) =~ s/-/::/g;
+ ($module);
+ }
+ })[0];
+ $todo_module{$module} = $todo{$dist}
+ if exists $todo{$dist};
+ push @modules, $module;
+ $module;
+}
+@modules = sort @modules;
if ( $ENV{MOO_TEST_MD} eq 'MooX' ) {
@modules = grep /^MooX(?:$|::)/, @modules;
my @chosen = split /,/, $ENV{MOO_TEST_MD};
my %modules = map { $_ => 1 } @modules;
if (my @unknown = grep { !$modules{$_} } @chosen) {
- die "Unknown modules: @unknown";
+ die "Unknown modules: @unknown";
}
@modules = @chosen;
}
+if (grep { $_ eq '--show' } @ARGV) {
+ print "Dependents:\n";
+ print " $_\n" for @modules;
+ exit;
+}
+
plan tests => scalar @modules;
-test_modules(@modules);
+for my $module (@modules) {
+ local $TODO = $todo_module{$module} || '???'
+ if exists $todo_module{$module};
+ test_module($module);
+}
+
__DATA__
-# no tests
-CPAN::Mirror::Finder
-Catmandu::AlephX
-Device::Hue
-Novel::Robot
-Novel::Robot::Browser
-Novel::Robot::Parser
-Thrift::API::HiveClient
-Tiezi::Robot::Parser
-
-# broken
-App::Presto
-Catmandu::Store::Lucy
-Dancer2::Session::Sereal
-Data::Localize
-HTML::Zoom::Parser::HH5P
-Message::Passing::ZeroMQ
-Tak
-# broken tests
-Template::Flute
-Uninets::Check::Modules::HTTP
-Uninets::Check::Modules::MongoDB
-Uninets::Check::Modules::Redis
+# SKIP: no tests
+CPAN-Mirror-Finder
+Catmandu-AlephX
+Device-Hue
+Novel-Robot
+Novel-Robot-Browser
+Novel-Robot-Parser
+Thrift-API-HiveClient
+Tiezi-Robot-Parser
+
+# SKIP: broken
+App-Presto
+Catmandu-Store-Lucy
+Dancer2-Session-Sereal
+Data-Localize
+Message-Passing-ZeroMQ
+Tak
-# missing prereqs
-Catmandu::Z3950
-Tiezi::Robot
+# SKIP: broken tests
+Template-Flute
+Uninets-Check-Modules-HTTP
+Uninets-Check-Modules-MongoDB
+Uninets-Check-Modules-Redis
-# bad prereq version listed
-Dancer2::Session::Cookie
-Dancer2::Session::JSON
+# SKIP: missing prereqs
+Catmandu-Z3950
+Tiezi-Robot
-# broken, pending release
-Hg::Lib
-P9Y::ProcessTable
-Net::Easypost
+# SKIP: bad prereq version listed
+Dancer2-Session-Cookie
+Dancer2-Session-JSON
-# OS specific
-Linux::AtaSmart
+# TODO: broken, pending release
+Hg-Lib
+P9Y-ProcessTable
-# broken by Moo change, reported rt#84035
-Math::Rational::Approx
+# SKIP: OS specific
+Linux-AtaSmart
+# TODO: broken by Moo change
+Math-Rational-Approx # RT#84035
+App-Services # RT#85255