#########################
use Test::More tests => 2063;
BEGIN { use_ok('HTML::GenerateUtil') };
use HTML::GenerateUtil qw(:consts escape_html generate_attributes generate_tag);
use Encode;
use strict;
my $border_size = 100;
my @border = 'x' x $border_size;
ok (!defined escape_html(undef, 0));
ok (!defined escape_html(undef, EH_INPLACE));
is (' ', escape_html(' '));
is ('<', escape_html('<'));
is ('&', escape_html('&'));
push @border, 'x' x $border_size;
is ('1', escape_html(1, 0));
is ('-1000000000', escape_html(-1000000000, 0));
is ('1.25', escape_html(1.25, 0));
my ($a, $b) = (1, 1.25);
escape_html($a, EH_INPLACE);
escape_html($b, EH_INPLACE);
is ('1', $a);
is ('1.25', $b);
is ('<', escape_html('<', 0));
is ('>', escape_html('>', 0));
is ('&', escape_html('&', 0));
is ('"', escape_html('"', 0));
push @border, 'x' x $border_size;
is ("\n", escape_html("\n", 0));
is ("
", escape_html("\n", EH_LFTOBR));
push @border, 'x' x $border_size;
is (' ', escape_html(' ', 0));
is (' ', escape_html(' ', EH_SPTONBSP));
is (' ', escape_html(' ', EH_SPTONBSP));
is (' ', escape_html(' ', 0));
is (' ', escape_html(' ', EH_SPTONBSP));
push @border, 'x' x $border_size;
$a = '<>&"';
$b = escape_html($a, 0);
is ('<>&"', $a);
is ('<>&"', $b);
# Test with special string offsets
$a = '<>&"';
$a =~ s/^.//;
is ('>&"', escape_html($a, 0));
escape_html($a, EH_INPLACE);
is ('>&"', $a);
$b = '<>&" ';
$b =~ s/^.//;
$b =~ s/\s+$//;
is ('>&"', escape_html($b, 0));
escape_html($b, EH_INPLACE);
is ('>&"', $b);
is ('&', escape_html('&', EH_LEAVEKNOWN));
is ('&', escape_html('&', EH_LEAVEKNOWN));
is ('& ', escape_html('& ', EH_LEAVEKNOWN));
is ('&', escape_html('&', EH_LEAVEKNOWN));
is (' ', escape_html(' ', EH_LEAVEKNOWN));
is ('  ', escape_html('  ', EH_LEAVEKNOWN));
is (' ', escape_html(' ', EH_LEAVEKNOWN));
is ('Ӓ', escape_html('Ӓ', EH_LEAVEKNOWN));
is ('Ӓ ', escape_html('Ӓ ', EH_LEAVEKNOWN));
is ('Ӓ', escape_html('Ӓ', EH_LEAVEKNOWN));
is ('&&&&', escape_html('&&&&', EH_LEAVEKNOWN));
is ('&&&
&', escape_html("&&&\n&", EH_LEAVEKNOWN | EH_LFTOBR));
$a = '&';
is ('&', escape_html($a, EH_LEAVEKNOWN | EH_INPLACE));
$a = '&';
is ('&', escape_html($a, EH_LEAVEKNOWN | EH_INPLACE));
$a = '& ';
is ('& ', escape_html($a, EH_LEAVEKNOWN | EH_INPLACE));
$a = '&';
is ('&', escape_html($a, EH_LEAVEKNOWN | EH_INPLACE));
$a = ' ';
is (' ', escape_html($a, EH_LEAVEKNOWN | EH_INPLACE));
$a = '  ';
is ('  ', escape_html($a, EH_LEAVEKNOWN | EH_INPLACE));
$a = ' ';
is (' ', escape_html($a, EH_LEAVEKNOWN | EH_INPLACE));
$a = 'Ӓ';
is ('Ӓ', escape_html($a, EH_LEAVEKNOWN | EH_INPLACE));
$a = 'Ӓ ';
is ('Ӓ ', escape_html($a, EH_LEAVEKNOWN | EH_INPLACE));
$a = 'Ӓ';
is ('Ӓ', escape_html($a, EH_LEAVEKNOWN | EH_INPLACE));
$a = '&&&&';
is ('&&&&', escape_html($a, EH_LEAVEKNOWN | EH_INPLACE));
$a = "&&&\n&";
is ('&&&
&', escape_html($a, EH_LEAVEKNOWN | EH_INPLACE | EH_LFTOBR));
$a = "&&&\n& ";
$a =~ s/\s+$//;
is ('&&&
&', escape_html($a, EH_LEAVEKNOWN | EH_INPLACE | EH_LFTOBR));
is ('&&&<br>&', escape_html($a, EH_LEAVEKNOWN | EH_INPLACE | EH_LFTOBR));
push @border, 'x' x $border_size;
is ('a&bc de&f', escape_html('a&bc de&f', EH_LEAVEKNOWN));
is ('a&bc  de&x', escape_html('a&bc  de&x', EH_LEAVEKNOWN));
is ('a&bcӒde&#f', escape_html('a&bcӒdef', EH_LEAVEKNOWN));
is ('a&bc᪴de', escape_html('a&bc᪴de', EH_LEAVEKNOWN));
is ('a&bc᪴def', escape_html('a&bc᪴def', EH_LEAVEKNOWN));
push @border, 'x' x $border_size;
$a = '<>&"' . "\x{1234}";
$b = escape_html($a, 0);
is ('<>&"' . "\x{1234}", $a);
is ('<>&"' . "\x{1234}", $b);
ok (Encode::is_utf8($b));
push @border, 'x' x $border_size;
for (1 .. 1000) {
my $str = '';
for (1 .. int(rand(30))) {
my $rnd = rand();
if ($rnd < 0.05) { $str .= '<'; }
elsif ($rnd < 0.10) { $str .= '>'; }
elsif ($rnd < 0.15) { $str .= '&'; }
elsif ($rnd < 0.20) { $str .= '"'; }
elsif ($rnd < 0.25) { $str .= "\n"; }
elsif ($rnd < 0.30) { $str .= ' '; }
elsif ($rnd < 0.98) { $str .= chr(ord('a') + rand(26)); }
else { $str .= chr(ord('a') + rand(10000)); }
}
my $pstr = $str;
$pstr =~ s/&/&/g;
$pstr =~ s/</g;
$pstr =~ s/>/>/g;
$pstr =~ s/\"/"/g;
$pstr =~ s/\n/
/g;
$pstr =~ s/ / /g;
my $estr = escape_html($str, EH_LFTOBR | EH_SPTONBSP);
is ($estr, $pstr);
is (Encode::is_utf8($str), Encode::is_utf8($estr));
}
push @border, 'x' x $border_size;
is(join('', @border), 'x' x ($border_size * @border));