9933e43b315df52e5428fc40cd1ca4d1a33cf329
[catagits/HTML-Zoom.git] / t / selectors.t
1 use strict;
2 #use warnings FATAL => 'all';
3 use Test::More;
4
5 use HTML::Zoom;
6
7 my $tmpl = <<END;
8 <body>
9   <div class="main">
10     <span prop='moo' class="hilight name">Bob</span>
11     <span class="career">Builder</span>
12     <hr />
13   </div>
14 </body>
15 END
16
17 my $stub = '<div class="waargh"></div>';
18
19 # el#id
20 is( HTML::Zoom->from_html('<div id="yo"></div>'.$stub)
21    ->select('div#yo')
22       ->replace_content('grg')
23    ->to_html,
24    '<div id="yo">grg</div>'.$stub,
25    'E#id works' );
26
27 # el.class1
28 is( HTML::Zoom->from_html('<div class="yo"></div>'.$stub)
29    ->select('div.yo')
30       ->replace_content('grg')
31    ->to_html,
32    '<div class="yo">grg</div>'.$stub,
33    'E.class works' );
34
35 # el[attr]
36 is( HTML::Zoom->from_html('<div frew="yo"></div>'.$stub)
37    ->select('div[frew]')
38       ->replace_content('grg')
39    ->to_html,
40    '<div frew="yo">grg</div>'.$stub,
41    'E[attr] works' );
42
43 # el[attr="foo"]
44 is( HTML::Zoom->from_html('<div frew="yo"></div>'.$stub)
45    ->select('div[frew="yo"]')
46       ->replace_content('grg')
47    ->to_html,
48    '<div frew="yo">grg</div>'.$stub,
49    'E[attr="val"] works' );
50
51 # el[attr=foo]
52 is( HTML::Zoom->from_html('<div frew="yo"></div>'.$stub)
53     ->select('div[frew=yo]')
54     ->replace_content('grg')
55     ->to_html,
56     '<div frew="yo">grg</div>'.$stub,
57     'E[attr=val] works' );
58  
59
60 # el[attr*="foo"]
61 is( HTML::Zoom->from_html('<div f="frew goog"></div>'.$stub)
62    ->select('div[f*="oo"]')
63       ->replace_content('grg')
64    ->to_html,
65    '<div f="frew goog">grg</div>'.$stub,
66    'E[attr*="val"] works' );
67
68 # el[attr^="foo"]
69 is( HTML::Zoom->from_html('<div f="foobar"></div>'.$stub)
70    ->select('div[f^="foo"]')
71       ->replace_content('grg')
72    ->to_html,
73    '<div f="foobar">grg</div>'.$stub,
74    'E[attr^="val"] works' );
75
76 # el[attr$="foo"]
77 is( HTML::Zoom->from_html('<div f="foobar"></div>'.$stub)
78    ->select('div[f$="bar"]')
79       ->replace_content('grg')
80    ->to_html,
81    '<div f="foobar">grg</div>'.$stub,
82    'E[attr$="val"] works' );
83
84 # el[attr*="foo"]
85 is( HTML::Zoom->from_html('<div f="foo bar"></div>'.$stub)
86    ->select('div[f*="bar"]')
87       ->replace_content('grg')
88    ->to_html,
89    '<div f="foo bar">grg</div>'.$stub,
90    'E[attr*="val"] works' );
91
92 # [attr=bar]
93 ok( check_select( '[prop=moo]'), '[attr=bar]' );
94
95 # el[attr=bar],[prop=foo]
96 is( check_select('span[class=career],[prop=moo]'), 2,
97     'Multiple selectors: el[attr=bar],[attr=foo]');
98
99 =pod
100
101 # sel1 sel2
102 is( HTML::Zoom->from_html('<table><tr></tr><tr></tr></table>')
103    ->select('table tr')
104       ->replace_content(\'<td></td>')
105    ->to_html,
106    '<table><tr><td></td></tr><tr><td></td></tr></table>',
107    'sel1 sel2 works' );
108
109
110 # sel1 sel2 sel3
111 is( HTML::Zoom->from_html('<table><tr><td></td></tr><tr><td></td></tr></table>')
112    ->select('table tr td')
113       ->replace_content('frew')
114    ->to_html,
115    '<table><tr><td>frew</td></tr><tr><td>frew</td></tr></table>',
116    'sel1 sel2 sel3 works' );
117
118 =cut
119
120 done_testing;
121
122
123 sub check_select{
124     # less crude?:
125     my $output = HTML::Zoom
126     ->from_html($tmpl)
127     ->select(shift)->replace("the monkey")->to_html;
128     my $count = 0;
129     while ( $output =~ /the monkey/g ){
130         $count++;
131     }
132     return $count;
133 }