Commit | Line | Data |
a39b801f |
1 | use strict; |
2 | use warnings FATAL => 'all'; |
5bd097e7 |
3 | use MooseX::Antlers::Compiler; |
a39b801f |
4 | use lib 't/lib'; |
5 | use Test::More; |
064721e6 |
6 | use Test::Exception; |
7 | use Class::Unload; |
5bd097e7 |
8 | |
9 | my $compiler = MooseX::Antlers::Compiler->load_with_compiler('One'); |
a39b801f |
10 | |
064721e6 |
11 | sub foo_called { |
12 | &cmp_ok(One->get_called_foo, '==', @_); # cmp_ok has a $$$;$ proto |
13 | } |
14 | |
15 | sub 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 | |
de39aa89 |
36 | my %orig_src = map +($_ => join '', Dump(One->can($_))), qw(new DESTROY foo); |
064721e6 |
37 | |
38 | my $orig_foo_meta = Dump(One->meta); |
39 | |
40 | test_One(); |
a39b801f |
41 | |
42 | use Data::Dump::Streamer; |
43 | |
5bd097e7 |
44 | my $compiled = $compiler->compiled_source; |
064721e6 |
45 | |
46 | #warn $compiled; done_testing; exit 0; |
47 | |
48 | Class::Unload->unload('One'); |
49 | Class::MOP::remove_metaclass_by_name('One'); |
50 | |
de39aa89 |
51 | eval "no warnings; $compiled"; |
52 | |
53 | die "Shit. failed.\n\n${compiled}\n\nError: $@" if $@; |
064721e6 |
54 | |
55 | use Data::Dumper::Concise; |
56 | |
de39aa89 |
57 | my %compiled_src = map +($_ => join '', Dump(One->can($_))), qw(new DESTROY foo); |
064721e6 |
58 | |
de39aa89 |
59 | foreach my $method (qw(new DESTROY foo)) { |
60 | is($compiled_src{$method}, $orig_src{$method}, "${method} restored ok"); |
61 | } |
064721e6 |
62 | |
63 | test_One; |
a39b801f |
64 | |
65 | # write test_class method that checks method including call |
66 | # Class::Unload One |
67 | # build compiled source |
68 | # eval compiled source |
69 | # run test_class after that as well as before unload |
70 | |
a39b801f |
71 | #warn Dumper \%attr_refs; |
064721e6 |
72 | #warn Dumper \%attr_et; |
73 | #warn Dumper $im_et; |
a39b801f |
74 | |
75 | done_testing; |