1use strict; 2use warnings; 3use Test::More; 4use HTML::FormHandler::Test; 5 6{ 7 package MyApp::Form::Nested::View; 8 use HTML::FormHandler::Moose::Role; 9 10 sub build_render_list { ['fset1'] } 11 has_block 'fset1' => ( tag => 'fieldset', label => 'First Fieldset', 12 render_list => ['foo', 'bar', 'pax', 'fset1.sub1', 'fset1.sub2'], 13 ); 14 has_block 'fset1.sub1' => ( tag => 'div', label => 'More Stuff', 15 class => ['sub1'], 16 render_list => ['fee', 'fie', 'fo'], 17 ); 18 has_block 'fset1.sub2' => ( tag => 'div', label => 'And Even More', 19 class => ['sub2'], 20 render_list => ['fum', 'man'], 21 ); 22 23} 24{ 25 package MyApp::Form::Nested; 26 use HTML::FormHandler::Moose; 27 extends 'HTML::FormHandler'; 28 with 'MyApp::Form::Nested::View'; 29 30 has '+name' => ( default => 'nested_form' ); 31 has_field 'foo'; 32 has_field 'bar'; 33 has_field 'pax'; 34 has_field 'fee'; 35 has_field 'fie'; 36 has_field 'fo'; 37 has_field 'fum'; 38 has_field 'man'; 39 40} 41 42my $form = MyApp::Form::Nested->new; 43ok( $form, 'form built' ); 44$form->process; 45my $rendered = $form->render; 46my $expected = 47'<form id="nested_form" method="post"> 48 <div class="form_messages"></div> 49 <fieldset><legend>First Fieldset</legend> 50 <div> 51 <label for="foo">Foo</label> 52 <input type="text" id="foo" name="foo" value=""> 53 </div> 54 <div> 55 <label for="bar">Bar</label> 56 <input type="text" id="bar" name="bar" value=""> 57 </div> 58 <div> 59 <label for="pax">Pax</label> 60 <input type="text" id="pax" name="pax" value=""> 61 </div> 62 <div class="sub1"> 63 <span>More Stuff</span> 64 <div> 65 <label for="fee">Fee</label> 66 <input type="text" id="fee" name="fee" value=""> 67 </div> 68 <div> 69 <label for="fie">Fie</label> 70 <input type="text" id="fie" name="fie" value=""> 71 </div> 72 <div> 73 <label for="fo">Fo</label> 74 <input type="text" id="fo" name="fo" value=""> 75 </div> 76 </div> 77 <div class="sub2"> 78 <span>And Even More</span> 79 <div> 80 <label for="fum">Fum</label> 81 <input type="text" id="fum" name="fum" value=""> 82 </div> 83 <div> 84 <label for="man">Man</label> 85 <input type="text" id="man" name="man" value=""> 86 </div> 87 </div> 88 </fieldset> 89</form>'; 90is_html( $rendered, $expected, 'got expected rendering' ); 91 92done_testing; 93