5694a071b2359c770588c12a4cf790f5b8d943a6
[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 foo);
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 "no warnings; $compiled";
52
53 die "Shit. failed.\n\n${compiled}\n\nError: $@" if $@;
54
55 use Data::Dumper::Concise;
56
57 my %compiled_src = map +($_ => join '', Dump(One->can($_))), qw(new DESTROY foo);
58
59 foreach my $method (qw(new DESTROY foo)) {
60   is($compiled_src{$method}, $orig_src{$method}, "${method} restored ok");
61 }
62
63 test_One;
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
71 #warn Dumper \%attr_refs;
72 #warn Dumper \%attr_et;
73 #warn Dumper $im_et;
74
75 done_testing;