Commit | Line | Data |
dcc862ca |
1 | use Test::More; |
2 | BEGIN { |
3 | plan skip_all => <<'END_HELP' unless $ENV{MOO_TEST_MD}; |
4 | This 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. |
18 | END_HELP |
19 | } |
20 | |
21 | use Test::DependentModules qw( test_modules ); |
22 | use MetaCPAN::API; |
23 | use List::Util (); |
24 | |
4c58e020 |
25 | # avoid any modules that depend on these |
26 | my @bad_prereqs = qw(Gtk2 Padre Wx); |
27 | |
dcc862ca |
28 | my $mcpan = MetaCPAN::API->new; |
29 | my $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 |
52 | my %bad_dist; |
dcc862ca |
53 | foreach 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 |
64 | my @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 | |
80 | if ( $ENV{MOO_TEST_MD} eq 'MooX' ) { |
81 | @modules = grep /^MooX(?:$|::)/, @modules; |
82 | } |
83 | elsif ( $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. |
87 | EOF |
88 | @modules = (List::Util::shuffle(@modules))[0..199]; |
89 | } |
90 | elsif ( $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 |
99 | if (grep { $_ eq '--show' } @ARGV) { |
100 | print "Dependencies:\n"; |
101 | print " $_\n" for @modules; |
102 | exit; |
103 | } |
104 | |
dcc862ca |
105 | plan tests => scalar @modules; |
106 | test_modules(@modules); |
107 | |
108 | __DATA__ |
4c58e020 |
109 | # no tests |
15f328f0 |
110 | CPAN-Mirror-Finder |
111 | Catmandu-AlephX |
112 | Device-Hue |
113 | Novel-Robot |
114 | Novel-Robot-Browser |
115 | Novel-Robot-Parser |
116 | Thrift-API-HiveClient |
117 | Tiezi-Robot-Parser |
4c58e020 |
118 | |
dcc862ca |
119 | # broken |
15f328f0 |
120 | App-Presto |
121 | Catmandu-Store-Lucy |
122 | Dancer2-Session-Sereal |
123 | Data-Localize |
124 | HTML-Zoom-Parser-HH5P |
125 | Message-Passing-ZeroMQ |
4c58e020 |
126 | Tak |
127 | |
128 | # broken tests |
15f328f0 |
129 | Template-Flute |
130 | Uninets-Check-Modules-HTTP |
131 | Uninets-Check-Modules-MongoDB |
132 | Uninets-Check-Modules-Redis |
4c58e020 |
133 | |
134 | # missing prereqs |
15f328f0 |
135 | Catmandu-Z3950 |
136 | Tiezi-Robot |
4c58e020 |
137 | |
138 | # bad prereq version listed |
15f328f0 |
139 | Dancer2-Session-Cookie |
140 | Dancer2-Session-JSON |
4c58e020 |
141 | |
142 | # broken, pending release |
15f328f0 |
143 | Hg-Lib |
144 | P9Y-ProcessTable |
145 | Net-Easypost |
4c58e020 |
146 | |
147 | # OS specific |
15f328f0 |
148 | Linux-AtaSmart |
dcc862ca |
149 | |
15f328f0 |
150 | # broken by Moo change |
151 | Math-Rational-Approx # RT#84035 |
152 | App-Services # RT#85255 |
153 | GeoIP2 # https://github.com/maxmind/GeoIP2-perl/pull/1 |