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 | |
37d01587 |
21 | use Test::DependentModules qw( test_module ); |
dcc862ca |
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; |
37d01587 |
53 | my $sec_reason; |
54 | my %skip; |
55 | my %todo; |
56 | |
57 | my $hash; |
58 | for my $line (<DATA>) { |
dcc862ca |
59 | chomp $line; |
37d01587 |
60 | next unless $line =~ /\S/; |
61 | if ( $line =~ /^#\s*(\w+)(?::\s*(.*?)\s*)?$/ ) { |
62 | die "Invalid action in DATA section ($1)" |
63 | unless $1 eq 'SKIP' || $1 eq 'TODO'; |
64 | $hash = $1 eq 'SKIP' ? \%skip : \%todo; |
65 | $sec_reason = $2; |
dcc862ca |
66 | } |
37d01587 |
67 | |
68 | my ( $dist, $reason ) = $line =~ /^(\S*)\s*(?:#\s*(.*?)\s*)?$/; |
69 | next unless defined $dist && length $dist; |
70 | |
71 | $hash->{$dist} = $reason || $sec_reason; |
dcc862ca |
72 | } |
73 | |
37d01587 |
74 | my %todo_module; |
75 | my @modules; |
76 | for my $hit (@{ $res->{hits}{hits} }) { |
77 | my $dist = $hit->{fields}{distribution}; |
78 | next |
79 | if exists $skip{$dist}; |
80 | next |
81 | if $dist =~ /^(?:Task|Bundle|Acme)-/; |
82 | |
83 | my $module = (sort { length $a <=> length $b || $a cmp $b } do { |
bbecfc66 |
84 | if (my $provides = $hit->{fields}{provides}) { |
15f328f0 |
85 | ref $provides ? @$provides : ($provides); |
86 | } |
bbecfc66 |
87 | elsif (my $provides = $hit->{fields}{'metadata.provides'}) { |
15f328f0 |
88 | keys %$provides; |
89 | } |
90 | else { |
91 | (my $module = $dist) =~ s/-/::/g; |
92 | ($module); |
93 | } |
37d01587 |
94 | })[0]; |
95 | $todo_module{$module} = $todo{$dist} |
96 | if exists $todo{$dist}; |
97 | push @modules, $module; |
98 | $module; |
99 | } |
100 | @modules = sort @modules; |
dcc862ca |
101 | |
102 | if ( $ENV{MOO_TEST_MD} eq 'MooX' ) { |
103 | @modules = grep /^MooX(?:$|::)/, @modules; |
104 | } |
105 | elsif ( $ENV{MOO_TEST_MD} eq '1' ) { |
106 | diag(<<'EOF'); |
107 | Picking 200 random dependents to test. Set MOO_TEST_MD=all to test all |
108 | dependents or MOO_TEST_MD=MooX to test extension modules only. |
109 | EOF |
110 | @modules = (List::Util::shuffle(@modules))[0..199]; |
111 | } |
112 | elsif ( $ENV{MOO_TEST_MD} ne 'all' ) { |
113 | my @chosen = split /,/, $ENV{MOO_TEST_MD}; |
114 | my %modules = map { $_ => 1 } @modules; |
115 | if (my @unknown = grep { !$modules{$_} } @chosen) { |
bbecfc66 |
116 | die "Unknown modules: @unknown"; |
dcc862ca |
117 | } |
118 | @modules = @chosen; |
119 | } |
120 | |
15f328f0 |
121 | if (grep { $_ eq '--show' } @ARGV) { |
37d01587 |
122 | print "Dependents:\n"; |
15f328f0 |
123 | print " $_\n" for @modules; |
124 | exit; |
125 | } |
126 | |
dcc862ca |
127 | plan tests => scalar @modules; |
37d01587 |
128 | for my $module (@modules) { |
129 | local $TODO = $todo_module{$module} || '???' |
130 | if exists $todo_module{$module}; |
131 | test_module($module); |
132 | } |
133 | |
dcc862ca |
134 | |
135 | __DATA__ |
37d01587 |
136 | |
137 | # SKIP: no tests |
15f328f0 |
138 | CPAN-Mirror-Finder |
139 | Catmandu-AlephX |
140 | Device-Hue |
141 | Novel-Robot |
142 | Novel-Robot-Browser |
143 | Novel-Robot-Parser |
144 | Thrift-API-HiveClient |
145 | Tiezi-Robot-Parser |
4c58e020 |
146 | |
37d01587 |
147 | # SKIP: broken |
15f328f0 |
148 | App-Presto |
149 | Catmandu-Store-Lucy |
150 | Dancer2-Session-Sereal |
151 | Data-Localize |
15f328f0 |
152 | Message-Passing-ZeroMQ |
4c58e020 |
153 | Tak |
154 | |
37d01587 |
155 | # SKIP: broken tests |
15f328f0 |
156 | Template-Flute |
157 | Uninets-Check-Modules-HTTP |
158 | Uninets-Check-Modules-MongoDB |
159 | Uninets-Check-Modules-Redis |
4c58e020 |
160 | |
37d01587 |
161 | # SKIP: missing prereqs |
15f328f0 |
162 | Catmandu-Z3950 |
163 | Tiezi-Robot |
4c58e020 |
164 | |
37d01587 |
165 | # SKIP: bad prereq version listed |
15f328f0 |
166 | Dancer2-Session-Cookie |
167 | Dancer2-Session-JSON |
4c58e020 |
168 | |
37d01587 |
169 | # TODO: broken, pending release |
15f328f0 |
170 | Hg-Lib |
171 | P9Y-ProcessTable |
4c58e020 |
172 | |
37d01587 |
173 | # SKIP: OS specific |
15f328f0 |
174 | Linux-AtaSmart |
dcc862ca |
175 | |
37d01587 |
176 | # TODO: broken by Moo change |
15f328f0 |
177 | Math-Rational-Approx # RT#84035 |
178 | App-Services # RT#85255 |