Regenerate test files
[gitmo/Mouse.git] / author / import-moose-test.pl
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 //= 't';
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) {
75             say $out "# This is automatically generated by $0.";
76             say $out "# DO NOT EDIT THIS FILE. ANY CHANGES WILL BE LOST!!!";
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 }