verify with Data::Dump::Streamer
[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
de39aa89 36my %orig_src = map +($_ => join '', Dump(One->can($_))), qw(new DESTROY foo);
064721e6 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
de39aa89 51eval "no warnings; $compiled";
52
53die "Shit. failed.\n\n${compiled}\n\nError: $@" if $@;
064721e6 54
55use Data::Dumper::Concise;
56
de39aa89 57my %compiled_src = map +($_ => join '', Dump(One->can($_))), qw(new DESTROY foo);
064721e6 58
de39aa89 59foreach my $method (qw(new DESTROY foo)) {
60 is($compiled_src{$method}, $orig_src{$method}, "${method} restored ok");
61}
064721e6 62
63test_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
75done_testing;