package tests::ReportParserHTMLDocBookFormatterTest;

use strict;

use base qw/ Lire::Test::TestCase /;

use Lire::ReportParser::HTMLDocBookFormatter qw/ dbk2html /;

sub set_up {
    my $self = $_[0];
    $self->SUPER::set_up();

    return;
}

sub tear_down {
    my $self = $_[0];
    $self->SUPER::tear_down();

    return;
}

sub _element_is_normalized {
    my ( $self, $element ) = @_;

    $self->annotate( "_element_is_normalized: $element\n" );
    my $dbk_text = "<para>Wawa <$element>bobo</$element> zozo</para>";
    my $e_text = <<EOD;
    <div class="para">Wawa <span class="$element">bobo</span> zozo</div>
EOD
    $self->assert_str_equals( $e_text, dbk2html( $dbk_text, 200 ) );

    return;
}

sub _test_admonition {
    my ( $self, $admonition ) = @_;

    $self->annotate( "testing admonition '$admonition'\n" );
    my $dbk_text = "<$admonition><para>test</para></$admonition>";
    my $uc_admonition = ucfirst( $admonition );
    my $e_text = <<_EOD;
    <div class="$admonition"><span class="admonition">$uc_admonition:</span>
      <div class="para">test</div>
    </div>
_EOD
    $self->assert_str_equals( $e_text, dbk2html( $dbk_text ) );

    $dbk_text = "<$admonition><para>paragraph 1</para><para>paragraph 2</para></$admonition>";
    $e_text = <<_EOD;
    <div class="$admonition"><span class="admonition">$uc_admonition:</span>
      <div class="para">paragraph 1</div>
      <div class="para">paragraph 2</div>
    </div>
_EOD
    $self->assert_str_equals( $e_text, dbk2html( $dbk_text ) );

    return;
}

sub _test_autopcdata {
    my ( $self, $data ) = @_;

    $self->annotate( "testing autopcdata '$data'\n" );
    $self->_element_is_normalized( $data );

    return;
}

sub test_admonitions {
    my $self = $_[0];

    my @admonitions = ( 'note', 'tip', 'important', 'caution', 'warning' );
    foreach my $admonition ( @admonitions ) {
        $self->_test_admonition( $admonition );
    }

    return;
}

sub test_all_autopcdata {
    my $self = $_[0];

    foreach my $data ( qw/ phrase trademark wordasword action application
                           command database errorcode errortype filename
                           hardware interface keycap keycode keycombo keysym
                           literal markup replaceable returnvalue sgmltag
                           systemitem token productname productnumber / )
    {
        $self->_test_autopcdata( $data );
    }

    return;
}

sub test_orderedlist {
    my $self = $_[0];

    my $dbk_text = '<orderedlist><listitem><para>test1</para></listitem><listitem><para>test2</para></listitem></orderedlist>';
    my $e_text = <<_EOD;
    <ol>
      <li>
\t<div class="para">test1</div>
      </li>
      <li>
\t<div class="para">test2</div>
      </li>
    </ol>
_EOD
     $self->assert_str_equals( $e_text, dbk2html( $dbk_text ) );

     return;
}

sub test_itemizedlist {
    my $self = $_[0];

    my $dbk_text = '<itemizedlist><listitem><para>test1</para></listitem><listitem><para>test2</para></listitem></itemizedlist>';
    my $e_text = <<_EOD;
    <ul>
      <li>
\t<div class="para">test1</div>
      </li>
      <li>
\t<div class="para">test2</div>
      </li>
    </ul>
_EOD
    $self->assert_str_equals( $e_text, dbk2html( $dbk_text ) );

    return;
}

# varlistentry and listitem are tested here too
sub test_variablelist {
    my $self = $_[0];

    my $dbk_text = <<_EOD;
    <variablelist>
      <title>This is a title for our list</title>
      <para>A paragraph before the actual list</para>
      <varlistentry>
        <term>term 1</term>
        <listitem>
          <para>definition 1</para>
        </listitem>
      </varlistentry>
      <varlistentry>
        <term>wawa term</term>
        <listitem>
          <para>wawa super text</para>
        </listitem>
      </varlistentry>
    </variablelist>
_EOD
    my $e_text = <<_EOD;
    <div class="variablelist">
      <span class="title">This is a title for our list</span>
      <div class="para">A paragraph before the actual list</div>
      <dl>
\t<dt>term 1</dt>
\t<dd>
\t  <div class="para">definition 1</div>
\t</dd>
\t<dt>wawa term</dt>
\t<dd>
\t  <div class="para">wawa super text</div>
\t</dd>
      </dl>
    </div>
_EOD
    $self->assert_str_equals( $e_text, dbk2html( $dbk_text ) );

    return;
}

sub test_para {
    my $self = $_[0];

    my $dbk_text = '<para>This is a very very very very very very very very very very very very very very very long paragraph</para>';
    my $e_text = <<_EOD;
    <div class="para">This is a very very very very very very very very very
    very very very very very very long paragraph</div>
_EOD
    $self->assert_str_equals( $e_text, dbk2html( $dbk_text ) );

    return;
}

sub test_ulink {
    my $self = $_[0];

    my $dbk_text = '<para>Go to <ulink url="http://www.logreport.org/">The LogReport Foundation</ulink> website.</para>';
    my $e_text = <<_EOD;
    <div class="para">Go to <a href="http://www.logreport.org/">The LogReport
    Foundation</a> website.</div>
_EOD
    $self->assert_str_equals( $e_text, dbk2html( $dbk_text ) );

    return;
}

sub test_email {
    my $self = $_[0];

    my $dbk_text = '<para><email>Wolfgang@logreport.org</email></para>';
    my $e_text = <<_EOD;
    <div class="para"><a href="mailto:Wolfgang\@logreport.org">Wolfgang\@logreport.org</a></div>
_EOD
    $self->assert_str_equals( $e_text, dbk2html( $dbk_text, 200 ) );

    return;
}

sub _test_variable {
    my ( $self, $vartype ) = @_;

    my $dbk_text = "<para><$vartype>TERM</$vartype></para>";
    my $e_text = <<_EOD;
    <div class="para"><var class="$vartype">TERM</var></div>
_EOD
    $self->assert_str_equals( $e_text, dbk2html( $dbk_text, 200 ) );

    return;
}

sub test_variables {
    my $self = $_[0];

    foreach my $vartype ( qw/ varname envar constant structfield structname function
                              option optional parameter classname symbol property
                              type errorname / )
    {
        $self->annotate( "testing variable type '$vartype'\n" );
        $self->_test_variable( $vartype );
    }
}

sub test_quote {
    my $self = $_[0];

    my $dbk_text = '<para><quote>Linux</quote></para>';
    my $e_text = <<_EOD;
    <div class="para"><q>Linux</q></div>
_EOD
    $self->assert_str_equals( $e_text, dbk2html( $dbk_text ) );

    return;
}

1;


syntax highlighted by Code2HTML, v. 0.9.1