2 use warnings FATAL => 'all';
5 use HTML::Zoom::Parser::BuiltIn;
6 use HTML::Zoom::Producer::BuiltIn;
7 use HTML::Zoom::SelectorParser;
8 use HTML::Zoom::FilterBuilder;
9 use HTML::Zoom::FilterStream;
14 <span class="hilight name">Bob</span>
15 <span class="career">Builder</span>
21 sub src_stream { HTML::Zoom::Parser::BuiltIn->html_to_stream($tmpl); }
23 sub html_sink { HTML::Zoom::Producer::BuiltIn->html_from_stream($_[0]) }
25 my $fb = HTML::Zoom::FilterBuilder->new;
27 my $sp = HTML::Zoom::SelectorParser->new;
30 my ($stream, $sel, $cb) = @_;
31 return HTML::Zoom::FilterStream->new({
33 match => $sp->parse_selector($sel),
34 filter => do { local $_ = $fb; $cb->($fb) }
49 (my $expect = $tmpl) =~ s/(?=<div)/O HAI/;
51 my $ohai = [ { type => 'TEXT', raw => 'O HAI' } ];
54 run_for { $_->add_before($ohai) },
59 ($expect = $tmpl) =~ s/(?<=<\/div>)/O HAI/;
62 run_for { $_->add_after($ohai) },
67 ($expect = $tmpl) =~ s/(?<=class="main">)/O HAI/;
70 run_for { $_->prepend_inside($ohai) },
75 ($expect = $tmpl) =~ s/<hr \/>/<hr>O HAI<\/hr>/;
78 (run_for { $_->prepend_inside($ohai) } 'hr'),
80 'prepend_inside ok with in place close'
84 run_for { $_->replace($ohai) },
95 run_for { $_->collect({ into => \@ev }) },
100 'collect removes without passthrough'
104 HTML::Zoom::Producer::BuiltIn->html_from_events(\@ev),
106 <span class="hilight name">Bob</span>
107 <span class="career">Builder</span>
110 'collect collected right events'