#!/usr/bin/env perl
my
$help
= 0;
my
$details
= 0;
GetOptions (
'details'
=> \
$details
,
'help'
=> \
$help
,
) or
die
"invalid options"
;
if
(
$help
) {
usage();
exit
(0);
}
my
%countries
;
my
$country_file
= dirname(__FILE__) .
"/../conf/country_codes.yaml"
;
open
my
$FH
,
"<:encoding(UTF-8)"
,
$country_file
or
die
"unable to open $country_file $!"
;
while
(
my
$line
= <
$FH
>){
chomp
(
$line
);
if
(
$line
=~ m/^(\w\w): \
$countries
{$1} = $2;
}
elsif
(
$line
=~ m/^
"(\w\w)"
: \
$countries
{$1} = $2;
}
}
close
$FH
;
my
$total_countries
=
scalar
(
keys
%countries
);
print
"We are aware of "
.
$total_countries
.
" territories \n"
;
my
$test_dir
= dirname(__FILE__) .
'/../testcases/countries'
;
opendir
(
my
$dh
,
$test_dir
) ||
die
"Error: Couldn't opendir($test_dir): $!\n"
;
my
@files
=
grep
{ -f
"$test_dir/$_"
}
readdir
(
$dh
);
closedir
(
$dh
);
my
%test_countries
;
foreach
my
$f
(
sort
@files
){
$f
=~ s/\.yaml//;
$f
=
uc
(
$f
);
$test_countries
{
$f
} = 1;
if
(!
defined
(
$countries
{
$f
})){
print
STDERR
"have a test for $f but it is not a known territory\n"
;
}
}
my
$test_countries
=
scalar
(
keys
%test_countries
);
my
$test_perc
=
int
(100 *
$test_countries
/
$total_countries
);
print
"We have at least one test for "
.
$test_countries
.
' ('
.
$test_perc
.
'%) territories'
.
"\n"
;
if
(
$details
){
print
"We need tests for:\n"
;
foreach
my
$cc
(
sort
keys
%countries
){
next
if
(
defined
(
$test_countries
{
$cc
}));
print
"\t"
.
$cc
.
"\t"
.
$countries
{
$cc
}.
"\n"
;
}
}
my
$rules_file
= dirname(__FILE__) .
'/../conf/countries/worldwide.yaml'
;
open
my
$RFH
,
"<:encoding(UTF-8)"
,
$rules_file
or
die
"unable to open $rules_file $!"
;
my
%rules
;
while
(
my
$line
= <
$RFH
>){
chomp
(
$line
);
if
(
$line
=~ m/^
"?(\w\w)"
?:\s*$/){
$rules
{$1} = 1;
}
}
close
$RFH
;
my
$rules_countries
=
scalar
(
keys
%rules
);
my
$rules_perc
=
int
(100 *
$rules_countries
/
$total_countries
);
print
"We have rules for "
.
$rules_countries
.
' ('
.
$rules_perc
.
'%) territories'
.
"\n"
;
if
(
$details
){
print
"We need rules for:\n"
;
foreach
my
$cc
(
sort
keys
%countries
){
next
if
(
defined
(
$rules
{
$cc
}));
print
"\t"
.
$cc
.
"\t"
.
$countries
{
$cc
}.
"\n"
;
}
}
my
%neither
;
foreach
my
$cc
(
sort
keys
%countries
){
next
if
(
defined
(
$rules
{
$cc
}));
next
if
(
defined
(
$test_countries
{
$cc
}));
$neither
{
$cc
} = 1;
}
my
$neither_countries
=
scalar
(
keys
%neither
);
my
$neither_perc
=
int
(100 *
$neither_countries
/
$total_countries
);
print
$neither_countries
.
' ('
.
$neither_perc
.
'%) territories have neither rules nor tests'
.
"\n"
;
if
(
$details
){
print
"Territories with no test and no rules:\n"
;
foreach
my
$cc
(
sort
keys
%neither
){
print
"\t"
.
$cc
.
"\t"
.
$countries
{
$cc
}.
"\n"
;
}
}
sub
usage {
print
"\tHow many territories have formatting rules and tests?\n"
;
print
"\tBy default prints just a high level summary\n"
;
print
"\tusage:\n"
;
print
"\t\t no required parameters\n"
;
print
"\n"
;
print
"\t\t optional parameters:\n"
;
print
"\t\t --detail\t print full list of countries missing rules and tests\n"
;
print
"\t\t --help\t print this message \n"
;
print
"\n"
;
}