######################### 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 ('&amp;', 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 ('&amp', escape_html('&', EH_LEAVEKNOWN)); is (' ', escape_html(' ', EH_LEAVEKNOWN)); is ('  ', escape_html('  ', EH_LEAVEKNOWN)); is ('&nbsp', escape_html(' ', EH_LEAVEKNOWN)); is ('Ӓ', escape_html('Ӓ', EH_LEAVEKNOWN)); is ('Ӓ ', escape_html('Ӓ ', EH_LEAVEKNOWN)); is ('&#1234', 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 ('&amp', 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 ('&nbsp', 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 ('&#1234', 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Ӓde&#f', EH_LEAVEKNOWN)); is ('a&bc᪴de&#xf', 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/\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));