2 use warnings FATAL => 'all';
4 use Test::Requires 'MooseX::SimpleConfig'; # skip all if not reuqired
5 use Test::More tests => 19;
7 use Test::Deep '!blessed';
8 use Test::NoWarnings 1.04 ':early';
9 use Scalar::Util 'blessed';
15 # nothing special going on here
19 with 'MooseX::SimpleConfig';
20 sub get_config_from_file
22 my ($class, $file) = @_;
23 $loaded_file{$file}++;
26 around BUILDARGS => sub {
27 my ($orig, $class) = (shift, shift);
28 my $args = $class->$orig(@_);
29 $constructor_args{$class} = $args;
33 my $class = blessed($_[0]) || $_[0];
40 my $obj = Generic->new_with_config;
41 is($obj->configfile, undef, 'no configfile set');
42 cmp_deeply(\%loaded_file, {}, 'no files loaded');
44 $constructor_args{blessed($obj)},
46 'correct constructor args passed',
54 # this is a classic legacy usecase from old documentation that we must
57 package OverriddenDefault;
60 has '+configfile' => (
61 default => 'OverriddenDefault file',
67 my $obj = OverriddenDefault->new_with_config;
68 is($obj->configfile, blessed($obj) . ' file', 'configfile set via overridden default');
69 is($loaded_file{blessed($obj) . ' file'}, 1, 'correct file was loaded from');
75 # legacy usecase, and configfile init_arg has been changed
77 package OverriddenDefaultAndChangedName;
80 has '+configfile' => (
81 init_arg => 'my_configfile',
82 default => 'OverriddenDefaultAndChangedName file',
88 my $obj = OverriddenDefaultAndChangedName->new_with_config;
89 is($obj->configfile, blessed($obj) . ' file', 'configfile set via overridden default');
91 $constructor_args{blessed($obj)},
92 { my_configfile => blessed($obj) . ' file' },
93 'correct constructor args passed',
95 is($loaded_file{blessed($obj) . ' file'}, 1, 'correct file was loaded from');
101 # "reader" method is overridden to provide for configfile default
103 package OverriddenMethod;
106 around configfile => sub { my $orig = shift; shift->__my_configfile };
111 my $obj = OverriddenMethod->new_with_config;
112 is($obj->configfile, blessed($obj) . ' file', 'configfile set via overridden sub');
113 is($loaded_file{blessed($obj) . ' file'}, 1, 'correct file was loaded from');
120 # overridable method for configfile default, and configfile init_arg is changed
122 package OverriddenMethodAndChangedName;
125 has '+configfile' => (
126 init_arg => 'my_configfile',
128 around configfile => sub { my $orig = shift; shift->__my_configfile };
133 my $obj = OverriddenMethodAndChangedName->new_with_config;
134 is($obj->configfile, blessed($obj) . ' file', 'configfile set via overridden sub');
136 $constructor_args{blessed($obj)},
137 { my_configfile => blessed($obj) . ' file' },
138 'correct constructor args passed',
140 is($loaded_file{blessed($obj) . ' file'}, 1, 'correct file was loaded from');