e6cfb897c6579473756e2ec1077774c9a0ce5070
[gitmo/MooseX-Compiler.git] / t / lib / Test / MooseX / Compiler.pm
1 package Test::MooseX::Compiler;
2
3 use strict;
4 use warnings;
5 use autodie;
6
7 use Exporter qw( import );
8 use File::Temp qw( tempdir );
9 use Module::Runtime qw( module_notional_filename );
10 use Path::Class qw( dir );
11
12 our @EXPORT_OK = qw(
13     save_class
14     save_fragment
15 );
16
17 my $Dir = dir( tempdir( CLEANUP => 1 ) );
18
19 sub save_fragment {
20     my $class = shift;
21     my $code  = shift;
22
23     my $full_code = <<"EOF";
24 package $class;
25
26 use strict;
27 use warnings;
28
29 $code
30
31 1;
32 EOF
33
34     save_class($class, $full_code);
35 }
36
37 sub save_class {
38     my $class = shift;
39     my $code  = shift;
40
41     {
42         local $@;
43         eval $code;
44         die $@ if $@;
45     }
46
47     my $pm_file = module_notional_filename($class);
48     my $path    = $Dir->file($pm_file);
49     $path->dir()->mkpath( 0, 0755 );
50
51     open my $fh, '>', $path;
52     print {$fh} $code;
53     close $fh;
54
55     $INC{$pm_file} = $path;
56
57     return $pm_file;
58 }
59
60 1;