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