3 plan skip_all => <<'END_HELP' unless $ENV{MOO_TEST_MD} || @ARGV;
4 This test will not run unless you set MOO_TEST_MD to a true value.
8 all Test every dist which depends on Moose except those
9 that we know cannot be tested. This is a lot of
12 Dist::1,Dist::2,... Test the individual dists listed.
14 MooX Test all Moo extension distros.
16 1 Run the default tests. We pick 200 random dists and
21 use Test::DependentModules qw( test_module );
25 # avoid any modules that depend on these
26 my @bad_prereqs = qw(Gtk2 Padre Wx);
28 my $mcpan = MetaCPAN::API->new;
29 my $res = $mcpan->post(
30 '/search/reverse_dependencies/Moo' => {
33 query => { "match_all" => {} },
36 { term => { 'release.status' => 'latest' } },
37 { term => { 'release.authorized' => \1 } },
38 { not => { filter => {
40 map { { term => { 'dependency.module' => $_ } } } @bad_prereqs,
48 fields => ['distribution', 'provides', 'metadata.provides'],
58 for my $line (<DATA>) {
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;
68 my ( $dist, $reason ) = $line =~ /^(\S*)\s*(?:#\s*(.*?)\s*)?$/;
69 next unless defined $dist && length $dist;
71 $hash->{$dist} = $reason ? "$sec_reason: $reason" : $reason;
76 for my $hit (@{ $res->{hits}{hits} }) {
77 my $dist = $hit->{fields}{distribution};
79 if exists $skip{$dist};
81 if $dist =~ /^(?:Task|Bundle|Acme)-/;
83 my $module = (sort { length $a <=> length $b || $a cmp $b } do {
84 if (my $provides = $hit->{fields}{provides}) {
85 ref $provides ? @$provides : ($provides);
87 elsif (my $provides = $hit->{fields}{'metadata.provides'}) {
91 (my $module = $dist) =~ s/-/::/g;
95 $todo_module{$module} = $todo{$dist}
96 if exists $todo{$dist};
97 push @modules, $module;
100 @modules = sort @modules;
102 my @args = grep { $_ ne '--show' } @ARGV;
103 my $show = @args != @ARGV;
104 my $pick = $ENV{MOO_TEST_MD} || shift @args || 'all';
106 if ( $pick eq 'MooX' ) {
107 @modules = grep /^MooX(?:$|::)/, @modules;
109 elsif ( $pick =~ /^\d+$/ ) {
110 my $count = $pick == 1 ? 200 : $pick;
112 Picking $count random dependents to test. Set MOO_TEST_MD=all to test all
113 dependents or MOO_TEST_MD=MooX to test extension modules only.
115 @modules = (List::Util::shuffle(@modules))[0 .. $count-1];
117 elsif ( $pick ne 'all' ) {
118 my @chosen = split /,/, $ENV{MOO_TEST_MD};
119 my %modules = map { $_ => 1 } @modules;
120 if (my @unknown = grep { !$modules{$_} } @chosen) {
121 die "Unknown modules: @unknown";
127 print "Dependents:\n";
128 print " $_\n" for @modules;
132 plan tests => scalar @modules;
133 for my $module (@modules) {
134 local $TODO = $todo_module{$module} || '???'
135 if exists $todo_module{$module};
136 test_module($module);
151 Thrift-API-HiveClient
159 Dancer2-Session-Sereal
160 Dancer-Plugin-FontSubset
162 DBIx-Class-IndexSearch-Dezi
164 Message-Passing-ZeroMQ
167 # TODO: broken by perl 5.18
168 App-DBCritic # 0.020 - smartmatch
169 App-OS-Detect-MachineCores # 0.038 - smartmatch
170 Authen-HTTP-Signature # 0.02 - smartmatch
171 DBICx-Backend-Move # 1.000010 - smartmatch
172 POEx-ZMQ3 # 0.060002 - smartmatch
173 Ruby-VersionManager # 0.004003 - smartmatch
174 Text-Keywords # 0.900 - smartmatch
175 Data-CloudWeights # v0.9.2
176 HTML-Zoom-Parser-HH5P # 0.002
177 Log-Message-Structured-Stringify-AsSereal # 0.10
179 # TODO: broken prereqs
181 DBIx-Table-TestDataGenerator
183 Perinci-Sub-Gen-AccessTable-DBI
185 # TODO: broken prereqs (perl 5.18)
186 App-Rssfilter # 0.03 - Data::Alias
187 App-Zapzi # 0.004 - HTTP::CookieJar
188 Code-Crypt # 0.001000 - Crypt::DES
189 Data-Sah # 0.15 - Regexp::Grammars
190 Language-Expr # 0.19 - Regexp::Grammars
191 Net-Icecast2 # 0.005 - PHP::HTTPBuildQuery (hash order)
192 Org-To-HTML # 0.07 - Language::Expr
193 POE-Component-ProcTerminator # 0.03 - Log::Fu
194 Perinci-Access-Simple-Server # 0.12 - Regexp::Grammars
195 Perinci-Sub-Gen-AccessTable # 0.19 - Regexp::Grammars
196 Software-Release-Watch # 0.01 - Data::Sah, Perinci::CmdLine
197 Software-Release-Watch-SW-wordpress # 0.01 - Software::Release::Watch
198 Tiezi-Robot # 0.12 - Data::Dump::Streamer, SOAP::Lite
199 WebService-HabitRPG # 0.19 - Data::Alias
203 Uninets-Check-Modules-HTTP
204 Uninets-Check-Modules-MongoDB
205 Uninets-Check-Modules-Redis
206 Net-OAuth-LP # pod coverage
208 # SKIP: invalid prereqs
209 Catmandu-Z3950 # 0.03 - ZOOM missing
210 Dancer2-Session-JSON # 0.001 - Dancer2 bad version requirement
213 Linux-AtaSmart # OS specific
214 Net-Works # 0.12 - prereq Math::Int128 (requires gcc 4.4)
215 XML-GrammarBase # v0.2.2 - prereq XML::LibXSLT (hard to install)
216 Forecast-IO # 0.21 - interactive tests
218 # TODO: broken by Moo change
219 Math-Rational-Approx # RT#84035
220 App-Services # RT#85255
221 Hg-Lib # pending release