1use strict;
2use warnings;
3
4use Test::More;
5
6use lib 't/lib';
7
8{
9  package CMRFBA;
10  use Moose;
11  extends 'Config::MVP::Assembler';
12  with 'Config::MVP::Assembler::WithBundles';
13}
14
15{
16  package CMRFB;
17  use Moose;
18  extends 'Config::MVP::Reader::Hash';
19
20  sub build_assembler { CMRFBA->new; }
21}
22
23{
24  my $config = CMRFB->new->read_config({
25    'Foo::Bar' => {
26      x => 1,
27      y => [ 2, 4 ],
28      z => 3,
29    },
30    'bz' => {
31      __package => 'Foo::Baz',
32      single => 1,
33      multi  => [ 2, 3 ],
34    },
35    'Foo::Metaboondle' => { },
36    'Foo::Quux' => {
37      a => 1,
38      b => 2,
39      c => 3,
40    }
41  });
42
43  my @sections = $config->sections;
44
45  is(@sections, 7, "there are seven sections");
46
47  @sections = sort { lc $a->name cmp lc $b->name } @sections;
48  my ($b_1, $b_2, $b_3, $b_b, $baz, $bar, $quux) = @sections;
49
50  is($bar->name,     'Foo::Bar',  '1st is Foo::Bar (name)');
51  is($bar->package,  'Foo::Bar',  '1st is Foo::Bar (pkg)');
52
53  is($baz->name,     'bz',        '2nd is bz (name)');
54  is($baz->package,  'Foo::Baz',  '2nd is Foo::Baz (pkg)');
55
56  is($b_1->name,     'boondle_1', '2nd is boondle_1 (name)');
57  is($b_1->package,  'Foo::Boo1', '2nd is Foo::Boo1 (pkg)');
58
59  is($b_2->name,     'boondle_2', '2nd is boondle_2 (name)');
60  is($b_2->package,  'Foo::Boo2', '2nd is Foo::Boo2 (pkg)');
61
62  is($b_b->name,     'boondle_B', '3rd is boondle_B (name)');
63  is($b_b->package,  'Foo::Bar',  '3rd is Foo::Bar (pkg)');
64
65  is($b_3->name,     'boondle_3', '4th is boondle_3 (name)');
66  is($b_3->package,  'Foo::Boo2', '4th is Foo::Boo2 (pkg)');
67
68  is($quux->name,    'Foo::Quux', '5th is Foo::Quux (name)');
69  is($quux->package, 'Foo::Quux', '5th is Foo::Quux (pkg)');
70}
71
72{
73  my $config = CMRFB->new->read_config({
74    'Foo::BoondleHref' => { },
75  });
76
77  my @sections = $config->sections;
78  is(@sections, 3, "we get 2 sections");
79  is_deeply(
80    $sections[2]->payload,
81    { y => [ 1, 2, 3 ] },
82    "boondle_B has expected contents",
83  );
84}
85
86{
87  my $config = CMRFB->new->read_config({
88    'Foo::BoondleHref' => { },
89  });
90
91  my @sections = $config->sections;
92  is(@sections, 3, "we get 2 sections");
93  is_deeply(
94    $sections[2]->payload,
95    { y => [ 1, 2, 3 ] },
96    "boondle_B has expected contents",
97  );
98}
99
100done_testing;
101