factor out compiler code
[gitmo/MooseX-Antlers.git] / t / one.t
1 use strict;
2 use warnings FATAL => 'all';
3 use MooseX::Antlers::Compiler;
4 use lib 't/lib';
5 use Test::More;
6 use Test::Exception;
7 use Class::Unload;
8
9 my $compiler = MooseX::Antlers::Compiler->load_with_compiler('One');
10
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
36 my %orig_src = map +($_ => join '', Dump(One->can($_))), qw(new DESTROY one);
37
38 my $orig_foo_meta = Dump(One->meta);
39
40 test_One();
41
42 use Data::Dump::Streamer;
43
44 my $compiled = $compiler->compiled_source;
45
46 #warn $compiled; done_testing; exit 0;
47
48 Class::Unload->unload('One');
49 Class::MOP::remove_metaclass_by_name('One');
50
51 eval $compiled; die "Shit. failed.\n\n${compiled}\n\nError: $@" if $@;
52
53 use Data::Dumper::Concise;
54
55 my %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
61 test_One;
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
69 #warn Dumper \%attr_refs;
70 #warn Dumper \%attr_et;
71 #warn Dumper $im_et;
72
73 done_testing;