2 use warnings FATAL => 'all';
3 use MooseX::Antlers::Compiler;
9 use Data::Dumper::Concise;
10 use Data::Dump::Streamer;
12 my $compiler = MooseX::Antlers::Compiler->load_with_compiler('One');
16 local $meta->{methods}{meta};
21 &cmp_ok(One->get_called_foo, '==', @_); # cmp_ok has a $$$;$ proto
26 ok(One->can('foo'), 'foo accessor installed');
28 dies_ok { One->new } 'foo is required';
30 foo_called(0 => 'trigger not called yet');
32 my $one = One->new(foo => 1);
34 foo_called(1 => 'trigger called once (constructor)');
36 cmp_ok($one->foo, '==', 1, 'read ok');
38 foo_called(1 => 'trigger not called for read');
42 foo_called(2 => 'trigger called for setter');
45 my %orig_src = map +($_ => join '', Dump(One->can($_))), qw(new DESTROY foo);
47 One->meta->get_method_list; # fill cache
49 my $orig_meta = dump_meta One->meta;
53 my $compiled = $compiler->compiled_source;
55 #warn $compiled; done_testing; exit 0;
57 Class::Unload->unload('One');
58 Class::MOP::remove_metaclass_by_name('One');
60 io('/tmp/One.pmc')->print($compiled);
62 require '/tmp/One.pmc';
64 #eval "no warnings; $compiled";
66 #die "Shit. failed.\n\n${compiled}\n\nError: $@" if $@;
68 my %compiled_src = map +($_ => join '', Dump(One->can($_))), qw(new DESTROY foo);
70 foreach my $method (qw(new DESTROY foo)) {
71 is($compiled_src{$method}, $orig_src{$method}, "${method} restored ok");
74 my $compiled_meta = dump_meta One->meta;
78 #io('orig')->print($orig_meta);
79 #io('comp')->print($compiled_meta);
81 is($orig_meta, $compiled_meta, 'metaclass restored ok');
83 # write test_class method that checks method including call
85 # build compiled source
86 # eval compiled source
87 # run test_class after that as well as before unload
89 #warn Dumper \%attr_refs;
90 #warn Dumper \%attr_et;