exclude by dist in dependents test, with some refactoring
[gitmo/Moo.git] / xt / test-my-dependents.t
CommitLineData
dcc862ca 1use Test::More;
2BEGIN {
3 plan skip_all => <<'END_HELP' unless $ENV{MOO_TEST_MD};
4This test will not run unless you set MOO_TEST_MD to a true value.
5
6 Valid values are:
7
8 all Test every dist which depends on Moose except those
9 that we know cannot be tested. This is a lot of
10 distros (hundreds).
11
12 Dist::1,Dist::2,... Test the individual dists listed.
13
14 MooX Test all Moo extension distros.
15
16 1 Run the default tests. We pick 200 random dists and
17 test them.
18END_HELP
19}
20
21use Test::DependentModules qw( test_modules );
22use MetaCPAN::API;
23use List::Util ();
24
4c58e020 25# avoid any modules that depend on these
26my @bad_prereqs = qw(Gtk2 Padre Wx);
27
dcc862ca 28my $mcpan = MetaCPAN::API->new;
29my $res = $mcpan->post(
30 '/search/reverse_dependencies/Moo' => {
31 query => {
32 filtered => {
33 query => { "match_all" => {} },
34 filter => {
35 and => [
36 { term => { 'release.status' => 'latest' } },
37 { term => { 'release.authorized' => \1 } },
4c58e020 38 { not => { filter => {
39 or => [
40 map { { term => { 'dependency.module' => $_ } } } @bad_prereqs,
41 ],
42 } } }
dcc862ca 43 ],
44 },
45 },
46 },
47 size => 5000,
4c58e020 48 fields => ['distribution', 'provides', 'metadata.provides'],
dcc862ca 49 },
50);
51
15f328f0 52my %bad_dist;
dcc862ca 53foreach my $line (<DATA>) {
54 chomp $line;
4c58e020 55 if ($line =~ /^\s*(\S+)?\s*(#|$)/) {
15f328f0 56 $bad_dist{$1}++
4c58e020 57 if $1;
dcc862ca 58 }
59 else {
60 die "Invalid entry in DATA section: $line";
61 }
62}
63
15f328f0 64my @modules = sort grep !/^(?:Task|Bundle|Acme)::/, map {
65 my $dist = $_->{fields}{distribution};
66 $bad_dist{$dist} ? () : (sort { length $a <=> length $b || $a cmp $b } do {
67 if (my $provides = $_->{fields}{provides}) {
68 ref $provides ? @$provides : ($provides);
69 }
70 elsif (my $provides = $_->{fields}{'metadata.provides'}) {
71 keys %$provides;
72 }
73 else {
74 (my $module = $dist) =~ s/-/::/g;
75 ($module);
76 }
77 })[0]
dcc862ca 78} @{ $res->{hits}{hits} };
79
80if ( $ENV{MOO_TEST_MD} eq 'MooX' ) {
81 @modules = grep /^MooX(?:$|::)/, @modules;
82}
83elsif ( $ENV{MOO_TEST_MD} eq '1' ) {
84 diag(<<'EOF');
85 Picking 200 random dependents to test. Set MOO_TEST_MD=all to test all
86 dependents or MOO_TEST_MD=MooX to test extension modules only.
87EOF
88 @modules = (List::Util::shuffle(@modules))[0..199];
89}
90elsif ( $ENV{MOO_TEST_MD} ne 'all' ) {
91 my @chosen = split /,/, $ENV{MOO_TEST_MD};
92 my %modules = map { $_ => 1 } @modules;
93 if (my @unknown = grep { !$modules{$_} } @chosen) {
94 die "Unknown modules: @unknown";
95 }
96 @modules = @chosen;
97}
98
15f328f0 99if (grep { $_ eq '--show' } @ARGV) {
100 print "Dependencies:\n";
101 print " $_\n" for @modules;
102 exit;
103}
104
dcc862ca 105plan tests => scalar @modules;
106test_modules(@modules);
107
108__DATA__
4c58e020 109# no tests
15f328f0 110CPAN-Mirror-Finder
111Catmandu-AlephX
112Device-Hue
113Novel-Robot
114Novel-Robot-Browser
115Novel-Robot-Parser
116Thrift-API-HiveClient
117Tiezi-Robot-Parser
4c58e020 118
dcc862ca 119# broken
15f328f0 120App-Presto
121Catmandu-Store-Lucy
122Dancer2-Session-Sereal
123Data-Localize
124HTML-Zoom-Parser-HH5P
125Message-Passing-ZeroMQ
4c58e020 126Tak
127
128# broken tests
15f328f0 129Template-Flute
130Uninets-Check-Modules-HTTP
131Uninets-Check-Modules-MongoDB
132Uninets-Check-Modules-Redis
4c58e020 133
134# missing prereqs
15f328f0 135Catmandu-Z3950
136Tiezi-Robot
4c58e020 137
138# bad prereq version listed
15f328f0 139Dancer2-Session-Cookie
140Dancer2-Session-JSON
4c58e020 141
142# broken, pending release
15f328f0 143Hg-Lib
144P9Y-ProcessTable
145Net-Easypost
4c58e020 146
147# OS specific
15f328f0 148Linux-AtaSmart
dcc862ca 149
15f328f0 150# broken by Moo change
151Math-Rational-Approx # RT#84035
152App-Services # RT#85255
153GeoIP2 # https://github.com/maxmind/GeoIP2-perl/pull/1