2 #use warnings FATAL => 'all';
10 <span prop='moo' class="hilight name">Bob</span>
11 <span class="career">Builder</span>
17 my $stub = '<div class="waargh"></div>';
20 is( HTML::Zoom->from_html('<div id="yo"></div>'.$stub)
22 ->replace_content('grg')
24 '<div id="yo">grg</div>'.$stub,
28 is( HTML::Zoom->from_html('<div class="yo"></div>'.$stub)
30 ->replace_content('grg')
32 '<div class="yo">grg</div>'.$stub,
36 is( HTML::Zoom->from_html('<div frew="yo"></div>'.$stub)
38 ->replace_content('grg')
40 '<div frew="yo">grg</div>'.$stub,
44 is( HTML::Zoom->from_html('<div frew="yo"></div>'.$stub)
45 ->select('div[frew="yo"]')
46 ->replace_content('grg')
48 '<div frew="yo">grg</div>'.$stub,
49 'E[attr="val"] works' );
52 is( HTML::Zoom->from_html('<div frew="yo"></div>'.$stub)
53 ->select('div[frew=yo]')
54 ->replace_content('grg')
56 '<div frew="yo">grg</div>'.$stub,
57 'E[attr=val] works' );
60 is( HTML::Zoom->from_html('<div f="f"></div><div class="quux"></div>'.$stub)
61 ->select('div[class!="waargh"]')
62 ->replace_content('grg')
64 '<div f="f">grg</div><div class="quux">grg</div>'.$stub,
65 'E[attr!="val"] works' );
68 is( HTML::Zoom->from_html('<div f="frew goog"></div>'.$stub)
69 ->select('div[f*="oo"]')
70 ->replace_content('grg')
72 '<div f="frew goog">grg</div>'.$stub,
73 'E[attr*="val"] works' );
76 is( HTML::Zoom->from_html('<div f="foobar"></div>'.$stub)
77 ->select('div[f^="foo"]')
78 ->replace_content('grg')
80 '<div f="foobar">grg</div>'.$stub,
81 'E[attr^="val"] works' );
84 is( HTML::Zoom->from_html('<div f="foobar"></div>'.$stub)
85 ->select('div[f$="bar"]')
86 ->replace_content('grg')
88 '<div f="foobar">grg</div>'.$stub,
89 'E[attr$="val"] works' );
92 is( HTML::Zoom->from_html('<div f="foo bar"></div>'.$stub)
93 ->select('div[f*="bar"]')
94 ->replace_content('grg')
96 '<div f="foo bar">grg</div>'.$stub,
97 'E[attr*="val"] works' );
100 is( HTML::Zoom->from_html('<div frew="foo bar baz"></div>'.$stub)
101 ->select('div[frew~="bar"]')
102 ->replace_content('grg')
104 '<div frew="foo bar baz">grg</div>'.$stub,
105 'E[attr~="val"] works' );
108 is( HTML::Zoom->from_html('<div lang="pl"></div><div lang="english"></div>'.
109 '<div lang="en"></div><div lang="en-US"></div>'.$stub)
110 ->select('div[lang|="en"]')
111 ->replace_content('grg')
113 '<div lang="pl"></div><div lang="english"></div>'.
114 '<div lang="en">grg</div><div lang="en-US">grg</div>'.$stub,
115 'E[attr|="val"] works' );
118 ok( check_select( '[prop=moo]'), '[attr=bar]' );
120 # el[attr=bar],[prop=foo]
121 is( check_select('span[class=career],[prop=moo]'), 2,
122 'Multiple selectors: el[attr=bar],[attr=foo]');
125 # selector parse error test:
127 HTML::Zoom->from_html('<span att="bar"></span>')
129 ->replace_content('cats')
132 like( $@, qr/Error parsing dispatch specification/,
133 'Malformed attribute selector ([att=bar) results in a helpful error' );
137 local $TODO = "descendant selectors doesn't work yet";
139 is( eval { HTML::Zoom->from_html('<table><tr></tr><tr></tr></table>')
141 ->replace_content('<td></td>')
143 '<table><tr><td></td></tr><tr><td></td></tr></table>',
148 is( eval { HTML::Zoom->from_html('<table><tr><td></td></tr><tr><td></td></tr></table>')
149 ->select('table tr td')
150 ->replace_content('frew')
152 '<table><tr><td>frew</td></tr><tr><td>frew</td></tr></table>',
153 'sel1 sel2 sel3 works' );
162 my $output = HTML::Zoom
164 ->select(shift)->replace("the monkey")->to_html;
166 while ( $output =~ /the monkey/g ){