|
Packit Service |
f6e53a |
# $Id: 02-IDN.t 1601 2017-10-10 14:17:01Z willem $ -*-perl-*-
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
use strict;
|
|
Packit Service |
f6e53a |
use Test::More;
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
## vvv verbatim from Domain.pm
|
|
Packit Service |
f6e53a |
use constant ASCII => ref eval {
|
|
Packit Service |
f6e53a |
require Encode;
|
|
Packit Service |
f6e53a |
Encode::find_encoding('ascii');
|
|
Packit Service |
f6e53a |
};
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
use constant UTF8 => scalar eval { ## not UTF-EBCDIC [see UTR#16 3.6]
|
|
Packit Service |
f6e53a |
Encode::encode_utf8( chr(182) ) eq pack( 'H*', 'C2B6' );
|
|
Packit Service |
f6e53a |
};
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
use constant LIBIDN => defined eval 'require Net::LibIDN';
|
|
Packit Service |
f6e53a |
use constant LIBIDN2 => ref eval 'require Net::LibIDN2; Net::LibIDN2->can("idn2_to_ascii_8")';
|
|
Packit Service |
f6e53a |
## ^^^ verbatim from Domain.pm
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
use constant LIBIDNOK => LIBIDN && scalar eval {
|
|
Packit Service |
f6e53a |
my $cn = pack( 'U*', 20013, 22269 );
|
|
Packit Service |
f6e53a |
Net::LibIDN::idn_to_ascii( $cn, 'utf-8' ) eq 'xn--fiqs8s';
|
|
Packit Service |
f6e53a |
};
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
use constant LIBIDN2OK => LIBIDN2 && scalar eval {
|
|
Packit Service |
f6e53a |
my $cn = pack( 'U*', 20013, 22269 );
|
|
Packit Service |
f6e53a |
Net::LibIDN2::idn2_to_ascii_8( $cn, 9 ) eq 'xn--fiqs8s';
|
|
Packit Service |
f6e53a |
};
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
my $codeword = unpack 'H*', '[|';
|
|
Packit Service |
f6e53a |
my %codename = (
|
|
Packit Service |
f6e53a |
'5b7c' => 'ASCII superset',
|
|
Packit Service |
f6e53a |
'ba4f' => 'EBCDIC cp37',
|
|
Packit Service |
f6e53a |
'ad4f' => 'EBCDIC cp1047',
|
|
Packit Service |
f6e53a |
'bb4f' => 'EBCDIC posix-bc'
|
|
Packit Service |
f6e53a |
);
|
|
Packit Service |
f6e53a |
my $encoding = $codename{lc $codeword} || "not recognised [$codeword]";
|
|
Packit Service |
f6e53a |
diag "character encoding: $encoding" unless $encoding =~ /ASCII/;
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
plan skip_all => 'Encode package not installed' unless eval { require Encode; };
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
plan skip_all => 'Encode: ASCII encoding not available' unless ASCII;
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
plan skip_all => 'Encode: UTF-8 encoding not available' unless UTF8;
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
plan skip_all => 'No LibIDN or LibIDN2 installed' unless LIBIDN || LIBIDN2;
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
plan skip_all => 'Net::LibIDN not working' if LIBIDN && !LIBIDNOK;
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
plan skip_all => 'Net::LibIDN2 not working' if LIBIDN2 && !LIBIDN2OK;
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
plan tests => 12;
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
use_ok('Net::DNS::Domain');
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
my $a_label = 'xn--fiqs8s';
|
|
Packit Service |
f6e53a |
my $u_label = eval { pack( 'U*', 20013, 22269 ); };
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
is( new Net::DNS::Domain($a_label)->name, $a_label, 'IDN A-label domain->name' );
|
|
Packit Service |
f6e53a |
is( new Net::DNS::Domain($a_label)->fqdn, "$a_label.", 'IDN A-label domain->fqdn' );
|
|
Packit Service |
f6e53a |
is( new Net::DNS::Domain($a_label)->string, "$a_label.", 'IDN A-label domain->string' );
|
|
Packit Service |
f6e53a |
is( new Net::DNS::Domain($a_label)->xname, $u_label, 'IDN A-label domain->xname' );
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
is( new Net::DNS::Domain($u_label)->name, $a_label, 'IDN U-label domain->name' );
|
|
Packit Service |
f6e53a |
is( new Net::DNS::Domain($u_label)->fqdn, "$a_label.", 'IDN U-label domain->fqdn' );
|
|
Packit Service |
f6e53a |
is( new Net::DNS::Domain($u_label)->string, "$a_label.", 'IDN U-label domain->string' );
|
|
Packit Service |
f6e53a |
is( new Net::DNS::Domain($u_label)->xname, $u_label, 'IDN U-label domain->xname' );
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
is( new Net::DNS::Domain($u_label)->xname, $u_label, 'IDN cached domain->xname' );
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
is( new Net::DNS::Domain('xn--')->xname, 'xn--', 'IDN bogus domain->xname' );
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
eval { new Net::DNS::Domain( pack 'U*', 65533, 92, 48, 65533 ); };
|
|
Packit Service |
f6e53a |
my $exception = $1 if $@ =~ /^(.+)\n/;
|
|
Packit Service |
f6e53a |
ok( $exception ||= '', "invalid name\t[$exception]" );
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
|
|
Packit Service |
f6e53a |
exit;
|
|
Packit Service |
f6e53a |
|