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)}, '&quot;&#x27;&lt;&gt;&#x2F;');
is(${escape_html_noquote($unsafe_chars)}, q|"'&lt;&gt;/|);

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 )