Commit | Line | Data |
7acf2fe9 |
1 | use strict; |
bd567467 |
2 | use warnings FATAL => 'all'; |
7acf2fe9 |
3 | |
0864e862 |
4 | use Test::Requires 'MooseX::SimpleConfig'; # skip all if not reuqired |
233548dd |
5 | use Test::More tests => 11; |
7acf2fe9 |
6 | use Test::Fatal; |
7 | use Test::Deep '!blessed'; |
8 | use Test::NoWarnings 1.04 ':early'; |
9 | use Scalar::Util 'blessed'; |
10 | |
11 | my %loaded_file; |
12 | my %default_sub; |
13 | |
14 | |
15 | # nothing special going on here |
16 | { |
17 | package Generic; |
18 | use Moose; |
19 | with 'MooseX::SimpleConfig'; |
233548dd |
20 | sub get_config_from_file |
21 | { |
22 | my ($class, $file) = @_; |
23 | $loaded_file{$file}++; |
24 | +{} |
25 | } |
7acf2fe9 |
26 | } |
27 | |
28 | is( |
29 | exception { |
30 | my $obj = Generic->new_with_config; |
31 | is($obj->configfile, undef, 'no configfile set'); |
233548dd |
32 | cmp_deeply(\%loaded_file, {}, 'no files loaded'); |
7acf2fe9 |
33 | }, |
34 | undef, |
35 | 'no exceptions', |
36 | ); |
37 | |
38 | |
39 | # this is a classic legacy usecase from old documentation that we must |
40 | # continue to support |
41 | { |
42 | package OverriddenDefault; |
43 | use Moose; |
233548dd |
44 | extends 'Generic'; |
7acf2fe9 |
45 | has '+configfile' => ( |
46 | default => 'OverriddenDefault file', |
47 | ); |
48 | } |
49 | |
50 | is( |
51 | exception { |
52 | my $obj = OverriddenDefault->new_with_config; |
53 | is($obj->configfile, blessed($obj) . ' file', 'configfile set via overridden default'); |
54 | is($loaded_file{blessed($obj) . ' file'}, 1, 'correct file was loaded from'); |
55 | }, |
56 | undef, |
57 | 'no exceptions', |
58 | ); |
59 | |
60 | |
61 | # "reader" method is overridden to provide for configfile default |
62 | { |
63 | package OverriddenMethod; |
64 | use Moose; |
233548dd |
65 | extends 'Generic'; |
7acf2fe9 |
66 | around configfile => sub { |
67 | my $class = blessed($_[1]) || $_[1]; |
68 | $default_sub{$class}++; |
69 | $class . ' file' |
70 | }; |
71 | } |
72 | |
73 | is( |
74 | exception { |
75 | my $obj = OverriddenMethod->new_with_config; |
76 | is($obj->configfile, blessed($obj) . ' file', 'configfile set via overridden sub'); |
77 | ok($default_sub{blessed($obj)}, 'default sub was called'); |
78 | is($loaded_file{blessed($obj) . ' file'}, 1, 'correct file was loaded from'); |
79 | }, |
80 | undef, |
81 | 'no exceptions', |
82 | ); |
83 | |
84 | |