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