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(shift->get_called_foo, '==', @_); # cmp_ok has a $$$;$ proto
25 ok($class->can('foo'), $class . ' foo accessor installed');
27 dies_ok { $class->new } $class . ' foo is required';
29 foo_called($class, 0 => $class . ' trigger not called yet');
31 my $i = $class->new(foo => 1);
33 foo_called($class, 1 => $class . ' trigger called once (constructor)');
35 cmp_ok($i->foo, '==', 1, $class . ' read ok');
37 foo_called($class, 1 => $class . ' trigger not called for read');
41 foo_called($class, 2 => $class . ' trigger called for setter');
44 test_class('One', \&test_One);
45 test_class('Two', \&test_One);
46 test_class('Three', \&test_One);
49 my ($class, $test) = @_;
51 my $compiler = MooseX::Antlers::Compiler->load_with_compiler($class);
54 my %orig_src = map +($_ => join '', Dump($class->can($_))), qw(new DESTROY foo);
56 $class->meta->get_method_list; # fill cache
58 my $orig_meta = dump_meta $class->meta;
62 my $compiled = $compiler->compiled_source;
64 #warn $compiled; done_testing; exit 0;
66 Class::Unload->unload($class);
67 Class::MOP::remove_metaclass_by_name($class);
69 io("/tmp/$class.pmc")->print($compiled);
71 require "/tmp/$class.pmc";
73 #eval "no warnings; $compiled";
75 #die "Shit. failed.\n\n${compiled}\n\nError: $@" if $@;
77 my %compiled_src = map +($_ => join '', Dump($class->can($_))), qw(new DESTROY foo);
80 foreach my $method (qw(new DESTROY foo)) {
81 is($compiled_src{$method}, $orig_src{$method}, "${method} restored ok");
84 my $compiled_meta = dump_meta $class->meta;
88 #io('orig')->print($orig_meta);
89 #io('comp')->print($compiled_meta);
91 is($orig_meta, $compiled_meta, $class . ' metaclass restored ok');
93 Class::Unload->unload($class);
94 Class::MOP::remove_metaclass_by_name($class);