use Test::More;
use Test::Exception;
use Class::Unload;
+use IO::All;
+use Data::Dumper::Concise;
+use Data::Dump::Streamer;
-my $compiler = MooseX::Antlers::Compiler->load_with_compiler('One');
+sub dump_meta {
+ my $meta = $_[0];
+ local $meta->{methods}{meta};
+ join '', Dump($meta);
+}
sub foo_called {
&cmp_ok(One->get_called_foo, '==', @_); # cmp_ok has a $$$;$ proto
foo_called(2 => 'trigger called for setter');
}
-my %orig_src = map +($_ => join '', Dump(One->can($_))), qw(new DESTROY foo);
+my $class = 'One';
+test_class($class, \&test_One);
-my $orig_foo_meta = Dump(One->meta);
+sub test_class {
+ my ($class, $test) = @_;
-test_One();
+ my $compiler = MooseX::Antlers::Compiler->load_with_compiler($class);
-use Data::Dump::Streamer;
+ # FIXME - foo
+ my %orig_src = map +($_ => join '', Dump($class->can($_))), qw(new DESTROY foo);
-my $compiled = $compiler->compiled_source;
+ $class->meta->get_method_list; # fill cache
-#warn $compiled; done_testing; exit 0;
+ my $orig_meta = dump_meta $class->meta;
-Class::Unload->unload('One');
-Class::MOP::remove_metaclass_by_name('One');
+ $test->($class);
-eval "no warnings; $compiled";
+ my $compiled = $compiler->compiled_source;
-die "Shit. failed.\n\n${compiled}\n\nError: $@" if $@;
+ #warn $compiled; done_testing; exit 0;
-use Data::Dumper::Concise;
+ Class::Unload->unload($class);
+ Class::MOP::remove_metaclass_by_name($class);
-my %compiled_src = map +($_ => join '', Dump(One->can($_))), qw(new DESTROY foo);
+ io("/tmp/$class.pmc")->print($compiled);
-foreach my $method (qw(new DESTROY foo)) {
- is($compiled_src{$method}, $orig_src{$method}, "${method} restored ok");
-}
+ require "/tmp/$class.pmc";
+
+ #eval "no warnings; $compiled";
-test_One;
+ #die "Shit. failed.\n\n${compiled}\n\nError: $@" if $@;
-# write test_class method that checks method including call
-# Class::Unload One
-# build compiled source
-# eval compiled source
-# run test_class after that as well as before unload
+ my %compiled_src = map +($_ => join '', Dump($class->can($_))), qw(new DESTROY foo);
-#warn Dumper \%attr_refs;
-#warn Dumper \%attr_et;
-#warn Dumper $im_et;
+ # FIXME - foo
+ foreach my $method (qw(new DESTROY foo)) {
+ is($compiled_src{$method}, $orig_src{$method}, "${method} restored ok");
+ }
+
+ my $compiled_meta = dump_meta $class->meta;
+
+ $test->($class);
+
+ #io('orig')->print($orig_meta);
+ #io('comp')->print($compiled_meta);
+
+ is($orig_meta, $compiled_meta, 'metaclass restored ok');
+
+ Class::Unload->unload($class);
+ Class::MOP::remove_metaclass_by_name($class);
+}
done_testing;