--- /dev/null
+use strict;
+use warnings FATAL => 'all';
+
+use HTML::Zoom;
+use Test::More;
+
+ok my $zoom = HTML::Zoom->from_html(<<HTML);
+<html>
+ <head>
+ <title>Hi!</title>
+ </head>
+ <body id="content-area">
+ <h1>Test</h1>
+ <div>
+ <p class="first-para">Some Stuff</p>
+ <p class="body-para">More Stuff</p>
+ <p class="body-para">Even More Stuff</p>
+ <ol>
+ <li class="first-item odd">First</li>
+ <li class="body-items even">Stuff A</li>
+ <li class="body-items odd">Stuff B</li>
+ <li class="body-items even">Stuff C</li>
+ <li class="last-item odd">Last</li>
+ </ol>
+ <ul class="items">
+ <li class="first">space</li>
+ <li class="second">space</li>
+ </ul>
+ <p class="body-para">Even More stuff</p>
+ <p class="last-para">Some Stuff</p>
+ </div>
+ <div id="blocks">
+ <h2 class="h2-item">Sub Item</h2>
+ </div>
+ <ul id="people">
+ <li class="name">name</li>
+ <li class="email">email</li>
+ </ul>
+ <ul id="people2">
+ <li class="name">name</li>
+ <li class="email">email</li>
+ </ul>
+ <ul id="object">
+ <li class="aa">AA</li>
+ <li class="bb">BB</li>
+ </ul>
+ <p id="footer">Copyright 2222</p>
+ </body>
+</html>
+HTML
+
+## Stub for testing the fill method to be
+
+ok my $title = sub {
+ my ($z, $content) = @_;
+ $z = $z->select('title')->replace_content($content);
+ return $z;
+};
+
+{
+ ok my $z = HTML::Zoom
+ ->from_html(q[<ul><li>Test</li></ul>])
+ ->select('ul')
+ ->repeat_content(
+ [
+ sub { $_->select('li')->replace_content('Real Life1') },
+ sub { $_->select('li')->replace_content('Real Life2') },
+ sub { $_->select('li')->replace_content('Real Life3') },
+ ],
+ )
+ ->to_html;
+
+ is $z, '<ul><li>Real Life1</li><li>Real Life2</li><li>Real Life3</li></ul>',
+ 'Got correct from repeat_content';
+}
+
+{
+ ok my $z = HTML::Zoom
+ ->from_html(q[<ul><li>Test</li></ul>])
+ ->select('ul')
+ ->repeat_content([
+ map { my $i = $_; +sub {$_->select('li')->replace_content("Real Life$i")} } (1,2,3)
+ ])
+ ->to_html;
+
+ is $z, '<ul><li>Real Life1</li><li>Real Life2</li><li>Real Life3</li></ul>',
+ 'Got correct from repeat_content';
+}
+
+
+use HTML::Zoom::CodeStream;
+sub code_stream (&) {
+ my $code = shift;
+ return sub {
+ HTML::Zoom::CodeStream->new({
+ code => $code,
+ });
+ }
+}
+
+{
+ my @list = qw(foo bar baz);
+ ok my $z = HTML::Zoom
+ ->from_html(q[<ul><li>Test</li></ul>])
+ ->select('ul')
+ ->repeat_content(code_stream {
+ if (my $name = shift @list) {
+ return sub { $_->select('li')->replace_content($name) };
+ } else {
+ return
+ }
+ })
+ ->to_html;
+
+ is $z, '<ul><li>foo</li><li>bar</li><li>baz</li></ul>',
+ 'Got correct from repeat_content';
+}
+
+{
+ my @list = qw(foo bar baz);
+ ok my $z = HTML::Zoom
+ ->from_html(q[<ul><li>Test</li></ul>])
+ ->select('ul')
+ ->repeat_content(sub {
+ HTML::Zoom::CodeStream->new({
+ code => sub {
+ if (my $name = shift @list) {
+ return sub { $_->select('li')->replace_content($name) };
+ } else {
+ return
+ }
+ }
+ });
+ })
+ ->to_html;
+
+ is $z, '<ul><li>foo</li><li>bar</li><li>baz</li></ul>',
+ 'Got correct from repeat_content';
+}
+
+done_testing;