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 one);
+my %orig_src = map +($_ => join '', Dump(One->can($_))), qw(new DESTROY foo);
-my $orig_foo_meta = Dump(One->meta);
+One->meta->get_method_list; # fill cache
-test_One();
+my $orig_meta = dump_meta One->meta;
-use Data::Dump::Streamer;
+test_One();
my $compiled = $compiler->compiled_source;
Class::Unload->unload('One');
Class::MOP::remove_metaclass_by_name('One');
-eval $compiled; die "Shit. failed.\n\n${compiled}\n\nError: $@" if $@;
+io('/tmp/One.pmc')->print($compiled);
-use Data::Dumper::Concise;
+require '/tmp/One.pmc';
+
+#eval "no warnings; $compiled";
-my %compiled_src = map +($_ => join '', Dump(One->can($_))), qw(new DESTROY one);
+#die "Shit. failed.\n\n${compiled}\n\nError: $@" if $@;
-#foreach my $method (qw(new DESTROY one)) {
-# is($compiled_src{$method}, $orig_src{$method}, "${method} restored ok");
-#}
+my %compiled_src = map +($_ => join '', Dump(One->can($_))), qw(new DESTROY foo);
+
+foreach my $method (qw(new DESTROY foo)) {
+ is($compiled_src{$method}, $orig_src{$method}, "${method} restored ok");
+}
+
+my $compiled_meta = dump_meta One->meta;
test_One;
+#io('orig')->print($orig_meta);
+#io('comp')->print($compiled_meta);
+
+is($orig_meta, $compiled_meta, 'metaclass restored ok');
+
# write test_class method that checks method including call
# Class::Unload One
# build compiled source