dwim selects and bugfixes, new transform_attribute method and handled trailing '...
[catagits/HTML-Zoom.git] / t / repeat_bugfixes.t
diff --git a/t/repeat_bugfixes.t b/t/repeat_bugfixes.t
new file mode 100644 (file)
index 0000000..4684b47
--- /dev/null
@@ -0,0 +1,141 @@
+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;