665a51211257bcc61384aafdc05a13391f735ad4
[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 );
15
16 my $Dir = dir( tempdir( CLEANUP => 1 ) );
17
18 sub save_class {
19     my $class = shift;
20     my $code  = shift;
21
22     my $full_code = <<"EOF";
23 package $class;
24
25 use strict;
26 use warnings;
27
28 $code
29
30 1;
31 EOF
32
33     {
34         local $@;
35         eval $full_code;
36         die $@ if $@;
37     }
38
39     my $pm_file = module_notional_filename($class);
40     my $path    = $Dir->file($pm_file);
41     $path->dir()->mkpath( 0, 0755 );
42
43     open my $fh, '>', $path;
44     print {$fh} $full_code;
45     close $fh;
46
47     $INC{$pm_file} = $path;
48
49     return $pm_file;
50 }
51
52 1;