reuse common testing code in a base class
[gitmo/MooseX-ConfigFromFile.git] / t / 05_default_sub.t
1 use strict;
2 use warnings FATAL => 'all';
3
4 use Test::Requires 'MooseX::SimpleConfig';      # skip all if not reuqired
5 use Test::More tests => 11;
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';
20     sub get_config_from_file
21     {
22         my ($class, $file) = @_;
23         $loaded_file{$file}++;
24         +{}
25     }
26 }
27
28 is(
29     exception {
30         my $obj = Generic->new_with_config;
31         is($obj->configfile, undef, 'no configfile set');
32         cmp_deeply(\%loaded_file, {}, 'no files loaded');
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;
44     extends 'Generic';
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;
65     extends 'Generic';
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