Added code to fixup line numbers, inline constructor, and load modules that construct...
[gitmo/MooseX-Compiler.git] / t / fixup-line-numbers.t
1 use strict;
2 use warnings;
3
4 use lib 't/lib';
5
6 use Test::Requires {
7     'IPC::Run3' => 0,
8 };
9
10 use Test::MooseX::Compiler qw( save_class );
11 use Test::More 0.88;
12
13 use IPC::Run3 qw( run3 );
14
15 use MooseX::Compiler;
16
17 {
18     my $code = <<'EOF';
19 package Test::Class1;
20
21 use strict;
22 use warnings;
23
24 use Moose;
25
26 # should be line 9 below
27 sub line { return __LINE__ }
28
29 1;
30 EOF
31
32     my $class = 'Test::Class1';
33     save_class( $class, $code );
34
35     my $compiler = MooseX::Compiler->new(
36         class => $class,
37     );
38
39     my $compiled = $compiler->compile_class();
40
41     my $output;
42     my $error;
43
44     # We need to compile the code in a fresh process to see if the line
45     # numbers are correct.
46     run3(
47         [
48             $^X, '-e',
49             $compiled . "\npackage main;\nprint Test::Class1->line();"
50         ],
51         \undef,
52         \$output,
53         \$error,
54     );
55
56     die $error if defined $error && length $error;
57
58     is(
59         $output,
60         9,
61         'compilation does not break line numbers'
62     );
63 }
64
65 done_testing();