The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# vi:filetype=
use Test::Base;

use JavaScript::SpiderMonkey;
use JSON::XS;
#use Test::LongString;
#use Data::Structure;
use utf8;
use Encode;

my $json_xs = JSON::XS->new->allow_nonref;

plan tests => blocks() * 1;

my $jsfile = 'js/pod2html.js';

my $monkey = new JavaScript::SpiderMonkey;
$monkey->init();

open my $in, $jsfile or
    die "Failed to open JS file $jsfile: $!\n";
my $js = do { local $/; <$in> };
close $in;

$monkey->eval($js) or
    die "Failed to load $jsfile: $@";

my $res;
$monkey->function_set('get', sub { $res = shift });

run {
    my $block = shift;
    my $name = $block->name;
    my $pod = $block->pod or die "No -- pod specified for $name";
    my $json = $json_xs->encode($pod);
    $monkey->eval("get(pod2html($json))") or
        die "Error occured when calling the pod2html function: $@";
    $res = Encode::decode('utf8', $res);
    is "$res\n", $block->html, "$name - HTML output okay";
};

$monkey->destroy();

__DATA__

=== TEST 1: =image
--- pod
=image gate.jpg
--- html
<p><img src="gate.jpg"/></p>



=== TEST 2: ignore =pod, =cut, =encoding
--- pod
=pod

=cut

=encoding utf8

hi
--- html
<p>hi</p>



=== TEST 3: L<url> works
--- pod
L<http://agentzh.org/#elem/home/1>
--- html
<p><a href="http://agentzh.org/#elem/home/1">http://agentzh.org/#elem/home/1</a></p>



=== TEST 4: indented paragraphs work
--- pod
 hello
   world
--- html
<pre> hello
   world</pre>



=== TEST 5: head1 & indented text
--- pod
=head1 A B C

 hello
  world
--- html
<h1>A B C</h1>
<pre> hello
  world</pre>



=== TEST 6: head3 & normal paragraphs
--- pod
=head3  hi

hello, world
Ahah!

dog is here.
--- html
<h3>hi</h3>
<p>hello, world
Ahah!</p>
<p>dog is here.</p>



=== TEST 7: C<...> works
--- pod
C<hello>, world
--- html
<p><code>hello</code>, world</p>



=== TEST 8: F<...> works
--- pod
F</usr/bin/perl>
--- html
<p><em>/usr/bin/perl</em></p>



=== TEST 9: I<...> works
--- pod
She loves I<me>!
--- html
<p>She loves <i>me</i>!</p>



=== TEST 10: B<...> works
--- pod
She loves B<me>!
--- html
<p>She loves <b>me</b>!</p>



=== TEST 11: over & =item *
--- pod
=over 4

=item *

Hello, world

*grin*

=back
--- html
<ul>
<li>
Hello, world
<p>*grin*</p>
</li></ul>



=== TEST 12: pre as item title
--- pod
=over

=item *

 abc

hello

=back
--- html
<ul>
<li>
<pre> abc</pre>
<p>hello</p>
</li></ul>



=== TEST 13: over & 2 =item *
--- pod
=over

=item *

ABC

=item *

*grin*

=back
--- html
<ul>
<li>
ABC
</li><li>
*grin*
</li></ul>



=== TEST 14: nested <ul>
--- pod
=over


=item *


ABC


=over


=item *


QQQ


=back


=back
--- html
<ul>
<li>
ABC
<ul>
<li>
QQQ
</li></ul>
</li></ul>



=== TEST 15: item 1. item 2. ...
--- pod
=over


=item 1.


ABC


=item 2.


QQQ


hello


=back
--- html
<ol>
<li>
ABC
</li><li>
QQQ
<p>hello</p>
</li></ol>



=== TEST 16: nested <ul> and <ol>
--- pod

=over


=item *


ABC


=over


=item 1.


QQQ


=back


=back
--- html
<ul>
<li>
ABC
<ol>
<li>
QQQ
</li></ol>
</li></ul>



=== TEST 17: =item XXX
--- pod
=over


=item ABC


English words


Oh oh!


=item hello, world


=back
--- html
<dl>
<dt>ABC</dt><dd>
<p>English words</p>
<p>Oh oh!</p>
</dd><dt>hello, world</dt><dd>
</dd></dl>



=== TEST 18: quotes
--- pod
C<< 2>3 >> F<F> I<I> B<B>
--- html
<p><code> 2&gt;3 </code> <em>F</em> <i>I</i> <b>B</b></p>



=== TEST 19: misc
--- pod
=head1 Hello


=over


=item *


hi


=back


  3 > 4
  532aa


L<http://blog.agentzh|agentzh>
--- html
<h1>Hello</h1>
<ul>
<li>
hi
</li></ul>
<pre>  3 &gt; 4
  532aa</pre>
<p><a href="http://blog.agentzh">agentzh</a></p>



=== TEST 20: head4 works
--- pod
=head4 你好么 ABC
--- html
<h4>你好么 ABC</h4>



=== TEST 21: misc2
--- pod
=over


=item 1.


cat is not a dog.
and he is always here.

really?


=item 2.


  hello, world
  haha


=back
--- html
<ol>
<li>
cat is not a dog.
and he is always here.
<p>really?</p>
</li><li>
<pre>  hello, world
  haha</pre>
</li></ol>



=== TEST 22: =begin html & =end html
--- pod
=head1 header

=begin html

<a href="#hi">Hello, world</a>
<div>
    Nothing!
</div>

=end html

Heh, that's cool!
--- html
<h1>header</h1>
<a href="#hi">Hello, world</a>
<div>
    Nothing!
</div>
<p>Heh, that's cool!</p>



=== TEST 23: =begin HTML & =end HTML
--- pod
=begin HTML

<a href="#hi">Hello, world</a>
<div>
    Nothing!
</div>

=end HTML

Heh, that's cool!

--- html
<a href="#hi">Hello, world</a>
<div>
    Nothing!
</div>
<p>Heh, that's cool!</p>



=== TEST 24: =begin HTML & =end html
--- pod
=head1 header

=begin HTML

<a href="#hi">Hello, world</a>
<div>
    Nothing!
</div>

=end html

Heh, that's cool!

--- html
<h1>header</h1>
<a href="#hi">Hello, world</a>
<div>
    Nothing!
</div>
<p>Heh, that's cool!</p>



=== TEST 25: =begin comment & =end comment
--- pod
=head1 header

=begin comment

<a href="#hi">Hello, world</a>
<div>
    Nothing!
</div>

=end comment

Heh, that's cool!

--- html
<h1>header</h1>
<p>Heh, that's cool!</p>