#!/usr/bin/perl -w # t/xhtml01.t - check basic output from Pod::Simple::XHTML BEGIN { chdir 't' if -d 't'; } use strict; use warnings; use lib '../lib'; use Test::More tests => 64; #use Test::More 'no_plan'; use_ok('Pod::Simple::XHTML') or exit; my $parser = Pod::Simple::XHTML->new (); isa_ok ($parser, 'Pod::Simple::XHTML'); my $results; my $PERLDOC = "https://metacpan.org/pod"; my $MANURL = "http://man.he.net/man"; initialize($parser, $results); $parser->parse_string_document( "=head1 Poit!" ); is($results, qq{

Poit!

\n\n}, "head1 level output"); initialize($parser, $results); $parser->parse_string_document( "=head2 Yada Yada Operator X<...> X<... operator> X" ); is($results, qq{

Yada Yada Operator

\n\n}, "head ID with X<>"); initialize($parser, $results); $parser->parse_string_document( "=head2 Platforms with no supporting programmers:"); is($results, qq{

Platforms with no supporting programmers:

\n\n}, "head ID ending in colon"); initialize($parser, $results); $parser->html_h_level(2); $parser->parse_string_document( "=head1 Poit!" ); is($results, qq{

Poit!

\n\n}, "head1 level output h_level 2"); initialize($parser, $results); $parser->parse_string_document( "=head2 I think so Brain." ); is($results, qq{

I think so Brain.

\n\n}, "head2 level output"); initialize($parser, $results); $parser->parse_string_document( "=head3 I say, Brain..." ); is($results, qq{

I say, Brain...

\n\n}, "head3 level output"); initialize($parser, $results); $parser->parse_string_document( "=head4 Zort & Zog!" ); is($results, qq{

Zort & Zog!

\n\n}, "head4 level output"); initialize($parser, $results); $parser->parse_string_document( "=head5 I think so Brain, but..." ); is($results, qq{
I think so Brain, but...
\n\n}, "head5 level output"); initialize($parser, $results); $parser->parse_string_document( "=head6 Narf!" ); is($results, qq{
Narf!
\n\n}, "head6 level output"); sub x { my $code = $_[1]; Pod::Simple::XHTML->_out( sub { $code->($_[0]) if $code }, "=pod\n\n$_[0]", ) } like( x("=head1 Header\n\n=for html
RAW!
\n\nDone."), qr/.+<\/h1>\s+
RAW!<\/span><\/div>\s+.*/sm, "heading building" ) or exit; initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =pod Gee, Brain, what do you want to do tonight? EOPOD is($results, <<'EOHTML', "simple paragraph");

Gee, Brain, what do you want to do tonight?

EOHTML initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =pod B: Now, Pinky, if by any chance you are captured during this mission, remember you are Gunther Heindriksen from Appenzell. You moved to Grindelwald to drive the cog train to Murren. Can you repeat that? P: Mmmm, no, Brain, dont think I can. EOPOD is($results, <<'EOHTML', "multiple paragraphs");

B: Now, Pinky, if by any chance you are captured during this mission, remember you are Gunther Heindriksen from Appenzell. You moved to Grindelwald to drive the cog train to Murren. Can you repeat that?

P: Mmmm, no, Brain, dont think I can.

EOHTML initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =over =item * P: Gee, Brain, what do you want to do tonight? =item * B: The same thing we do every night, Pinky. Try to take over the world! =back EOPOD is($results, <<'EOHTML', "simple bulleted list");
  • P: Gee, Brain, what do you want to do tonight?

  • B: The same thing we do every night, Pinky. Try to take over the world!

EOHTML initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =over =item * P: Gee, Brain, what do you want to do tonight? =item * B: The same thing we do every night, Pinky. Try to take over the world! =over =item * Take over world =item * Do laundry =back =back EOPOD is($results, <<'EOHTML', "nested bulleted list");
  • P: Gee, Brain, what do you want to do tonight?

  • B: The same thing we do every night, Pinky. Try to take over the world!

    • Take over world

    • Do laundry

EOHTML initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =over =item 1 P: Gee, Brain, what do you want to do tonight? =item 2 B: The same thing we do every night, Pinky. Try to take over the world! =back EOPOD is($results, <<'EOHTML', "numbered list");
  1. P: Gee, Brain, what do you want to do tonight?

  2. B: The same thing we do every night, Pinky. Try to take over the world!

EOHTML initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =over =item 1 P: Gee, Brain, what do you want to do tonight? =item 2 B: The same thing we do every night, Pinky. Try to take over the world! =over =item 1 Take over world =item 2 Do laundry =back =back EOPOD is($results, <<'EOHTML', "nested numbered list");
  1. P: Gee, Brain, what do you want to do tonight?

  2. B: The same thing we do every night, Pinky. Try to take over the world!

    1. Take over world

    2. Do laundry

EOHTML initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =over =item Pinky Gee, Brain, what do you want to do tonight? =item Brain The same thing we do every night, Pinky. Try to take over the world! =back EOPOD is($results, <<'EOHTML', "list with text headings");
Pinky

Gee, Brain, what do you want to do tonight?

Brain

The same thing we do every night, Pinky. Try to take over the world!

EOHTML initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =over =item * Pinky Gee, Brain, what do you want to do tonight? =item * Brain The same thing we do every night, Pinky. Try to take over the world! =back EOPOD is($results, <<'EOHTML', "list with bullet and text headings");
  • Pinky

    Gee, Brain, what do you want to do tonight?

  • Brain

    The same thing we do every night, Pinky. Try to take over the world!

EOHTML initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =over =item * Brain =item * Pinky =back EOPOD is($results, <<'EOHTML', "bulleted author list");
  • Brain <brain@binkyandthebrain.com>

  • Pinky <pinky@binkyandthebrain.com>

EOHTML initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =over =item Pinky =over =item World Domination =back =item Brain =back EOPOD is($results, <<'EOHTML', 'nested lists');
Pinky
World Domination
Brain
EOHTML initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =over =item Pinky On the list: =over =item World Domination Fight the good fight =item Go to Europe (Steve Martin joke) =back =item Brain Not so much =back EOPOD is($results, <<'EOHTML', 'multiparagraph nested lists');
Pinky

On the list:

World Domination

Fight the good fight

Go to Europe

(Steve Martin joke)

Brain

Not so much

EOHTML initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =pod 1 + 1 = 2; 2 + 2 = 4; EOPOD is($results, <<'EOHTML', "code block");
  1 + 1 = 2;
  2 + 2 = 4;
EOHTML initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =pod A plain paragraph with a C. C<< This code is B to Eme>! >> EOPOD is($results, <<"EOHTML", "code entity in a paragraph");

A plain paragraph with a functionname.

This code is important to <me>!

EOHTML initialize($parser, $results); $parser->html_header("\n"); $parser->html_footer("\n"); $parser->parse_string_document(<<'EOPOD'); =pod A plain paragraph with body tags turned on. EOPOD is($results, <<"EOHTML", "adding html body tags");

A plain paragraph with body tags turned on.

EOHTML initialize($parser, $results); $parser->html_css('style.css'); $parser->html_header(undef); $parser->html_footer(undef); $parser->parse_string_document(<<'EOPOD'); =pod A plain paragraph with body tags and css tags turned on. EOPOD like($results, qr//, "adding html body tags and css tags"); initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =pod A plain paragraph with S. EOPOD is($results, <<"EOHTML", "Non breaking text in a paragraph");

A plain paragraph with non breaking text.

EOHTML initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =pod A plain paragraph with a L. EOPOD is($results, <<"EOHTML", "Link entity in a paragraph");

A plain paragraph with a Newlines.

EOHTML initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =pod A plain paragraph with a L. EOPOD is($results, <<"EOHTML", "Link entity in a paragraph");

A plain paragraph with a "Newlines" in perlport.

EOHTML initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =pod A plain paragraph with a L. EOPOD is($results, <<"EOHTML", "A link in a paragraph");

A plain paragraph with a Boo.

EOHTML initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =pod A plain paragraph with a L. EOPOD is($results, <<"EOHTML", "A link in a paragraph");

A plain paragraph with a http://link.included.here.

EOHTML initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =pod A plain paragraph with a L. EOPOD is($results, <<"EOHTML", "A link in a paragraph");

A plain paragraph with a http://link.included.here?o=1&p=2.

EOHTML initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =pod A plain paragraph with B. EOPOD is($results, <<"EOHTML", "Bold text in a paragraph");

A plain paragraph with bold text.

EOHTML initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =pod A plain paragraph with I. EOPOD is($results, <<"EOHTML", "Italic text in a paragraph");

A plain paragraph with italic text.

EOHTML initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =pod A plain paragraph with a F. EOPOD is($results, <<"EOHTML", "File name in a paragraph");

A plain paragraph with a filename.

EOHTML # It's not important that 's (apostrophes) be encoded for XHTML output. initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =pod # this header is very important & dont you forget it my $text = "File is: " . ; EOPOD is($results, <<"EOHTML", "Verbatim text with encodable entities");
  # this header is very important & dont you forget it
  my \$text = "File is: " . <FILE>;
EOHTML initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =pod A text paragraph using E and E special POD entities. EOPOD is($results, <<"EOHTML", "Text with decodable entities");

A text paragraph using / and | special POD entities.

EOHTML initialize($parser, $results); $parser->parse_string_document(<<'EOPOD'); =pod A text paragraph using numeric POD entities: E<60>, E<62>. EOPOD is($results, <<"EOHTML", "Text with numeric entities");

A text paragraph using numeric POD entities: <, >.

EOHTML my $html = q{
#include <stdio.h>

int main(int argc,char *argv[]) {

        printf("Hellow World\n");
        return 0;

}
}; initialize($parser, $results); $parser->parse_string_document("=begin html\n\n$html\n\n=end html\n"); is($results, "$html\n\n", "Text with =begin html"); SKIP: for my $use_html_entities (0, 1) { if ($use_html_entities and not $Pod::Simple::XHTML::HAS_HTML_ENTITIES) { skip("HTML::Entities not installed", 3); } local $Pod::Simple::XHTML::HAS_HTML_ENTITIES = $use_html_entities; initialize($parser, $results); $parser->codes_in_verbatim(1); $parser->parse_string_document(<<'EOPOD'); =pod # this header is very important & dont you forget it B || Blank!;> my $text = "File is: " . ; EOPOD is($results, <<"EOHTML", "Verbatim text with markup and embedded formatting");
  # this header is very important & dont you forget it
  my \$file = <FILE> || Blank!;
  my \$text = "File is: " . <FILE>;
EOHTML # Specify characters to encode. initialize($parser, $results); $parser->html_encode_chars('><"&T'); $parser->parse_string_document(<<'EOPOD'); =pod This is Anna's "Answer" to the Question. =cut EOPOD my $T = $use_html_entities ? ord('T') : sprintf ("x%X", ord('T')); is($results, <<"EOHTML", 'HTML Entities should be only for specified characters');

&#$T;his is Anna's "Answer" to the <q>Question</q>.

EOHTML # Keep =encoding out of content. initialize($parser, $results); $parser->parse_string_document("=encoding ascii\n\n=head1 NAME\n"); is($results, <<"EOHTML", 'Encoding should not be in content')

NAME

EOHTML } ok $parser = Pod::Simple::XHTML->new, 'Construct a new parser'; $results = ''; $parser->output_string( \$results ); # Send the resulting output to a string ok $parser->parse_string_document( "=head1 Poit!" ), 'Parse with headers'; like $results, qr{\Q}, 'Should have proper http-equiv meta tag'; ok $parser = Pod::Simple::XHTML->new, 'Construct a new parser again'; ok $parser->html_charset('UTF-8'), 'Set the html charset to UTF-8'; $results = ''; $parser->output_string( \$results ); # Send the resulting output to a string ok $parser->parse_string_document( "=head1 Poit!" ), 'Parse with headers'; like $results, qr{\Q}, 'Should have http-equiv meta tag with UTF-8'; # Test the link generation methods. is $parser->resolve_pod_page_link('Net::Ping', 'INSTALL'), "$PERLDOC/Net::Ping#INSTALL", 'POD link with fragment'; is $parser->resolve_pod_page_link('perlpodspec'), "$PERLDOC/perlpodspec", 'Simple POD link'; is $parser->resolve_pod_page_link(undef, 'SYNOPSIS'), '#SYNOPSIS', 'Simple fragment link'; is $parser->resolve_pod_page_link(undef, 'this that'), '#this-that', 'Fragment link with space'; is $parser->resolve_pod_page_link('perlpod', 'this that'), "$PERLDOC/perlpod#this-that", 'POD link with fragment with space'; is $parser->resolve_man_page_link('crontab(5)', 'EXAMPLE CRON FILE'), "${MANURL}5/crontab", 'Man link with fragment'; is $parser->resolve_man_page_link('crontab(5)'), "${MANURL}5/crontab", 'Man link without fragment'; is $parser->resolve_man_page_link('crontab'), "${MANURL}1/crontab", 'Man link without section'; # Make sure that batch_mode_page_object_init() works. ok $parser->batch_mode_page_object_init(0, 0, 0, 0, 6), 'Call batch_mode_page_object_init()'; ok $parser->batch_mode, 'We should be in batch mode'; is $parser->batch_mode_current_level, 6, 'The level should have been set'; ###################################### sub initialize { $_[0] = Pod::Simple::XHTML->new (); $_[0]->html_header(""); $_[0]->html_footer(""); $_[0]->output_string( \$results ); # Send the resulting output to a string $_[1] = ''; return; }