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