Branch Coverage

File:blib/lib/CGI/Lingua.pm
Coverage:76.0%

line%coveragebranch
133100TFif (not defined $class) { }
100TFelsif (ref $class) { }
13450TFif ($params)
13550TFif (my $logger = $params->{'logger'})
14350TFif defined $params->{'supported'}
150100TFif (defined $params->{'logger'} and &blessed($params->{'logger'}))
151100TFunless ($params->{'logger'}->can("warn") and $params->{'logger'}->can("info") and $params->{'logger'}->can("error"))
164100TFif (defined $params->{'supported'}) { }
166100TFif (ref $params->{'supported'}) { }
100TFelsif (length $params->{'supported'} < 2 or length $params->{'supported'} > 5) { }
167100TFif (ref $params->{'supported'} ne "ARRAY")
17450TFif (my $logger = $params->{'logger'})
184100TFif ($cache and $ENV{'REMOTE_ADDR'})
186100TFif (my $rc = $cache->get($key))
19950TFif ($rc->{'_what_language'} || $rc->{'_rlanguage'} and $info and $info->lang)
216100TFref $params->{'supported'} ? :
237100TFif ($info and $l = $info->lang) { }
100TFelsif ($l = $class->_what_language) { }
248100TFif (ref $params->{'supported'} eq 'ARRAY') { }
25950TFif (defined $^V and $^V ge "v5.14.0")
26050TFif ${^GLOBAL_PHASE} eq "DESTRUCT"
262100TFunless $ENV{'REMOTE_ADDR'}
26550TFunless ref $self
268100TFunless $cache
276100TFif $cache->get($key)
318100TFunless $self->{'_slanguage'}
361100TFunless $self->{'_slanguage'}
385100TFunless $self->{'_slanguage'}
416100TFunless $self->{'_slanguage'}
438100TFunless $self->{'_rlanguage'}
459100TFif (defined $http_accept_language)
467100TFif ($http_accept_language eq $DEPRECATED_EN_UK)
477100TFif ($l) { }
100TFelsif ($http_accept_language =~ /;/) { }
478100TFif $self->_resolve_match($l, $requested_sublanguage, $http_accept_language)
49050TFif ($self->{'_slanguage'} and $self->{'_slanguage'} ne "Unknown")
4910TFif ($self->{'_rlanguage'} eq "Unknown")
4940TFif ($self->{'_rlanguage'})
4950TFif (my $resolved = $self->_code2language($self->{'_rlanguage'}))
503100TFif (!$self->{'_rlanguage'} || $self->{'_rlanguage'} eq 'Unknown' and length $http_accept_language == 2 || $http_accept_language =~ /^..-..$/)
512100TFif $self->{'_dont_use_ip'}
53050TFunless $_[0] =~ /^Use of uninitialized value/
538100TFif ($l and $http_accept_language =~ /-/ and not $http_accept_language =~ qr/$l/i)
544100TFunless ($l)
550100TFunless ($l)
553100TFif $l
573100TFif ($token =~ s/;\s*q\s*=\s*(\d+(?:\.\d+)?)//)
57750TFif length $token
596100TFunless $tag =~ /^(..)-(..)$/
599100TFif ($i18n->accepts($base, $self->{'_supported'}))
621100TFif $tag =~ /^..-../
623100TFif ($i18n->accepts($tag, $self->{'_supported'}))
644100TFif (not $l =~ /^..-../) { }
50TFelsif ($l =~ /(.+)-(..)$/) { }
666100TFunless $self->{'_slanguage'}
674100TFif ($header =~ /..-(..)$/) { }
100TFelsif ($header =~ /..-([a-z]{2,3})$/i) { }
68050TFif $@
683100TFif ($sl) { }
100TFelsif ($requested_sublanguage) { }
686100TFif (my $c = $self->_code2countryname($requested_sublanguage)) { }
71150TFif ($accepts)
71450TFif ($accepts =~ /\-/) { }
7190TFif ($self->{'_cache'})
7230TFif ($from_cache) { }
7300TFif ($slanguage)
7340TFif ($variety eq "uk")
7390TFif (defined(my $c = $self->_code2countryname($variety)))
7460TFif ($self->{'_sublanguage'})
7510TFunless ($from_cache)
7570TFif $self->{'_cache'}
76950TFunless $accepts
77650TFif ($variety =~ /[a-z]{2,3}/ and not defined $self->{'_sublanguage'})
78050TFif ($variety eq "uk")
786100TFif ($self->{'_cache'})
790100TFif (defined $from_cache) { }
803100TFif (defined $results[0]) { }
810100TFif ($@ or not defined $language_name) { }
81150TFif $@
818100TFif ($self->{'_cache'} and not defined $from_cache)
83350TFif (defined $self->{'_sublanguage'})
855100TFif (not defined $country and my $c = $self->_what_language)
856100TFif ($c =~ /^(..)_(..)/) { }
100TFelsif ($c =~ /^(..)$/) { }
862100TFunless defined $country
867100TFif ($self->{'_cache'})
871100TFif ($from_cache) { }
876100TFif ($l)
87850TFif (defined $l)
88150TFif $language_name
887100TFunless $language_name
889100TFif (not defined $self->{'_rlanguage'} or $self->{'_rlanguage'} eq "Unknown")
89350TFunless (exists $self->{'_slanguage'} and $self->{'_slanguage'} ne "Unknown")
896100TFif ($language_name and $language_code2 and not defined $http_accept_language) { }
90450TFunless ($code)
9050TFif ($http_accept_language and $http_accept_language ne $self->{'_rlanguage'})
9090TFunless ($code)
9110TFif ($self->{'_rlanguage'} =~ /(.+)\s\(.+/)
9120TFif (not defined $http_accept_language or $1 ne $self->{'_rlanguage'})
9170TFunless ($code)
92650TFif ($code)
92850TFif ($self->{'_slanguage'}) { }
938100TFif (not defined $self->{'_slanguage_code_alpha2'}) { }
100TFelsif (not defined $from_cache and $self->{'_cache'} and defined $self->{'_slanguage_code_alpha2'}) { }
961100TF/^(.+)-/ ? :
963100TFif (exists $base_languages{$language_string})
980100TFif (ref $self)
982100TFif ($self->{'_what_language'})
986100TFif (my $info = $self->{'_info'})
98750TFif (my $rc = $info->lang)
994100TFif (my $raw_lang = $ENV{'HTTP_ACCEPT_LANGUAGE'})
996100TFif ($raw_lang =~ /^([A-Za-z0-9\-,;=.*\s]{1,$ACCEPT_LANG_MAX})$/a) { }
50TFelsif (ref $self) { }
998100TFif (ref $self)
1007100TFif (defined $ENV{'LANG'})
1013100TFif ($ENV{'LANG'} =~ /^([A-Za-z0-9_.\-]{1,$ACCEPT_LANG_MAX})$/a) { }
50TFelsif (ref $self) { }
101550TFif (ref $self)
1059100TFif ($self->{'_country'})
1065100TFif (defined $ENV{'GEOIP_COUNTRY_CODE'})
1066100TFif ($ENV{'GEOIP_COUNTRY_CODE'} =~ /^([A-Z]{2})$/a) { }
1075100TFif ($ENV{'HTTP_CF_IPCOUNTRY'} and $ENV{'HTTP_CF_IPCOUNTRY'} ne "XX")
1076100TFif ($ENV{'HTTP_CF_IPCOUNTRY'} =~ /^([A-Z]{2})$/a) { }
1085100TFunless defined $raw_ip
1089100TFif ($raw_ip =~ /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/a) { }
100TFelsif ($raw_ip =~ /^([0-9a-fA-F:]{2,39}|[0-9a-fA-F:]{2,30}:(?:\d{1,3}\.){3}\d{1,3})$/a) { }
1101100TFunless (is_ipv4($ip))
1103100TFif ($ip eq '::1') { }
50TFelsif ($ip =~ /^::ffff:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/i) { }
50TFelsif (not is_ipv6($ip)) { }
1112100TFif (is_private_ip($ip))
1116100TFif (is_loopback_ip($ip))
1122100TFif ($self->{'_cache'})
1124100TFif (defined $self->{'_country'})
1125100TFif (not $self->{'_country'} =~ /\D/) { }
1138100TFif ($self->{'_have_ipcountry'} == $GEO_UNKNOWN)
113950TFif (eval {         do {         require IP::Country } }) { }
1149100TFif ($self->{'_have_ipcountry'})
1151100TFif ($self->{'_country'}) { }
50TFelsif (is_ipv4($ip)) { }
1159100TFunless (defined $self->{'_country'})
1160100TFif ($self->{'_have_geoip'} == $GEO_UNKNOWN)
1163100TFif ($self->{'_have_geoip'} == $GEO_PRESENT)
1168100TFif (not defined $self->{'_country'} and $ip ne $BROKEN_GEOIPFREE)
116950TFif ($self->{'_have_geoipfree'} == $GEO_UNKNOWN)
11710TFif ($@) { }
1179100TFif ($self->{'_have_geoipfree'} == $GEO_PRESENT)
118050TFif (my $country = ($self->{'_geoipfree'}->LookUp($ip))[0])
1188100TFif ($self->{'_country'} and $self->{'_country'} eq "eu")
119350TFif (not $self->{'_country'} and eval {         do {         require LWP::Simple::WithCache; require JSON::Parse } })
11990TFif (my $data = LWP::Simple::WithCache::get("http://www.geoplugin.net/json.gp?ip=$ip"))
12010TFif $@
1206100TFunless ($self->{'_country'})
1211100TFif ($self->{'_country'})
1212100TFif (not $self->{'_country'} =~ /\D/) { }
1219100TFif ($self->{'_country'} eq 'hk') { }
100TFelsif ($self->{'_country'} eq 'eu') { }
122550TFif ($self->{'_country'} and not $self->{'_country'} =~ /\D/) { }
100TFelsif ($self->{'_country'} and $self->{'_cache'}) { }
1263100TFunless ($@ or not defined $whois or ref $whois ne "HASH")
1264100TFif (defined $whois->{'Country'}) { }
50TFelsif (defined $whois->{'country'}) { }
126950TFif ($self->{'_country'})
1270100TFif ($self->{'_country'} eq 'EU') { }
100TFelsif ($self->{'_country'} eq 'US' and defined $whois->{'StateProv'} and $whois->{'StateProv'} eq 'PR') { }
1279100TFif ($self->{'_country'})
1283100TFif ($self->{'_country'} =~ /^(..)\s*#/)
129650TFunless ($@)
1301100TFif ($self->{'_country'})
1303100TFif ($self->{'_country'} =~ /^(..)\s*#/)
1323100TFif (subnet_matcher($BAIDU_SUBNET)->($ip)) { }
134950TFunless ($db_present)
13550TFif ($@)
13640TFif (-r '/usr/share/GeoIP/GeoIP.dat') { }
1391100TFif $self->{'_locale'}
1396100TFif (defined $agent and $agent =~ /\((.+)\)/)
1401100TFif ($candidate =~ /^[a-zA-Z]{2}-([a-zA-Z]{2})$/)
140350TFif (my $c = $self->_code2country($1))
141150TFif (eval {         do {         require HTTP::BrowserDetect } })
1414100TFif ($browser and $browser->country and my $c = $self->_code2country($browser->country))
1423100TFif ($country)
143050TFunless ($@)
143150TFif ($c)
1440100TFif (defined $ENV{'GEOIP_COUNTRY_CODE'})
144150TFif ($ENV{'GEOIP_COUNTRY_CODE'} =~ /^([A-Z]{2})$/a)
14420TFif (my $c = $self->_code2country(lc $1))
1476100TFif ($self->{'_timezone'})
1483100TFif (defined $raw_ip) { }
1487100TFif ($raw_ip =~ /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/a) { }
50TFelsif ($raw_ip =~ /^([0-9a-fA-F:]{2,39}|[0-9a-fA-F:]{2,30}:(?:\d{1,3}\.){3}\d{1,3})$/a) { }
1496100TFif ($self->{'_have_geoip'} == $GEO_UNKNOWN)
1499100TFif ($self->{'_have_geoip'} == $GEO_PRESENT)
1503100TFunless ($self->{'_timezone'})
150450TFif (eval {         do {         require LWP::Simple::WithCache; require JSON::Parse } }) { }
50TFelsif (eval {         do {         require LWP::Simple; require JSON::Parse } }) { }
15090TFif (my $data = LWP::Simple::WithCache::get("http://ip-api.com/json/$ip"))
15110TFif $@
15180TFif (my $data = LWP::Simple::get("http://ip-api.com/json/$ip"))
15200TFif $@
153050TFif (open my $fin, '<', '/etc/timezone') { }
1539100TFunless (defined $self->{'_timezone'})
1561100TF$RTL_LANGS{$self->language_code_alpha2 // ''} ? :
1579100TF$self->is_rtl ? :
17460TFint $_[0] == 1 ? :
1783100TFunless defined $dir
178850TFif (my $sub = $self->sublanguage_code_alpha2)
179150TFif defined $self->language_code_alpha2
1796100TFif -e $path
1811100TFunless $code
1812100TFif (defined $self->{'_country'}) { }
1818100TFunless ($self->{'_cache'})
1822100TFif (my $from_cache = $self->{'_cache'}->get($CACHE_NS . "code2language:$code"))
1831100TFif (defined $name)
1847100TFunless $code
1848100TFif ($self->{'_country'}) { }
185850TFunless $_[0] =~ /No result found in country table/
1876100TFunless $code
1879100TFunless ($self->{'_cache'})
1881100TFdefined $country ? :
1884100TFif (my $from_cache = $self->{'_cache'}->get($CACHE_NS . "code2countryname:$code"))
1889100TFif (my $country = $self->_code2country($code))
1912100TFunless ref $self and scalar @messages
1915100TFunless length $text
1918100TFif (my $logger = $self->{'logger'})
1938100TFif (defined $self->{'logger'}) { }