PerlIO-via-EscStatus
view release on metacpan or search on metacpan
t/EscStatus.t view on Meta::CPAN
# Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with PerlIO-via-EscStatus. If not, see <http://www.gnu.org/licenses/>.
use 5.006;
use strict;
use warnings;
use PerlIO::via::EscStatus;
use Test::More tests => 860;
use lib 't';
use MyTestHelpers;
MyTestHelpers::nowarnings();
my $want_version = 12;
is ($PerlIO::via::EscStatus::VERSION, $want_version,
'VERSION variable');
is (PerlIO::via::EscStatus->VERSION, $want_version,
'VERSION class method');
ok (eval { PerlIO::via::EscStatus->VERSION($want_version); 1 },
"VERSION class check $want_version");
{ my $check_version = $want_version + 1000;
ok (! eval { PerlIO::via::EscStatus->VERSION($check_version); 1 },
"VERSION class check $check_version");
}
## no critic (ProtectPrivateSubs)
sub printable {
my ($str) = @_;
$str =~ s{([^[:ascii:]])}
{sprintf('\\x{%02X}',ord($1))}ge;
return $str;
}
#------------------------------------------------------------------------------
# IsZero
## no critic (ProhibitEscapedCharacters)
my $_81_str = "\x{81}";
my $_9B_str = "\x{9B}";
my $_9F_str = "\x{9F}";
my $AD_str = "\x{AD}";
diag 'IsZero';
ok ("\a" =~ /\p{PerlIO::via::EscStatus::IsZero}/);
ok ("\r" =~ /\p{PerlIO::via::EscStatus::IsZero}/);
ok ("\t" !~ /\p{PerlIO::via::EscStatus::IsZero}/);
ok ("\e" !~ /\p{PerlIO::via::EscStatus::IsZero}/);
ok ("X" !~ /\p{PerlIO::via::EscStatus::IsZero}/);
ok ($_81_str !~ /\p{PerlIO::via::EscStatus::IsZero}/);
ok ($_9B_str !~ /\p{PerlIO::via::EscStatus::IsZero}/);
ok ($_9F_str !~ /\p{PerlIO::via::EscStatus::IsZero}/);
ok ($AD_str !~ /\p{PerlIO::via::EscStatus::IsZero}/);
ok ("\x{0300}" =~ /\p{PerlIO::via::EscStatus::IsZero}/); # Mn
ok ("\x{0488}" =~ /\p{PerlIO::via::EscStatus::IsZero}/); # Me
ok ("\x{1100}" !~ /\p{PerlIO::via::EscStatus::IsZero}/); # W
ok ("\x{FF10}" !~ /\p{PerlIO::via::EscStatus::IsZero}/); # F
ok ("\x{FEFF}" =~ /\p{PerlIO::via::EscStatus::IsZero}/); # BOM
#------------------------------------------------------------------------------
# IsDouble
diag 'IsDouble';
ok ("\a" !~ /\p{PerlIO::via::EscStatus::IsDouble}/);
ok ("\r" !~ /\p{PerlIO::via::EscStatus::IsDouble}/);
ok ("\t" !~ /\p{PerlIO::via::EscStatus::IsDouble}/);
ok ("\e" !~ /\p{PerlIO::via::EscStatus::IsDouble}/);
ok ("X" !~ /\p{PerlIO::via::EscStatus::IsDouble}/);
ok ($AD_str !~ /\p{PerlIO::via::EscStatus::IsDouble}/);
ok ($_81_str !~ /\p{PerlIO::via::EscStatus::IsDouble}/);
ok ($_9B_str !~ /\p{PerlIO::via::EscStatus::IsDouble}/);
ok ($_9F_str !~ /\p{PerlIO::via::EscStatus::IsDouble}/);
ok ("\x{0300}" !~ /\p{PerlIO::via::EscStatus::IsDouble}/); # Mn
ok ("\x{0488}" !~ /\p{PerlIO::via::EscStatus::IsDouble}/); # Me
ok ("\x{1100}" =~ /\p{PerlIO::via::EscStatus::IsDouble}/); # W
ok ("\x{FF10}" =~ /\p{PerlIO::via::EscStatus::IsDouble}/); # F
ok ("\x{FEFF}" !~ /\p{PerlIO::via::EscStatus::IsDouble}/); # BOM
#------------------------------------------------------------------------------
# IsOther
diag 'IsOther';
ok ("\a" !~ /\p{PerlIO::via::EscStatus::IsOther}/);
ok ("\r" !~ /\p{PerlIO::via::EscStatus::IsOther}/);
ok ("\t" !~ /\p{PerlIO::via::EscStatus::IsOther}/);
ok ("\e" !~ /\p{PerlIO::via::EscStatus::IsOther}/);
ok ("X" =~ /\p{PerlIO::via::EscStatus::IsOther}/);
ok ($AD_str =~ /\p{PerlIO::via::EscStatus::IsOther}/);
ok ($_81_str !~ /\p{PerlIO::via::EscStatus::IsOther}/);
ok ($_9B_str !~ /\p{PerlIO::via::EscStatus::IsOther}/);
ok ($_9F_str !~ /\p{PerlIO::via::EscStatus::IsOther}/);
ok ("\x{0300}" !~ /\p{PerlIO::via::EscStatus::IsOther}/); # Mn
ok ("\x{0488}" !~ /\p{PerlIO::via::EscStatus::IsOther}/); # Me
ok ("\x{1100}" !~ /\p{PerlIO::via::EscStatus::IsOther}/); # W
ok ("\x{FF10}" !~ /\p{PerlIO::via::EscStatus::IsOther}/); # F
ok ("\x{FEFF}" !~ /\p{PerlIO::via::EscStatus::IsOther}/); # BOM
#------------------------------------------------------------------------------
# _truncate
diag '_truncate';
foreach my $elem (
# singles
["", 0, "", 0 ],
["xyz", 0, "", 0 ],
["x", 1, "x", 1 ],
["xy", 2, "xy", 2 ],
["xyz", 3, "xyz", 3 ],
["xyz", 4, "xyz", 3 ],
# doubles
["\x{1101}\x{1102}\x{1103}\x{1104}", 5,
"\x{1101}\x{1102}", 4 ],
["\x{1101}\x{1102}\x{1103}\x{1104}\r", 8,
"\x{1101}\x{1102}\x{1103}\x{1104}\r", 8 ],
# tabs
[ "\tAB\a", 9, "\tA", 9 ],
[ "ZZ\tAB\a", 9, "ZZ\tA", 9 ],
) {
my ($str, $cols_limit, $want_trunc, $want_cols) = @$elem;
my ($got_trunc, $got_cols) = PerlIO::via::EscStatus::_truncate
($str, $cols_limit);
my $name = "on limit $cols_limit str ".printable($str);
is ($got_trunc, $want_trunc, "string $name");
is ($got_cols, $want_cols, "cols $name");
}
# ANSI
{ my ($trunc, $cols) = PerlIO::via::EscStatus::_truncate ("\e[34mfoo\e[0m", 3);
is ($trunc, "\e[34mfoo\e[0m");
is ($cols, 3);
}
{ my ($trunc, $cols) = PerlIO::via::EscStatus::_truncate ("\e[34mfoobar\e[0m", 3);
is ($trunc, "\e[34mfoo\e[0m");
is ($cols, 3);
}
{ my ($trunc, $cols) = PerlIO::via::EscStatus::_truncate ("\x{9B}35mfoobar\x{9B}30m", 3);
is ($trunc, "\x{9B}35mfoo\x{9B}30m");
is ($cols, 3);
}
{ my ($trunc, $cols) = PerlIO::via::EscStatus::_truncate ("\e[34m\e[0mfoobar", 3);
is ($trunc, "\e[34m\e[0mfoo");
is ($cols, 3);
}
# non-ANSI Esc, counted as width one
{ my ($trunc, $cols) = PerlIO::via::EscStatus::_truncate ("\eXYZ", 3);
is ($trunc, "\eXY");
( run in 2.188 seconds using v1.01-cache-2.11-cpan-0bb4e1dffa6 )