|
Packit |
f3e6b9 |
#!/usr/bin/perl
|
|
Packit |
f3e6b9 |
# Copyright (c) 2016-2018 Sullivan Beck. All rights reserved.
|
|
Packit |
f3e6b9 |
# This program is free software; you can redistribute it and/or modify it
|
|
Packit |
f3e6b9 |
# under the same terms as Perl itself.
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
use warnings;
|
|
Packit |
f3e6b9 |
use strict;
|
|
Packit |
f3e6b9 |
no strict 'subs';
|
|
Packit |
f3e6b9 |
no strict 'refs';
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
my %type = ('country' => 'Country',
|
|
Packit |
f3e6b9 |
'language' => 'Language',
|
|
Packit |
f3e6b9 |
'currency' => 'Currency',
|
|
Packit |
f3e6b9 |
'script' => 'Script',
|
|
Packit |
f3e6b9 |
'langfam' => 'LangFam',
|
|
Packit |
f3e6b9 |
'langext' => 'LangExt',
|
|
Packit |
f3e6b9 |
'langvar' => 'LangVar',
|
|
Packit |
f3e6b9 |
);
|
|
Packit |
f3e6b9 |
my $generic_tests;
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
sub do_tests {
|
|
Packit |
f3e6b9 |
my($data_type,$inp_file,$test_type,$codeset,$show_errs) = @_;
|
|
Packit |
f3e6b9 |
my $type = $type{$data_type};
|
|
Packit |
f3e6b9 |
$::data_type = $data_type;
|
|
Packit |
f3e6b9 |
$::test_type = $test_type;
|
|
Packit |
f3e6b9 |
$inp_file = $data_type if (! $inp_file);
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
my($runtests) = shift(@ARGV);
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
# Load the test function and the data for the tests
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
my($dir,$tdir);
|
|
Packit |
f3e6b9 |
if ( -f "t/testfunc.pl" ) {
|
|
Packit |
f3e6b9 |
require "./t/testfunc.pl";
|
|
Packit |
f3e6b9 |
require "./t/vals_${inp_file}.pl";
|
|
Packit |
f3e6b9 |
$dir="./lib";
|
|
Packit |
f3e6b9 |
$tdir="t";
|
|
Packit |
f3e6b9 |
} elsif ( -f "testfunc.pl" ) {
|
|
Packit |
f3e6b9 |
require "./testfunc.pl";
|
|
Packit |
f3e6b9 |
require "./vals_${inp_file}.pl";
|
|
Packit |
f3e6b9 |
$dir="../lib";
|
|
Packit |
f3e6b9 |
$tdir=".";
|
|
Packit |
f3e6b9 |
} else {
|
|
Packit |
f3e6b9 |
die "ERROR: cannot find testfunc.pl\n";
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
unshift(@INC,$dir);
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
$::tests .= $generic_tests if (! defined($show_errs));
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
if ($test_type eq 'old') {
|
|
Packit |
f3e6b9 |
$::module = "Locale::$type";
|
|
Packit |
f3e6b9 |
eval("use $::module");
|
|
Packit |
f3e6b9 |
my $tmp = $::module . "::show_errors";
|
|
Packit |
f3e6b9 |
&{ $tmp }(0);
|
|
Packit |
f3e6b9 |
} elsif ($test_type eq 'func') {
|
|
Packit |
f3e6b9 |
$::module = "Locale::Codes::$type";
|
|
Packit |
f3e6b9 |
eval("use $::module");
|
|
Packit |
f3e6b9 |
my $tmp = $::module . "::show_errors";
|
|
Packit |
f3e6b9 |
&{ $tmp }(0);
|
|
Packit |
f3e6b9 |
} elsif (defined($codeset)) {
|
|
Packit |
f3e6b9 |
eval("use Locale::Codes");
|
|
Packit |
f3e6b9 |
$::obj = Locale::Codes->new($data_type,$codeset,$show_errs);
|
|
Packit |
f3e6b9 |
$::obj->show_errors(1);
|
|
Packit |
f3e6b9 |
} elsif (defined($show_errs)) {
|
|
Packit |
f3e6b9 |
eval("use Locale::Codes");
|
|
Packit |
f3e6b9 |
$::obj = Locale::Codes->new();
|
|
Packit |
f3e6b9 |
$::obj->type($data_type);
|
|
Packit |
f3e6b9 |
$::obj->show_errors($show_errs);
|
|
Packit |
f3e6b9 |
} else {
|
|
Packit |
f3e6b9 |
eval("use Locale::Codes");
|
|
Packit |
f3e6b9 |
$::obj = new Locale::Codes $data_type;
|
|
Packit |
f3e6b9 |
$::obj->show_errors(0);
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
print "$::data_type [$::test_type]\n";
|
|
Packit |
f3e6b9 |
test_Func(\&test,$::tests,$runtests);
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
sub test {
|
|
Packit |
f3e6b9 |
my ($op,@test) = @_;
|
|
Packit |
f3e6b9 |
my @ret;
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
my $stderr = '';
|
|
Packit |
f3e6b9 |
{
|
|
Packit |
f3e6b9 |
local *STDERR;
|
|
Packit |
f3e6b9 |
open STDERR, '>', \$stderr;
|
|
Packit |
f3e6b9 |
@ret = _test($op,@test);
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
if ($stderr) {
|
|
Packit |
f3e6b9 |
$stderr =~ s/\n.*//m;
|
|
Packit |
f3e6b9 |
chomp($stderr);
|
|
Packit |
f3e6b9 |
return $stderr;
|
|
Packit |
f3e6b9 |
} else {
|
|
Packit |
f3e6b9 |
return @ret;
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
sub _test {
|
|
Packit |
f3e6b9 |
my ($op,@test) = @_;
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
if ($op eq '2code') {
|
|
Packit |
f3e6b9 |
my $code;
|
|
Packit |
f3e6b9 |
if ($::obj) {
|
|
Packit |
f3e6b9 |
$code = $::obj->name2code(@test);
|
|
Packit |
f3e6b9 |
} else {
|
|
Packit |
f3e6b9 |
$code = &{ "${::data_type}2code" }(@test);
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
return ($code ? lc($code) : $code);
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
} elsif ($op eq '2name') {
|
|
Packit |
f3e6b9 |
if ($::obj) {
|
|
Packit |
f3e6b9 |
return $::obj->code2name(@test);
|
|
Packit |
f3e6b9 |
} else {
|
|
Packit |
f3e6b9 |
return &{ "code2${::data_type}" }(@test)
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
} elsif ($op eq 'code2code') {
|
|
Packit |
f3e6b9 |
my $code;
|
|
Packit |
f3e6b9 |
if ($::obj) {
|
|
Packit |
f3e6b9 |
$code = $::obj->code2code(@test);
|
|
Packit |
f3e6b9 |
} else {
|
|
Packit |
f3e6b9 |
$code = &{ "${::data_type}_code2code" }(@test);
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
return ($code ? lc($code) : $code);
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
} elsif ($op eq 'all_codes') {
|
|
Packit |
f3e6b9 |
my $n;
|
|
Packit |
f3e6b9 |
if ($test[$#test] =~ /^\d+$/) {
|
|
Packit |
f3e6b9 |
$n = pop(@test);
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
my @tmp;
|
|
Packit |
f3e6b9 |
if ($::obj) {
|
|
Packit |
f3e6b9 |
@tmp = $::obj->all_codes(@test);
|
|
Packit |
f3e6b9 |
} else {
|
|
Packit |
f3e6b9 |
@tmp = &{ "all_${::data_type}_codes" }(@test);
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
if ($n && @tmp > $n) {
|
|
Packit |
f3e6b9 |
return @tmp[0..($n-1)];
|
|
Packit |
f3e6b9 |
} else {
|
|
Packit |
f3e6b9 |
return @tmp;
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
} elsif ($op eq 'all_names') {
|
|
Packit |
f3e6b9 |
my $n;
|
|
Packit |
f3e6b9 |
if ($test[$#test] =~ /^\d+$/) {
|
|
Packit |
f3e6b9 |
$n = pop(@test);
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
my @tmp;
|
|
Packit |
f3e6b9 |
if ($::obj) {
|
|
Packit |
f3e6b9 |
@tmp = $::obj->all_names(@test);
|
|
Packit |
f3e6b9 |
} else {
|
|
Packit |
f3e6b9 |
@tmp = &{ "all_${::data_type}_names" }(@test);
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
if ($n && @tmp > $n) {
|
|
Packit |
f3e6b9 |
return @tmp[0..($n-1)];
|
|
Packit |
f3e6b9 |
} else {
|
|
Packit |
f3e6b9 |
return @tmp;
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
} elsif ($op eq 'rename') {
|
|
Packit |
f3e6b9 |
if ($::obj) {
|
|
Packit |
f3e6b9 |
return $::obj->rename_code(@test);
|
|
Packit |
f3e6b9 |
} else {
|
|
Packit |
f3e6b9 |
return &{ "${::module}::rename_${::data_type}" }(@test)
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
} elsif ($op eq 'add') {
|
|
Packit |
f3e6b9 |
if ($::obj) {
|
|
Packit |
f3e6b9 |
return $::obj->add_code(@test);
|
|
Packit |
f3e6b9 |
} else {
|
|
Packit |
f3e6b9 |
return &{ "${::module}::add_${::data_type}" }(@test)
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
} elsif ($op eq 'delete') {
|
|
Packit |
f3e6b9 |
if ($::obj) {
|
|
Packit |
f3e6b9 |
return $::obj->delete_code(@test);
|
|
Packit |
f3e6b9 |
} else {
|
|
Packit |
f3e6b9 |
return &{ "${::module}::delete_${::data_type}" }(@test)
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
} elsif ($op eq 'add_alias') {
|
|
Packit |
f3e6b9 |
if ($::obj) {
|
|
Packit |
f3e6b9 |
return $::obj->add_alias(@test);
|
|
Packit |
f3e6b9 |
} else {
|
|
Packit |
f3e6b9 |
return &{ "${::module}::add_${::data_type}_alias" }(@test)
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
} elsif ($op eq 'delete_alias') {
|
|
Packit |
f3e6b9 |
if ($::obj) {
|
|
Packit |
f3e6b9 |
return $::obj->delete_alias(@test);
|
|
Packit |
f3e6b9 |
} else {
|
|
Packit |
f3e6b9 |
return &{ "${::module}::delete_${::data_type}_alias" }(@test)
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
} elsif ($op eq 'replace_code') {
|
|
Packit |
f3e6b9 |
if ($::obj) {
|
|
Packit |
f3e6b9 |
return $::obj->replace_code(@test);
|
|
Packit |
f3e6b9 |
} else {
|
|
Packit |
f3e6b9 |
return &{ "${::module}::rename_${::data_type}_code" }(@test)
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
} elsif ($op eq 'add_code_alias') {
|
|
Packit |
f3e6b9 |
if ($::obj) {
|
|
Packit |
f3e6b9 |
return $::obj->add_code_alias(@test);
|
|
Packit |
f3e6b9 |
} else {
|
|
Packit |
f3e6b9 |
return &{ "${::module}::add_${::data_type}_code_alias" }(@test)
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
} elsif ($op eq 'delete_code_alias') {
|
|
Packit |
f3e6b9 |
if ($::obj) {
|
|
Packit |
f3e6b9 |
return $::obj->delete_code_alias(@test);
|
|
Packit |
f3e6b9 |
} else {
|
|
Packit |
f3e6b9 |
return &{ "${::module}::delete_${::data_type}_code_alias" }(@test)
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
} elsif ($op eq 'codeset') {
|
|
Packit |
f3e6b9 |
if ($::obj) {
|
|
Packit |
f3e6b9 |
return $::obj->codeset(@test);
|
|
Packit |
f3e6b9 |
} else {
|
|
Packit |
f3e6b9 |
return &{ "${::module}::codeset" }(@test)
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
} elsif ($op eq 'type') {
|
|
Packit |
f3e6b9 |
if ($::obj) {
|
|
Packit |
f3e6b9 |
return $::obj->type(@test);
|
|
Packit |
f3e6b9 |
} else {
|
|
Packit |
f3e6b9 |
return &{ "${::module}::type" }(@test)
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
}
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
$generic_tests = "
|
|
Packit |
f3e6b9 |
#################
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
2code
|
|
Packit |
f3e6b9 |
_undef_
|
|
Packit |
f3e6b9 |
_undef_
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
2code
|
|
Packit |
f3e6b9 |
_undef_
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
2code
|
|
Packit |
f3e6b9 |
_blank_
|
|
Packit |
f3e6b9 |
_undef_
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
2code
|
|
Packit |
f3e6b9 |
UnusedName
|
|
Packit |
f3e6b9 |
_undef_
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
2code
|
|
Packit |
f3e6b9 |
_undef_
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
2code
|
|
Packit |
f3e6b9 |
_undef_
|
|
Packit |
f3e6b9 |
_undef_
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
2name
|
|
Packit |
f3e6b9 |
_undef
|
|
Packit |
f3e6b9 |
_undef_
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
2name
|
|
Packit |
f3e6b9 |
_undef_
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
###
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
add
|
|
Packit |
f3e6b9 |
AAA
|
|
Packit |
f3e6b9 |
newCode
|
|
Packit |
f3e6b9 |
1
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
2code
|
|
Packit |
f3e6b9 |
newCode
|
|
Packit |
f3e6b9 |
aaa
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
delete
|
|
Packit |
f3e6b9 |
AAA
|
|
Packit |
f3e6b9 |
1
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
2code
|
|
Packit |
f3e6b9 |
newCode
|
|
Packit |
f3e6b9 |
_undef_
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
###
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
add
|
|
Packit |
f3e6b9 |
AAA
|
|
Packit |
f3e6b9 |
newCode
|
|
Packit |
f3e6b9 |
1
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
rename
|
|
Packit |
f3e6b9 |
AAA
|
|
Packit |
f3e6b9 |
newCode2
|
|
Packit |
f3e6b9 |
1
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
2code
|
|
Packit |
f3e6b9 |
newCode
|
|
Packit |
f3e6b9 |
aaa
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
2code
|
|
Packit |
f3e6b9 |
newCode2
|
|
Packit |
f3e6b9 |
aaa
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
###
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
add_alias
|
|
Packit |
f3e6b9 |
newCode2
|
|
Packit |
f3e6b9 |
newAlias
|
|
Packit |
f3e6b9 |
1
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
2code
|
|
Packit |
f3e6b9 |
newAlias
|
|
Packit |
f3e6b9 |
aaa
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
delete_alias
|
|
Packit |
f3e6b9 |
newAlias
|
|
Packit |
f3e6b9 |
1
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
2code
|
|
Packit |
f3e6b9 |
newAlias
|
|
Packit |
f3e6b9 |
_undef_
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
###
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
replace_code
|
|
Packit |
f3e6b9 |
AAA
|
|
Packit |
f3e6b9 |
BBB
|
|
Packit |
f3e6b9 |
1
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
2name
|
|
Packit |
f3e6b9 |
AAA
|
|
Packit |
f3e6b9 |
newCode2
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
2name
|
|
Packit |
f3e6b9 |
BBB
|
|
Packit |
f3e6b9 |
newCode2
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
###
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
add_code_alias
|
|
Packit |
f3e6b9 |
BBB
|
|
Packit |
f3e6b9 |
CCC
|
|
Packit |
f3e6b9 |
1
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
2name
|
|
Packit |
f3e6b9 |
BBB
|
|
Packit |
f3e6b9 |
newCode2
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
2name
|
|
Packit |
f3e6b9 |
CCC
|
|
Packit |
f3e6b9 |
newCode2
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
delete_code_alias
|
|
Packit |
f3e6b9 |
CCC
|
|
Packit |
f3e6b9 |
1
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
2name
|
|
Packit |
f3e6b9 |
CCC
|
|
Packit |
f3e6b9 |
_undef_
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
";
|
|
Packit |
f3e6b9 |
|
|
Packit |
f3e6b9 |
1;
|
|
Packit |
f3e6b9 |
# Local Variables:
|
|
Packit |
f3e6b9 |
# mode: cperl
|
|
Packit |
f3e6b9 |
# indent-tabs-mode: nil
|
|
Packit |
f3e6b9 |
# cperl-indent-level: 3
|
|
Packit |
f3e6b9 |
# cperl-continued-statement-offset: 2
|
|
Packit |
f3e6b9 |
# cperl-continued-brace-offset: 0
|
|
Packit |
f3e6b9 |
# cperl-brace-offset: 0
|
|
Packit |
f3e6b9 |
# cperl-brace-imaginary-offset: 0
|
|
Packit |
f3e6b9 |
# cperl-label-offset: 0
|
|
Packit |
f3e6b9 |
# End:
|
|
Packit |
f3e6b9 |
|