2 use warnings FATAL => 'all';
3 use MooseX::Antlers::Compiler;
9 use Data::Dumper::Concise;
10 use Data::Dump::Streamer;
14 local $meta->{methods}{meta};
19 &cmp_ok(One->get_called_foo, '==', @_); # cmp_ok has a $$$;$ proto
24 ok(One->can('foo'), 'foo accessor installed');
26 dies_ok { One->new } 'foo is required';
28 foo_called(0 => 'trigger not called yet');
30 my $one = One->new(foo => 1);
32 foo_called(1 => 'trigger called once (constructor)');
34 cmp_ok($one->foo, '==', 1, 'read ok');
36 foo_called(1 => 'trigger not called for read');
40 foo_called(2 => 'trigger called for setter');
44 test_class($class, \&test_One);
47 my ($class, $test) = @_;
49 my $compiler = MooseX::Antlers::Compiler->load_with_compiler($class);
52 my %orig_src = map +($_ => join '', Dump($class->can($_))), qw(new DESTROY foo);
54 $class->meta->get_method_list; # fill cache
56 my $orig_meta = dump_meta $class->meta;
60 my $compiled = $compiler->compiled_source;
62 #warn $compiled; done_testing; exit 0;
64 Class::Unload->unload($class);
65 Class::MOP::remove_metaclass_by_name($class);
67 io("/tmp/$class.pmc")->print($compiled);
69 require "/tmp/$class.pmc";
71 #eval "no warnings; $compiled";
73 #die "Shit. failed.\n\n${compiled}\n\nError: $@" if $@;
75 my %compiled_src = map +($_ => join '', Dump($class->can($_))), qw(new DESTROY foo);
78 foreach my $method (qw(new DESTROY foo)) {
79 is($compiled_src{$method}, $orig_src{$method}, "${method} restored ok");
82 my $compiled_meta = dump_meta $class->meta;
86 #io('orig')->print($orig_meta);
87 #io('comp')->print($compiled_meta);
89 is($orig_meta, $compiled_meta, 'metaclass restored ok');
91 Class::Unload->unload($class);
92 Class::MOP::remove_metaclass_by_name($class);