#!perl -T
use strict;
use warnings;
use Test::More tests => 28;
# script for testing the internal sub &_parse_args()
use_ok('Number::Bytes::Human');
*_parse_args = \&Number::Bytes::Human::_parse_args;
## options to set BLOCK
is_deeply(
_parse_args({}, { block => 1024 }),
{ BLOCK => 1024 });
is_deeply(
_parse_args({}, { block_size => 1024 }),
{ BLOCK => 1024 });
is_deeply(
_parse_args({}, { base => 1024 }),
{ BLOCK => 1024 });
is_deeply(
_parse_args({}, { bs => 1024 }),
{ BLOCK => 1024 });
is_deeply(
_parse_args({}, { block_1024 => 1 }),
{ BLOCK => 1024 });
is_deeply(
_parse_args({}, { base_1024 => 1 }),
{ BLOCK => 1024 });
is_deeply(
_parse_args({}, { 1024 => 1 }),
{ BLOCK => 1024 });
is_deeply(
_parse_args({}, { block_1000 => 1 }),
{ BLOCK => 1000 });
is_deeply(
_parse_args({}, { base_1000 => 1 }),
{ BLOCK => 1000 });
is_deeply(
_parse_args({}, { 1000 => 1 }),
{ BLOCK => 1000 });
is_deeply(
_parse_args({}, { bs => 1024000 }),
{ BLOCK => 1_024_000 });
# block + block_size
is_deeply(
_parse_args({}, { block => 1024, block_size => 1000 }),
{ BLOCK => 1024 }, "block has precedence over block_size");
# block + block_1000
is_deeply(
_parse_args({}, { block => 1024, block_1000 => 1 }),
{ BLOCK => 1024 }, "block has precedence over block_1000");
eval {
my $ans = _parse_args({}, { block => 1010 });
fail('block => 1010 should be bad');
};
like($@, qr/^invalid base/) if $@;
## options to set ROUND_*
my $ans;
my $dummy = sub { 'dummy' };
is_deeply(
_parse_args({}, { round_function => $dummy }),
{ ROUND_FUNCTION => $dummy, ROUND_STYLE => 'unknown' });
is_deeply(
_parse_args({}, { round_function => $dummy, round_style => 'dummy' }),
{ ROUND_FUNCTION => $dummy, ROUND_STYLE => 'dummy' });
$ans = _parse_args({}, { round_style => 'ceil' });
isa_ok($ans->{ROUND_FUNCTION}, 'CODE');
delete $ans->{ROUND_FUNCTION};
is_deeply($ans, { ROUND_STYLE => 'ceil' });
$ans = _parse_args({}, { round_style => 'floor' });
isa_ok($ans->{ROUND_FUNCTION}, 'CODE');
delete $ans->{ROUND_FUNCTION};
is_deeply($ans, { ROUND_STYLE => 'floor' });
eval {
my $ans = _parse_args({}, { round_function => 1 });
fail('round_function => 1 should be bad');
};
like($@, qr/^round function (.*) should be a code ref/, 'round_function => 1 is bad') if $@;
eval {
my $ans = _parse_args({}, { round_function => {} });
fail('round_function => {} should be bad');
};
like($@, qr/^round function (.*) should be a code ref/, 'round_function => {} is bad') if $@;
## OPTION SUFFIXES
my $suff = [];
is_deeply(
_parse_args({}, { suffixes => $suff }),
{ SUFFIXES => $suff }, "suffixes => [] works");
## OPTION si
is_deeply(
_parse_args({}, { si => 1, bs => 1000 }),
{ BLOCK => 1000, SUFFIXES => [ qw(B kB MB GB TB PB EB ZB YB) ] }, "si => 1, bs => 1000 works");
is_deeply(
_parse_args({}, { si => 1, bs => 1024 }),
{ BLOCK => 1024, SUFFIXES => [ qw(B KiB MiB GiB TiB PiB EiB ZiB YiB) ] }, "si => 1, bs => 1024 works");
## option ZERO
is_deeply(
_parse_args({}, { zero => '-' }),
{ ZERO => '-' }, "zero => '-' works");
is_deeply(
_parse_args({ SUFFIXES => [ 'X' ]}, { zero => '0%S' }),
{ ZERO => '0X', SUFFIXES => [ 'X' ] },
"zero => '0%S' works");