The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#$Id: 05_formating.t 397 2009-01-18 14:21:47Z zag $

=pod

Test  Pod::ToDocBook::DoSequences filter

=cut

use strict;
use warnings;
#use Test::More ('no_plan');
use Test::More tests => 9;
use XML::ExtOn qw( create_pipe );
use XML::SAX::Writer;
use XML::Flow;
use Data::Dumper;
use_ok 'Pod::ToDocBook::Pod2xml';
use_ok 'Pod::ToDocBook::ProcessHeads';
use_ok 'Pod::ToDocBook::DoSequences';

sub pod2xml {
    my $text = shift;
    my $buf;
    my $w = new XML::SAX::Writer:: Output => \$buf;
    my $px = new Pod::ToDocBook::Pod2xml:: header => 0, doctype => 'chapter';
    my $p = create_pipe(
        $px, qw( Pod::ToDocBook::DoSequences ),

        #      create_pipe( $px,
        $w
    );
    $p->parse($text);
    return $buf;
}

my $xml1 = pod2xml( <<'OUT1' );
=pod

asd B<bold> asdasd I<italic> asdasd C<code> F<filename>
S<text> X<topicname> Z<null format> 

 Codes in verbatim B<bold> asdasdasd 

=cut
OUT1

# Looks like you failed 1 test of 6.
# <chapter><pod><para>asd <emphasis role='bold'>bold</emphasis> asdasd <emphasis role='italic'>italic</emphasis> asdasd <literal role='code'><![CDATA[code]]></literal>  <filename>filename</filename>
#  <indexterm><primary>topicname</primary></indexterm> null format</para><verbatim><![CDATA[ Codes in verbatim B<bold> asdasdasd
#
# ]]></verbatim></pod></chapter>

my ( $t1, $c1 );
( new XML::Flow:: \$xml1 )->read(
    {
        'para' => sub {
            shift;
            $c1++;
            $t1 = [ grep { ref($_) } @_ ];
        },
        'emphasis' =>
          sub { my $a = shift; $c1++ if $a->{role}; return { emphasis => @_ } },
        'literal' =>
          sub { my $a = shift; $c1++ if $a->{role}; return { literal => @_ } },
        'filename' => sub { my $a = shift; $c1++; return { filename => @_ } },
        'indexterm' => sub { shift; $c1++; { indexterm => @_ } },
        'primary'   => sub { shift; $c1++; { primary   => @_ } },
        term => sub { shift; return term => join "", @_ }
    }
);
is $c1, 7, 'format codes: count';
is_deeply $t1,
  [
    { 'emphasis'  => 'bold' },
    { 'emphasis'  => 'italic' },
    { 'literal'   => 'code' },
    { 'filename'  => 'filename' },
    { 'indexterm' => { 'primary' => 'topicname' } }
  ],
  'format codes: struct';

my $xml2 = pod2xml( <<'OUT2' );

=pod

E<Escape> 

Rt S<$x ? $y : $z> 

Test for escape E<amp> E<0x20>

=cut
OUT2

ok !$@, 'ecapes';

my $xml3 = pod2xml( <<'OUT3' );
=pod

L<text|http://www.ru>
L<http://www.ru>

=cut
OUT3

# <chapter><pod><para><ulink url='http://www.ru'>text</ulink>
# <ulink url='http://www.ru'>http://www.ru</ulink></para></pod></chapter>

my ( $t3, $c3 );
( new XML::Flow:: \$xml3 )->read(
    {
        para => sub { shift; $t3 = \@_ },
        ulink => sub { my $a = shift; ulink => $a }
    }
);

is_deeply $t3,
  [
    'ulink', { 'url' => 'http://www.ru' },
    'ulink', { 'url' => 'http://www.ru' }
  ],
  'external link';

my $xml4 = pod2xml( <<'OUT3' );
=pod

L<text|/"section1">
L<"section2">
L<text|somedoc/"section3">

=cut
OUT3

# <chapter><pod><para><link linkend=':section1'><quote>text</quote></link>
# <link linkend=':section2'><quote>section2</quote></link>
# <link linkend='somedoc:section3'><quote>text</quote></link></para></pod></chapter>

my ( $t4, $c4 );
( new XML::Flow:: \$xml4 )->read(
    {
        para => sub { shift; $t4 = \@_ },
        link => sub { my $a = shift; link => $a }
    }
);
is_deeply $t4,
  [
    'link', { 'linkend' => ':section1' },
    'link', { 'linkend' => ':section2' },
    'link', { 'linkend' => 'somedoc:section3' }
  ],
  'enternal link';

my $xml5 = pod2xml( <<'OUT3' );
=pod

L<ls(1)>

=cut
OUT3

# <chapter><pod><para><citerefentry><refentrytitle>ls</refentrytitle><manvolnum>1</manvolnum></citerefentry></para></pod></chapter>
my ( $t5, $c5 );
( new XML::Flow:: \$xml5 )->read(
    {
        citerefentry  => sub { $c5++ },
        refentrytitle => sub { $c5++ },
        manvolnum     => sub { $c5++ }
    }
);
is $c5, 3, 'man link';