Commit | Line | Data |
0bdc9d38 |
1 | #!/usr/bin/perl -w |
2 | use 5.10.0; |
3 | use strict; |
4 | use warnings FATAL => 'all'; |
5 | use File::Path qw(mkpath); |
6 | use File::Find; |
7 | use autodie; |
8 | |
9 | my($moose_dir, $result) = @ARGV; |
10 | unless(defined $moose_dir and -d "$moose_dir/t") { |
11 | die "Usage: $0 Moose-dir result-dir\n"; |
12 | } |
13 | $result //= 'Moose-test'; |
14 | if(-e $result) { |
15 | die "'$result' exists, stopped"; |
16 | } |
17 | |
18 | my @tests; |
19 | sub wanted { |
20 | (my $mouse_test = $_) =~ s{\A $moose_dir/t }{$result}xmso; |
21 | (my $mouse_failing_test = $_) =~ s{\A $moose_dir/t }{$result-failing}xmso; |
22 | if( -d $_ ) { |
23 | mkpath [$mouse_test, $mouse_failing_test]; |
24 | return; |
25 | } |
26 | copy_as_mouse($_ => $mouse_test); |
27 | push @tests, [$mouse_test, $mouse_failing_test] |
28 | if $mouse_test =~/\.t\z/xms; |
29 | return; |
30 | } |
31 | |
32 | find { wanted => \&wanted, no_chdir => 1 }, "$moose_dir/t/"; |
33 | |
34 | say "Testing ..."; |
35 | |
36 | $ENV{PERL5LIB} = join ':', "$result/lib", @INC; |
37 | |
38 | my $ok = 0; |
39 | foreach my $t(sort { $b cmp $a } @tests) { |
40 | my($t, $fail) = @{$t}; |
41 | if(system(qq{$^X $t 2>&1 >/dev/null}) == 0) { |
42 | say "$t ... ok"; |
43 | $ok++; |
44 | } |
45 | else { |
46 | # make it TODO and retyr it |
47 | open my $in,'<', $t; |
48 | open my $out, '>', "/tmp/retry.t.$$"; |
49 | while(<$in>) { |
50 | print $out $_; |
51 | /use Test::More/ |
52 | && say $out '$TODO = q{Mouse is not yet completed};'; |
53 | } |
54 | close $in; |
55 | close $out; |
56 | |
57 | rename "/tmp/retry.t.$$", $t; |
58 | |
59 | if(system(qq{$^X $t 2>&1 >/dev/null}) == 0) { |
60 | say "$t ... ok (TODO)"; |
61 | $ok++; |
62 | } |
63 | else { |
64 | say "$t ... not ok"; |
65 | rename $t, $fail; |
66 | } |
67 | } |
68 | } |
69 | say sprintf "%d %% (%d/%d) succeed.", ($ok/@tests)*100, $ok, scalar @tests; |
70 | |
71 | sub copy_as_mouse { |
72 | my($moose, $mouse) = @_; |
73 | open my $in, '<', $moose; |
74 | open my $out, '>', $mouse; |
75 | |
76 | while(<$in>) { |
77 | if($. == 2) { |
78 | say $out 'use t::lib::MooseCompat;'; |
79 | } |
80 | s/\b Class::MOP::([a-z_]+) \b/Mouse::Util::$1/xmsg; |
81 | s/\b Class::MOP \b /Mouse::Meta/xmsg; |
82 | s/\b Moose \b/Mouse/xmsg; |
83 | |
84 | # make classes simple |
85 | s{\b(Mouse::Meta::TypeConstraint)::\w+ }{$1}xmsg; |
86 | s{\b(Mouse::Meta::Role::Application)::\w+ }{$1}xmsg; |
87 | s{\b(Mouse::Meta::Method)::\w+ }{$1}xmsg; |
88 | |
89 | print $out $_; |
90 | } |
91 | close $in; |
92 | close $out; |
93 | } |