factor out compiler code
[gitmo/MooseX-Antlers.git] / t / one.t
CommitLineData
a39b801f 1use strict;
2use warnings FATAL => 'all';
5bd097e7 3use MooseX::Antlers::Compiler;
a39b801f 4use lib 't/lib';
5use Test::More;
064721e6 6use Test::Exception;
7use Class::Unload;
5bd097e7 8
9my $compiler = MooseX::Antlers::Compiler->load_with_compiler('One');
a39b801f 10
064721e6 11sub foo_called {
12 &cmp_ok(One->get_called_foo, '==', @_); # cmp_ok has a $$$;$ proto
13}
14
15sub test_One {
16
17 ok(One->can('foo'), 'foo accessor installed');
18
19 dies_ok { One->new } 'foo is required';
20
21 foo_called(0 => 'trigger not called yet');
22
23 my $one = One->new(foo => 1);
24
25 foo_called(1 => 'trigger called once (constructor)');
26
27 cmp_ok($one->foo, '==', 1, 'read ok');
28
29 foo_called(1 => 'trigger not called for read');
30
31 $one->foo(2);
32
33 foo_called(2 => 'trigger called for setter');
34}
35
36my %orig_src = map +($_ => join '', Dump(One->can($_))), qw(new DESTROY one);
37
38my $orig_foo_meta = Dump(One->meta);
39
40test_One();
a39b801f 41
42use Data::Dump::Streamer;
43
5bd097e7 44my $compiled = $compiler->compiled_source;
064721e6 45
46#warn $compiled; done_testing; exit 0;
47
48Class::Unload->unload('One');
49Class::MOP::remove_metaclass_by_name('One');
50
51eval $compiled; die "Shit. failed.\n\n${compiled}\n\nError: $@" if $@;
52
53use Data::Dumper::Concise;
54
55my %compiled_src = map +($_ => join '', Dump(One->can($_))), qw(new DESTROY one);
56
57#foreach my $method (qw(new DESTROY one)) {
58# is($compiled_src{$method}, $orig_src{$method}, "${method} restored ok");
59#}
60
61test_One;
a39b801f 62
63# write test_class method that checks method including call
64# Class::Unload One
65# build compiled source
66# eval compiled source
67# run test_class after that as well as before unload
68
a39b801f 69#warn Dumper \%attr_refs;
064721e6 70#warn Dumper \%attr_et;
71#warn Dumper $im_et;
a39b801f 72
73done_testing;