App-MHFS
view release on metacpan or search on metacpan
t/01-util.t view on Meta::CPAN
#!perl
use 5.014;
use strict;
use warnings;
use Test2::V0;
use Feature::Compat::Try;
use Encode qw(decode encode);
use MHFS::Util qw(space2us escape_html escape_html_noquote shell_escape get_printable_utf8 read_text_file_lossy read_text_file write_text_file write_text_file_lossy decode_utf_8 parse_ipv4 write_file read_file fold_case);
plan 103;
is(space2us('hello world'), 'hello_world');
my $unsafe_chars = q|"'<>/|;
is(${escape_html($unsafe_chars)}, '"'<>/');
is(${escape_html_noquote($unsafe_chars)}, q|"'<>/|);
is(shell_escape(q|it's|), q|it'"'"'s|);
{
my $message = 'valid ip parses';
try {
is(parse_ipv4('8.8.8.8'), 8 | (8 << 8) | (8 << 16) | (8 << 24), $message);
is(parse_ipv4('255.255.255.255'), 0xFFFFFFFF, $message);
} catch ($e) {
fail($message);
}
}
{
my $message = 'invalid ip fails to parse';
try {
parse_ipv4('255.255.255.2551');
fail($message);
} catch ($e) {
pass($message);
}
try {
parse_ipv4('256.255.255.255');
fail($message);
} catch ($e) {
pass($message);
}
}
{
my @valid = (
# valid range in 1-4 byte sequences
"\x00",
"\x7F",
"\xC2\x80",
"\xDF\xBF",
"\xE0\xA0\x80",
"\xEF\xBF\xBF",
"\xF0\x90\x80\x80",
"\xF7\xBF\xBF\xBF",
# high and low surrogate ranges
"\xED\xA0\x80",
"\xED\xAF\xBF",
"\xED\xB0\x80",
"\xED\xBF\xBF",
);
my @overlong = (
# overlong ranges
"\xC0\x80",
"\xC1\xBF",
"\xE0\x80\x80",
"\xE0\x9F\xBF",
"\xF0\x80\x80\x80",
"\xF0\x8F\xBF\xBF",
);
my @toolong = (
"\xF8\x80\x80\x80\x80",
"\xF8\x88\x80\x80\x80"
);
# truncated, without and with additional input
my @truncated = (
# bytes, expected bytelength
["\xC2", 1],
( run in 0.516 second using v1.01-cache-2.11-cpan-39bf76dae61 )