skip prereq tests on some problematic modules and know broken modules
[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
52my %bad_module;
53foreach my $line (<DATA>) {
54 chomp $line;
4c58e020 55 if ($line =~ /^\s*(\S+)?\s*(#|$)/) {
56 $bad_module{$1}++
57 if $1;
dcc862ca 58 }
59 else {
60 die "Invalid entry in DATA section: $line";
61 }
62}
63
64my @modules = sort grep !/^(?:Task|Bundle|Acme)::/, grep !$bad_module{$_}, map {
65 if (my $provides = $_->{fields}{provides}) {
66 ref $provides ? (sort @$provides)[0] : $provides;
67 }
4c58e020 68 elsif (my $provides = $_->{fields}{'metadata.provides'}) {
69 (sort keys %$provides)[0];
70 }
dcc862ca 71 else {
72 my $dist = $_->{fields}{distribution};
73 $dist =~ s/-/::/g;
74 $dist;
75 }
76} @{ $res->{hits}{hits} };
77
78if ( $ENV{MOO_TEST_MD} eq 'MooX' ) {
79 @modules = grep /^MooX(?:$|::)/, @modules;
80}
81elsif ( $ENV{MOO_TEST_MD} eq '1' ) {
82 diag(<<'EOF');
83 Picking 200 random dependents to test. Set MOO_TEST_MD=all to test all
84 dependents or MOO_TEST_MD=MooX to test extension modules only.
85EOF
86 @modules = (List::Util::shuffle(@modules))[0..199];
87}
88elsif ( $ENV{MOO_TEST_MD} ne 'all' ) {
89 my @chosen = split /,/, $ENV{MOO_TEST_MD};
90 my %modules = map { $_ => 1 } @modules;
91 if (my @unknown = grep { !$modules{$_} } @chosen) {
92 die "Unknown modules: @unknown";
93 }
94 @modules = @chosen;
95}
96
97plan tests => scalar @modules;
98test_modules(@modules);
99
100__DATA__
4c58e020 101# no tests
102CPAN::Mirror::Finder
103Catmandu::AlephX
104Device::Hue
105Novel::Robot
106Novel::Robot::Browser
107Novel::Robot::Parser
108Thrift::API::HiveClient
109Tiezi::Robot::Parser
110
dcc862ca 111# broken
4c58e020 112App::Presto
113Catmandu::Store::Lucy
114Dancer2::Session::Sereal
115Data::Localize
116HTML::Zoom::Parser::HH5P
117Message::Passing::ZeroMQ
118Tak
119
120# broken tests
121Template::Flute
122Uninets::Check::Modules::HTTP
123Uninets::Check::Modules::MongoDB
124Uninets::Check::Modules::Redis
125
126# missing prereqs
127Catmandu::Z3950
128Tiezi::Robot
129
130# bad prereq version listed
131Dancer2::Session::Cookie
132Dancer2::Session::JSON
133
134# broken, pending release
135Hg::Lib
136P9Y::ProcessTable
137Net::Easypost
138
139# OS specific
140Linux::AtaSmart
141
142# broken by Moo change, reported rt#84035
143Math::Rational::Approx
dcc862ca 144