The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl
# This software is copyright (c) 2011 by Jeffrey Kegler
# This is free software; you can redistribute it and/or modify it
# under the same terms as the Perl 5 programming language system
# itself.

use 5.010;
use strict;
use warnings;
use English qw( -no_match_vars );
use List::Util;
use Test::More tests => 5;
Test::More::use_ok('HTML::PullParser');
Test::More::use_ok('Marpa::HTML::Test');
Test::More::use_ok('Marpa::HTML');

# Non-synopsis example in HTML.pod

# Marpa::HTML::Display
# name: 'HTML Pod: Handler Precedence'

my $html = <<'END_OF_HTML';
<span class="high">High Span</span>
<span class="low">Low Span</span>
<div class="high">High Div</div>
<div class="low">Low Div</div>
<div class="oddball">Oddball Div</div>
END_OF_HTML

my $result = Marpa::HTML::html(
    \$html,
    {   q{*} => sub {
            return 'wildcard handler: ' . Marpa::HTML::contents();
        },
        'head' => sub { return Marpa::HTML::literal() },
        'html' => sub { return Marpa::HTML::literal() },
        'body' => sub { return Marpa::HTML::literal() },
        'div'  => sub {
            return '"div" handler: ' . Marpa::HTML::contents();
        },
        '.high' => sub {
            return '".high" handler: ' . Marpa::HTML::contents();
        },
        'div.high' => sub {
            return '"div.high" handler: ' . Marpa::HTML::contents();
        },
        '.oddball' => sub {
            return '".oddball" handler: ' . Marpa::HTML::contents();
        },
    }
);

# Marpa::HTML::Display::End

# Marpa::HTML::Display
# name: 'HTML Pod: Handler Precedence Result'
# start-after-line: EXPECTED_RESULT
# end-before-line: '^EXPECTED_RESULT$'

my $expected_result = <<'EXPECTED_RESULT';
".high" handler: High Span
wildcard handler: Low Span
"div.high" handler: High Div
"div" handler: Low Div
".oddball" handler: Oddball Div
EXPECTED_RESULT

# Marpa::HTML::Display::End

Marpa::HTML::Test::is( ${$result}, $expected_result, 'handler precedence example' );

# Marpa::HTML::Display
# name: 'HTML Pod: Structure vs. Element Example'
# start-after-line: END_OF_EXAMPLE
# end-before-line: '^END_OF_EXAMPLE$'

my $tagged_html_example = <<'END_OF_EXAMPLE';
    <title>Short</title><p>Text</head><head>
END_OF_EXAMPLE

# Marpa::HTML::Display::End

my $expected_structured_result = <<'END_OF_EXPECTED';
    <html>
<head>
<title>Short</title></head>
<body>
<p>Text</head><head>
</p>
</body>
</html>
END_OF_EXPECTED

sub supply_missing_tags {
    my $tagname = Marpa::HTML::tagname();
    return
          ( Marpa::HTML::start_tag() // "<$tagname>\n" )
        . Marpa::HTML::contents()
        . ( Marpa::HTML::end_tag() // "</$tagname>\n" );
} ## end sub supply_missing_tags
my $structured_html_ref =
    Marpa::HTML::html( \$tagged_html_example,
    { q{*} => \&supply_missing_tags } );

Marpa::HTML::Test::is( ${$structured_html_ref}, $expected_structured_result,
    'structure vs. tags example' );