make comments and doctypes get passed through
[catagits/HTML-Zoom.git] / t / synopsis.t
1 use strict;
2 use warnings FATAL => 'all';
3 use Test::More qw(no_plan);
4
5 use HTML::Zoom;
6 my $template = <<HTML;
7 <html>
8   <head>
9     <title>Hello people</title>
10   </head>
11   <body>
12     <h1 id="greeting">Placeholder</h1>
13     <div id="list">
14       <span>
15         <p>Name: <span class="name">Bob</span></p>
16         <p>Age: <span class="age">23</span></p>
17       </span>
18       <hr class="between" />
19     </div>
20   </body>
21 </html>
22 HTML
23 my $output = HTML::Zoom
24   ->from_html($template)
25   ->select('title, #greeting')->replace_content('Hello world & dog!')
26   ->select('#list')->repeat_content(
27       [
28         sub {
29           $_->select('.name')->replace_content('Matt')
30             ->select('.age')->replace_content('26')
31         },
32         sub {
33           $_->select('.name')->replace_content('Mark')
34             ->select('.age')->replace_content('0x29')
35         },
36         sub {
37           $_->select('.name')->replace_content('Epitaph')
38             ->select('.age')->replace_content('<redacted>')
39         },
40       ],
41       { repeat_between => '.between' }
42     )
43   ->to_html;
44 my $expect = <<HTML;
45 <html>
46   <head>
47     <title>Hello world &amp; dog!</title>
48   </head>
49   <body>
50     <h1 id="greeting">Hello world &amp; dog!</h1>
51     <div id="list">
52       <span>
53         <p>Name: <span class="name">Matt</span></p>
54         <p>Age: <span class="age">26</span></p>
55       </span>
56       <hr class="between" />
57       <span>
58         <p>Name: <span class="name">Mark</span></p>
59         <p>Age: <span class="age">0x29</span></p>
60       </span>
61       <hr class="between" />
62       <span>
63         <p>Name: <span class="name">Epitaph</span></p>
64         <p>Age: <span class="age">&lt;redacted&gt;</span></p>
65       </span>
66       
67     </div>
68   </body>
69 </html>
70 HTML
71 is($output, $expect, 'Synopsis code works ok');;