libunicode-map-perl/t/deprecated.t

190 lines
4.6 KiB
Perl

##
## Some functionality of Unicode-Map-0.105 is deprecated now. It is either
## removed from the documentation or explicitly marked deprecated there.
##
## Anyway old code applying Unicode::Map should remain intact. This test
## asserts that:
## 1. The deprecated usage is still available
## 2. Unicode::Map issues warnings if $WARNINGS & WARN_DEPRECATION
##
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl test.pl'
######################### We start with some black magic to print on failure.
# Change 1..1 below to 1..last_test_to_print .
# (It may become useful if the test is moved to ./t subdirectory.)
BEGIN { $| = 1; print "1..5\n"; }
END {print "not ok 1\n" unless $loaded;}
use Unicode::Map;
$loaded = 1;
print "ok 1\n";
print STDERR "\n";
######################### End of black magic.
# Insert your test code below (better if it prints "ok 13"
# (correspondingly "not ok 13") depending on the success of chunk 13
# of the test code):
use strict;
my $locale = "Käse";
my $utf16 = "\0K\0ä\0s\0e";
my $warnings = 0;
my @test = (
map { ref($_) ? $_ : [$_] }
["new_no_id", "new: joker charset id"],
["new_id_select", "new: preselected charset id"],
["reverse", "reverse unicode"],
["noise", "noise"],
);
{
my $max = 0;
my $len;
for (0..$#test) {
$len = length($test[$_]->[$#{$test[$_]}]);
$max = $len if $len>$max;
}
my ($name, $desc);
my $i=2;
for (sort {$test[$a]->[$#{$test[$a]}] cmp $test[$b]->[$#{$test[$b]}]}
0..$#test
) {
($name, $desc) = @{$test[$_]};
$desc = $name if !defined $desc;
_out($max, $i, $desc);
test ($i++, eval "&$name($_, \"$name\")");
}
}
sub _out {
my $max = shift;
my $t = sprintf " #%2d: %s ", @_;
$t .= "." x (9 + 4 + $max - length($t));
printf STDERR "$t ";
}
sub test {
my ($number, $status) = @_;
if ($status) {
print STDERR "ok\n";
print "ok $number\n";
} else {
print STDERR "failed!\n";
print "not ok $number\n";
}
}
##
## Tests if a construction like this is supported:
##
## my $Map = new Unicode::Map ( );
## my $utf16 = $Map -> to_unicode ( "ISO-8859-1", $str );
##
## Correct usage would be:
##
## my $Map = new Unicode::Map ( "ISO-8859-1" );
## my $utf16 = $Map -> to_unicode ( $str );
##
sub new_no_id {
setWarnings ( );
return 0 unless $warnings == 0;
my $Map = new Unicode::Map ( );
return 0 unless $warnings == 1;
return 0 unless $Map;
return 0 unless $Map -> to_unicode ( "ISO-8859-1", $locale ) eq $utf16;
return 0 unless $warnings == 2;
return 0 unless $Map -> from_unicode ( "ISO-8859-1", $utf16 ) eq $locale;
return 0 unless $warnings == 3;
setNoWarnings ( );
1}
##
## Tests if a constructor with this form is supported:
##
## new Unicode::Map ( {ID => "ISO-8859-1"} );
##
## Correct usage would be:
##
## new Unicode::Map ( "ISO-8859-1" );
##
sub new_id_select {
setWarnings ( );
return 0 unless $warnings == 0;
return 0 unless my $Map = new Unicode::Map ({ ID => "ISO-8859-1" });
return 0 unless $warnings == 1;
return 0 unless $Map -> to_unicode ( $locale ) eq $utf16;
return 0 unless $Map -> from_unicode ( $utf16 ) eq $locale;
return 0 unless $warnings == 1;
setNoWarnings ( );
1}
##
## Tests if this method is supported:
##
## $utf16 = "\0S\0o\0m\0e";
## $Map -> reverse_unicode ( $utf16 );
##
## Proposed substitute for this deprecated usage:
##
## Unicode::String::byteswap ( $utf16 );
##
sub reverse {
my $utf16 = "K\0ä\0s\0e\0";
setWarnings ( );
return 0 unless my $Map = new Unicode::Map ( "ISO-8859-1" );
return 0 unless $warnings == 0;
$Map -> reverse_unicode ( $utf16 );
return 0 unless $warnings == 1;
# Has the original variable been changed?
return 0 unless $utf16 eq "\0K\0ä\0s\0e";
# Did we get a transfored copy?
return 0 unless $Map -> reverse_unicode ( $utf16 ) eq "K\0ä\0s\0e\0";
return 0 unless $warnings == 2;
# Was it really a copy?
return 0 unless $utf16 eq "\0K\0ä\0s\0e";
setNoWarnings ( );
1}
##
## Tests if method "noise" is available:
##
sub noise {
setWarnings ( );
return 0 unless my $Map = new Unicode::Map ( "ISO-8859-1" );
return 0 unless $warnings == 0;
$Map -> noise ( 3 );
return 0 unless $warnings == 1;
setNoWarnings ( );
}
#
# utilities
#
sub setWarnings {
$warnings = 0;
$SIG{'__WARN__'} = sub {
$warnings++;
};
$Unicode::Map::WARNINGS = Unicode::Map::WARN_DEPRECATION;
1}
sub setNoWarnings {
$SIG{'__WARN__'} = 0;
$warnings = 0;
$Unicode::Map::WARNINGS = Unicode::Map::WARN_DEFAULT;
1}