Branch Coverage

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

line%coveragebranch
154100TFif (not defined $class) { }
100TFelsif (ref $class) { }
15550TFif ($params)
15650TFif (my $logger = $params->{'logger'})
16450TFif defined $params->{'supported'}
171100TFif (defined $params->{'logger'} and &blessed($params->{'logger'}))
172100TFunless ($params->{'logger'}->can("warn") and $params->{'logger'}->can("info") and $params->{'logger'}->can("error"))
185100TFif (defined $params->{'supported'}) { }
187100TFif (ref $params->{'supported'}) { }
100TFelsif (length $params->{'supported'} < 2 or length $params->{'supported'} > 5) { }
188100TFif (ref $params->{'supported'} ne "ARRAY")
19550TFif (my $logger = $params->{'logger'})
205100TFif ($cache and $ENV{'REMOTE_ADDR'})
207100TFif (my $frozen = $cache->get($key))
21550TFunless (defined $rc and ref $rc eq "HASH")
21850TFif (defined $rc)
23150TFif ($rc->{'_what_language'} || $rc->{'_rlanguage'} and $info and $info->lang)
249100TFref $params->{'supported'} ? :
270100TFif ($info and $l = $info->lang) { }
100TFelsif ($l = $class->_what_language) { }
281100TFif (ref $params->{'supported'} eq 'ARRAY') { }
29250TFif (defined $^V and $^V ge "v5.14.0")
29350TFif ${^GLOBAL_PHASE} eq "DESTRUCT"
295100TFunless $ENV{'REMOTE_ADDR'}
29850TFunless ref $self
301100TFunless $cache
309100TFif $cache->get($key)
359100TFunless $self->{'_slanguage'}
408100TFunless $self->{'_slanguage'}
438100TFunless $self->{'_slanguage'}
475100TFunless $self->{'_slanguage'}
503100TFunless $self->{'_rlanguage'}
524100TFif (defined $http_accept_language)
532100TFif ($http_accept_language eq $DEPRECATED_EN_UK)
542100TFif ($l) { }
100TFelsif ($http_accept_language =~ /;/) { }
543100TFif $self->_resolve_match($l, $requested_sublanguage, $http_accept_language)
55550TFif ($self->{'_slanguage'} and $self->{'_slanguage'} ne "Unknown")
5560TFif ($self->{'_rlanguage'} eq "Unknown")
5590TFif ($self->{'_rlanguage'})
5600TFif (my $resolved = $self->_code2language($self->{'_rlanguage'}))
568100TFif (!$self->{'_rlanguage'} || $self->{'_rlanguage'} eq 'Unknown' and length $http_accept_language == 2 || $http_accept_language =~ /^..-..$/)
577100TFif $self->{'_dont_use_ip'}
59550TFunless $_[0] =~ /^Use of uninitialized value/
603100TFif ($l and $http_accept_language =~ /-/ and not $http_accept_language =~ qr/$l/i)
609100TFunless ($l)
615100TFunless ($l)
618100TFif $l
637100TFif ($token =~ s/;\s*q\s*=\s*(\d+(?:\.\d+)?)//)
64150TFif length $token
660100TFunless $tag =~ /^(..)-(..)$/
663100TFif ($i18n->accepts($base, $self->{'_supported'}))
685100TFif $tag =~ /^..-../
687100TFif ($i18n->accepts($tag, $self->{'_supported'}))
708100TFif (not $l =~ /^..-../) { }
50TFelsif ($l =~ /(.+)-(..)$/) { }
730100TFunless $self->{'_slanguage'}
738100TFif ($header =~ /..-(..)$/) { }
100TFelsif ($header =~ /..-([a-z]{2,3})$/i) { }
74450TFif $@
747100TFif ($sl) { }
100TFelsif ($requested_sublanguage) { }
750100TFif (my $c = $self->_code2countryname($requested_sublanguage)) { }
77550TFif ($accepts)
77850TFif ($accepts =~ /\-/) { }
7830TFif ($self->{'_cache'})
7870TFif ($from_cache) { }
7940TFif ($slanguage)
7980TFif ($variety eq "uk")
8030TFif (defined(my $c = $self->_code2countryname($variety)))
8100TFif ($self->{'_sublanguage'})
8150TFunless ($from_cache)
8210TFif $self->{'_cache'}
83350TFunless $accepts
84050TFif ($variety =~ /[a-z]{2,3}/ and not defined $self->{'_sublanguage'})
84450TFif ($variety eq "uk")
850100TFif ($self->{'_cache'})
854100TFif (defined $from_cache) { }
867100TFif (defined $results[0]) { }
874100TFif ($@ or not defined $language_name) { }
87550TFif $@
882100TFif ($self->{'_cache'} and not defined $from_cache)
89750TFif (defined $self->{'_sublanguage'})
919100TFif (not defined $country and my $c = $self->_what_language)
920100TFif ($c =~ /^(..)_(..)/) { }
100TFelsif ($c =~ /^(..)$/) { }
926100TFunless defined $country
931100TFif ($self->{'_cache'})
935100TFif ($from_cache) { }
940100TFif ($l)
94250TFif (defined $l)
94550TFif $language_name
951100TFunless $language_name
953100TFif (not defined $self->{'_rlanguage'} or $self->{'_rlanguage'} eq "Unknown")
95750TFunless (exists $self->{'_slanguage'} and $self->{'_slanguage'} ne "Unknown")
960100TFif ($language_name and $language_code2 and not defined $http_accept_language) { }
96850TFunless ($code)
9690TFif ($http_accept_language and $http_accept_language ne $self->{'_rlanguage'})
9730TFunless ($code)
9750TFif ($self->{'_rlanguage'} =~ /(.+)\s\(.+/)
9760TFif (not defined $http_accept_language or $1 ne $self->{'_rlanguage'})
9810TFunless ($code)
99050TFif ($code)
99250TFif ($self->{'_slanguage'}) { }
1002100TFif (not defined $self->{'_slanguage_code_alpha2'}) { }
100TFelsif (not defined $from_cache and $self->{'_cache'} and defined $self->{'_slanguage_code_alpha2'}) { }
1025100TF/^(.+)-/ ? :
1027100TFif (exists $base_languages{$language_string})
1044100TFif (ref $self)
1046100TFif (defined $self->{'_what_language'})
1050100TFif (my $info = $self->{'_info'})
105150TFif (my $rc = $info->lang)
1058100TFif (my $raw_lang = $ENV{'HTTP_ACCEPT_LANGUAGE'})
1060100TFif ($raw_lang =~ /^([A-Za-z0-9\-,;=.*\s]{1,$ACCEPT_LANG_MAX})$/a) { }
50TFelsif (ref $self) { }
1062100TFif (ref $self)
1071100TFif (defined $ENV{'LANG'})
1077100TFif ($ENV{'LANG'} =~ /^([A-Za-z0-9_.\-]{1,$ACCEPT_LANG_MAX})$/a) { }
50TFelsif (ref $self) { }
107950TFif (ref $self)
1153100TFif ($self->{'_country'})
1159100TFif (defined $ENV{'GEOIP_COUNTRY_CODE'})
1160100TFif ($ENV{'GEOIP_COUNTRY_CODE'} =~ /^([A-Z]{2})$/a) { }
1169100TFif ($ENV{'HTTP_CF_IPCOUNTRY'} and $ENV{'HTTP_CF_IPCOUNTRY'} ne "XX")
1170100TFif ($ENV{'HTTP_CF_IPCOUNTRY'} =~ /^([A-Z]{2})$/a) { }
1179100TFunless defined $raw_ip
1183100TFif ($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) { }
1195100TFunless (is_ipv4($ip))
1197100TFif ($ip eq '::1') { }
100TFelsif ($ip =~ /^::ffff:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/i) { }
50TFelsif (not is_ipv6($ip)) { }
1204100TFunless (is_ipv4($ip))
1213100TFif (is_private_ip($ip))
1217100TFif (is_loopback_ip($ip))
1223100TFif ($self->{'_cache'})
1225100TFif (defined $self->{'_country'})
1226100TFif (not $self->{'_country'} =~ /\D/) { }
123950TFif ($self->{'_have_ipcountry'} == $GEO_UNKNOWN)
12400TFif (eval {         do {         require IP::Country::Fast } }) { }
1251100TFif ($self->{'_have_ipcountry'})
1253100TFif ($self->{'_country'}) { }
50TFelsif (is_ipv4($ip)) { }
1261100TFunless (defined $self->{'_country'})
1262100TFif ($self->{'_have_geoip'} == $GEO_UNKNOWN)
1265100TFif ($self->{'_have_geoip'} == $GEO_PRESENT)
1270100TFif (not defined $self->{'_country'} and $ip ne $BROKEN_GEOIPFREE)
127150TFif ($self->{'_have_geoipfree'} == $GEO_UNKNOWN)
12730TFif ($@) { }
1283100TFif ($self->{'_have_geoipfree'} == $GEO_PRESENT)
128450TFif (my $country = ($self->{'_geoipfree'}->LookUp($ip))[0])
1292100TFif ($self->{'_country'} and $self->{'_country'} eq "eu")
129750TFif (not $self->{'_country'} and eval {         do {         require LWP::Simple::WithCache; require JSON::Parse } })
13010TFif (my $data = LWP::Simple::WithCache::get("https://www.geoplugin.net/json.gp?ip=$ip"))
13030TFif $@
1308100TFunless ($self->{'_country'})
1313100TFif ($self->{'_country'})
1314100TFif (not $self->{'_country'} =~ /\D/) { }
1321100TFif ($self->{'_country'} eq 'hk') { }
100TFelsif ($self->{'_country'} eq 'eu') { }
132750TFif ($self->{'_country'} and not $self->{'_country'} =~ /\D/) { }
50TFelsif ($self->{'_country'} and $self->{'_country'} ne 'Unknown' and not $self->{'_country'} =~ /^[a-z]{2}$/) { }
100TFelsif ($self->{'_country'} and $self->{'_cache'}) { }
1376100TFunless ($@ or not defined $whois or ref $whois ne "HASH")
1377100TFif (defined $whois->{'Country'}) { }
50TFelsif (defined $whois->{'country'}) { }
138250TFif ($self->{'_country'})
1383100TFif ($self->{'_country'} eq 'EU') { }
100TFelsif ($self->{'_country'} eq 'US' and defined $whois->{'StateProv'} and $whois->{'StateProv'} eq 'PR') { }
1392100TFif ($self->{'_country'})
1397100TFif defined $self->{'_country'}
140850TFunless ($@)
1413100TFif ($self->{'_country'})
141550TFunless defined $self->{'_country'}
1433100TFif ($raw =~ /^([A-Za-z]{2})\s*(?:#.*)?$/)
1453100TFif (subnet_matcher($BAIDU_SUBNET)->($ip)) { }
147950TFunless ($db_present)
14850TFif ($@)
14940TFif (-r '/usr/share/GeoIP/GeoIP.dat') { }
1539100TFif $self->{'_locale'}
1545100TFif (defined(my $raw_agent = $ENV{'HTTP_USER_AGENT'}))
1546100TFif ($raw_agent =~ /^([\x20-\x7e]{1,$UA_MAX})$/a) { }
1554100TFif (defined $agent and $agent =~ /\((.+)\)/)
1559100TFif ($candidate =~ /^[a-zA-Z]{2}-([a-zA-Z]{2})$/)
156150TFif (my $c = $self->_code2country($1))
156950TFif (eval {         do {         require HTTP::BrowserDetect } })
157450TFif ($browser)
1576100TFif ($bc =~ /^([A-Za-z]{2})$/a)
157750TFif (my $c = $self->_code2country($1))
1588100TFif ($country)
159550TFunless ($@)
159650TFif ($c)
1605100TFif (defined $ENV{'GEOIP_COUNTRY_CODE'})
160650TFif ($ENV{'GEOIP_COUNTRY_CODE'} =~ /^([A-Z]{2})$/a)
16070TFif (my $c = $self->_code2country(lc $1))
1661100TFif ($self->{'_timezone'})
1668100TFif (defined $raw_ip) { }
1672100TFif ($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) { }
1681100TFif ($self->{'_have_geoip'} == $GEO_UNKNOWN)
1684100TFif ($self->{'_have_geoip'} == $GEO_PRESENT)
1688100TFunless ($self->{'_timezone'})
168950TFif (eval {         do {         require LWP::Simple::WithCache; require JSON::Parse } }) { }
50TFelsif (eval {         do {         require LWP::Simple; require JSON::Parse } }) { }
16920TFif (my $data = LWP::Simple::WithCache::get("http://ip-api.com/json/$ip"))
16940TFif $@
16990TFif (my $data = LWP::Simple::get("http://ip-api.com/json/$ip"))
17010TFif $@
171150TFif (open my $fin, '<', '/etc/timezone') { }
172450TFif (defined $self->{'_timezone'} and not $self->{'_timezone'} =~ m[^[A-Za-z][A-Za-z0-9_+\-/]{0,50}$])
1730100TFunless (defined $self->{'_timezone'})
1758100TF$RTL_LANGS{$self->language_code_alpha2 // ''} ? :
1782100TF$self->is_rtl ? :
195650TFunless defined $n
19580TFint $_[0] == 1 ? :
2006100TFunless defined $dir
201250TFif ($dir =~ /\.\./ or $dir =~ /\x00/)
2022100TFunless ($ext =~ /^[A-Za-z0-9\-]+$/)
202850TFif (my $sub = $self->sublanguage_code_alpha2)
203150TFif defined $self->language_code_alpha2
2036100TFif -e $path
2051100TFunless $code
2052100TFif (defined $self->{'_country'}) { }
2058100TFunless ($self->{'_cache'})
2062100TFif (my $from_cache = $self->{'_cache'}->get($CACHE_NS . "code2language:$code"))
2071100TFif (defined $name)
2087100TFunless $code
2088100TFif ($self->{'_country'}) { }
209850TFunless $_[0] =~ /No result found in country table/
2116100TFunless $code
2119100TFunless ($self->{'_cache'})
2121100TFdefined $country ? :
2124100TFif (my $from_cache = $self->{'_cache'}->get($CACHE_NS . "code2countryname:$code"))
2129100TFif (my $country = $self->_code2country($code))
2152100TFunless ref $self and scalar @messages
2155100TFunless length $text
2158100TFif (my $logger = $self->{'logger'})
218150TFref $params ? :
2183100TFif (defined $self->{'logger'}) { }