Work in progress on compiler. It's blowing up right now.
[gitmo/MooseX-Compiler.git] / t / constructor.t
1 use strict;
2 use warnings;
3
4 use lib 't/lib';
5
6 use Test::MooseX::Compiler qw( save_fragment code_compiles_ok );
7 use Test::More 0.88;
8
9 use MooseX::Compiler;
10
11 {
12     my $code = <<'EOF';
13 use Moose;
14
15 sub foo { 42 }
16 EOF
17
18     my $class = 'Test::Class1';
19     save_fragment( $class, $code );
20
21     my $compiler = MooseX::Compiler->new(
22         class => $class,
23     );
24
25     my $compiled = $compiler->compile_class();
26
27     like(
28         $compiled,
29         qr/sub new {.+\n}\n/s,
30         'compiled code has a constructor'
31     );
32
33     for my $module (qw( Scalar::Util Moose::Error::Util Carp )) {
34         like(
35             $compiled,
36             qr/^use \Q$module\E \(\);/m,
37             "compiled code loads $module"
38         );
39     }
40 }
41
42 {
43     my $code = <<'EOF';
44 use Moose;
45
46 has a1 => (
47     is      => 'ro',
48     default => 42,
49 );
50
51 sub foo { 84 }
52 EOF
53
54     my $class = 'Test::Class2';
55     save_fragment( $class, $code );
56
57     my $compiler = MooseX::Compiler->new(
58         class     => $class,
59         rename_to => 'Test::Class2::Compiled',
60     );
61
62     my $compiled = $compiler->compile_class();
63
64     like(
65         $compiled,
66         qr/sub new {.+\n}\n/s,
67         'compiled code has a constructor'
68     );
69
70     code_compiles_ok($compiled);
71
72     my $obj = Test::Class2::Compiled->new();
73     isa_ok( $obj, 'Test::Class2::Compiled', 'compiled object constructor' );
74     is( $obj->a1(), 'a1 attr defaults to 42' );
75     is( $obj->foo(), 84, 'foo method works' );
76 }
77
78 done_testing();