Branch Coverage

blib/lib/HTTP/BrowserDetect.pm
Criterion Covered Total %
branch 773 884 87.4


line true false branch
493 2 7251 unless (defined $user_agent)
497 7251 2 defined $user_agent ? :
522 5517 45159 unless $self->{'os_tests'}
546 5766 24930 unless $self->{'robot_tests'}
559 4466 19916 unless $self->{'version_tests'}
569 7253 15100 unless $self->{'device_tests'}
576 0 1 if (defined $user_agent) { }
648 30 7223 if ($ua =~ m[edge/([\d\.]+)]) { }
944 6279 elsif ($ua =~ m[trident/([\w\.\d]*)]) { }
732 5547 elsif (index($ua, 'gecko') != -1 and index($ua, 'like gecko') == -1) { }
2634 2913 elsif ($ua =~ m[applewebkit/([\d.\+]+)] and not $tests->{'edgehtml'}) { }
138 2775 elsif ($ua =~ m[presto/([\d.]+)]) { }
12 2763 elsif ($ua =~ m[khtml/([\d.]+)]) { }
659 660 72 if ($ua =~ /\([^)]*rv:([\w.\d]*)/)
678 12 7241 if (index($ua, 'galeon') != -1) { }
6 7235 elsif (index($ua, 'epiphany') != -1) { }
24 7211 elsif ($ua =~ m[(?:edg|edga|edgios)/[\d.]+]) { }
30 7181 elsif ($ua =~ m[edge/[\d.]+]) { }
636 6545 elsif ($ua =~ m[ (firebird|iceweasel|phoenix|namoroka|firefox|fxios) \/ ( [^.]* ) # Major version number is everything before first dot \. # The first dot ( [\d]* ) # Minor version nnumber is digits after first dot ]ox and index($ua, 'not firefox') == -1) { }
78 6467 elsif ($self->{'user_agent'} =~ / \[ FB (?: AN | _IAB ) /x) { }
264 6203 elsif ($ua =~ m[opera|opr\/]) { }
1730 4473 elsif ($tests->{'trident'} or index($ua, 'msie') != -1 or index($ua, 'microsoft internet explorer') != -1) { }
12 4461 elsif (0 < index($self->{'user_agent'}, ' Instagram ')) { }
12 4449 elsif (index($ua, 'brave') != -1) { }
72 4377 elsif (index($ua, 'silk') != -1) { }
6 4371 elsif (index($ua, 'samsungbrowser') != -1) { }
336 4035 elsif (index($ua, 'ucbrowser') != -1) { }
36 3999 elsif (0 < index($self->{'user_agent'}, ' YaBrowser/')) { }
1350 2649 elsif (index($ua, 'chrome/') != -1 or index($ua, 'crios') != -1) { }
42 2607 elsif (index($ua, 'blackberry') != -1 or index($ua, 'bb10') != -1 or index($ua, 'rim tablet os') != -1) { }
960 1647 elsif (index($ua, 'safari') != -1 or index($ua, 'applewebkit') != -1) { }
0 1647 elsif (index($ua, 'neoplanet') != -1) { }
0 1647 elsif (index($ua, 'webtv') != -1) { }
6 1641 elsif (index($ua, 'nintendo 3ds') != -1) { }
0 1641 elsif (index($ua, 'nintendo dsi') != -1) { }
42 1599 elsif (index($ua, 'playstation 3') != -1 or index($ua, 'playstation portable') != -1 or index($ua, 'netfront') != -1) { }
6 1593 elsif (index($ua, 'browsex') != -1) { }
18 1575 elsif (index($ua, 'polaris') != -1) { }
168 1407 elsif (index($ua, 'mozilla') != -1 and index($ua, 'compatible') == -1) { }
12 1395 elsif (index($ua, 'staroffice') != -1) { }
6 1389 elsif (index($ua, 'icab') != -1) { }
6 1383 elsif (index($ua, 'lotus-notes') != -1) { }
24 1359 elsif (index($ua, 'konqueror') != -1) { }
6 1353 elsif (index($ua, 'lynx') != -1) { }
6 1347 elsif (index($ua, 'elinks') != -1) { }
12 1335 elsif (index($ua, 'links') != -1) { }
0 1335 elsif (index($ua, 'mosaic') != -1) { }
6 1329 elsif (index($ua, 'emacs') != -1) { }
30 1299 elsif (index($ua, 'obigo') != -1) { }
54 1245 elsif (index($ua, 'teleca') != -1) { }
36 1209 elsif (index($ua, 'libcurl') != -1 or $ua =~ /^curl/) { }
6 1203 elsif (index($ua, 'puf/') != -1) { }
6 1197 elsif (index($ua, 'applecoremedia/') != -1) { }
6 1191 elsif (index($ua, 'androiddownloadmanager') != -1) { }
12 1179 elsif (index($ua, 'dalvik') != -1) { }
6 1173 elsif (index($ua, 'apple-pubsub') != -1) { }
6 1167 elsif (index($ua, 'imagesearcherpro') != -1) { }
718 6 630 $1 eq 'fxios' ? :
756 42 1688 if (index($ua, "aol") != -1 or index($ua, "america online browser") != -1)
822 12 1338 if (index($ua, "chromium") != -1)
840 276 684 if (index($ua, " mobile safari/") != -1 or index($ua, "mobilesafari") != -1)
845 18 942 if (index($ua, "puffin") != -1)
856 0 0 if index($ua, "2.") != -1
895 108 60 if (index($ua, 'netscape') != -1 or not $tests->{'gecko'}) { }
6 54 elsif (index($ua, 'seamonkey') != -1) { }
981 6086 1167 if defined $browser
986 462 6791 if index($ua, "x11") != -1
987 1086 6167 if index($ua, ".net clr") != -1
989 18 7235 if (index($ua, "realplayer") != -1)
1006 12 6 if ($ua =~ m[realplayer/([\d+\.]+)]) { }
6 0 elsif ($ua =~ /realplayer\s(\w+)/) { }
1010 12 0 if defined $self->{'minor'}
1017 18 7235 if (index($ua, "(r1 ") != -1)
1024 486 894 if ($self->android and index($ua, "; wv)") > 0 or $self->chrome and $self->android and $self->browser_major >= 30)
1039 78 186 if not ref $m and 0 < index($self->{'user_agent'}, $m)
1040 0 186 if "Regexp" eq ref $m and $self->{'user_agent'} =~ /$m/
1096 18 8779 if (index($ua, 'libwww-perl') != -1 or index($ua, 'lwp-') != -1) { }
12 8767 elsif (index($ua, 'slurp') != -1) { }
6 8761 elsif (index($ua, 'yahoo') != -1 and index($ua, 'jp.co.yahoo') == -1) { }
6 8755 elsif (index($ua, 'msnbot-mobile') != -1) { }
0 8755 elsif (index($ua, 'bingbot-mobile') != -1) { }
6 8749 elsif (index($ua, 'msnbot') != -1) { }
30 8719 elsif (index($ua, 'binglocalsearch') != -1 or index($ua, 'bingbot') != -1 or index($ua, 'bingpreview') != -1) { }
6 8713 elsif (index($ua, 'microsoft office existence discovery') != -1) { }
6 8707 elsif (index($ua, 'ahrefsbot') != -1) { }
0 8707 elsif (index($ua, 'altavista') != -1) { }
12 8695 elsif (index($ua, 'apache-httpclient') != -1) { }
6 8689 elsif ($ua =~ /\( *\) *\{ *\: *\; */) { }
0 8689 elsif (index($ua, 'ask jeeves/teoma') != -1) { }
18 8671 elsif (index($ua, 'baiduspider') != -1) { }
36 8635 elsif (index($ua, 'libcurl') != -1 or $ua =~ /^curl/) { }
6 8629 elsif (index($ua, 'facebookexternalhit') != -1) { }
6 8623 elsif (index($ua, 'getright') != -1) { }
12 8611 elsif (index($ua, 'adsbot-google') != -1) { }
6 8605 elsif (index($ua, 'mediapartners-google') != -1) { }
6 8599 elsif (index($ua, 'google favicon') != -1) { }
6 8593 elsif (index($ua, 'googlebot-image') != -1) { }
6 8587 elsif (index($ua, 'googlebot-news') != -1) { }
6 8581 elsif (index($ua, 'googlebot-video') != -1) { }
18 8563 elsif (index($ua, 'googlebot-mobile') != -1) { }
36 8527 elsif (index($ua, 'googlebot') != -1) { }
6 8521 elsif ($ua =~ /go.*package http/) { }
6 8515 elsif ($ua =~ /^http_request/) { }
0 8515 elsif ($ua =~ /^http_request/) { }
6 8509 elsif (index($ua, 'indy library') != -1) { }
0 8509 elsif (index($ua, 'infoseek') != -1) { }
6 8503 elsif (index($ua, 'ips-agent') != -1) { }
0 8503 elsif (index($ua, 'lecodechecker') != -1) { }
12 8491 elsif (index($ua, 'linkchecker') != -1) { }
0 8491 elsif (index($ua, 'lycos') != -1) { }
12 8479 elsif (index($ua, 'mechanize') != -1) { }
6 8473 elsif (index($ua, 'mj12bot/') != -1) { }
18 8455 elsif (index($ua, 'nutch') != -1) { }
6 8449 elsif (index($ua, 'puf/') != -1) { }
0 8449 elsif (index($ua, 'scooter') != -1) { }
6 8443 elsif (index($ua, 'special_archiver') != -1) { }
12 8431 elsif (index($ua, 'wget') == 0) { }
6 8425 elsif (index($ua, 'yandexbot') != -1) { }
6 8419 elsif (index($ua, 'yandeximages') != -1) { }
6 8413 elsif (index($ua, 'headlesschrome') != -1) { }
42 8371 elsif ($ua =~ /^java/ and not $self->{'browser'}) { }
0 8371 elsif (index($ua, 'jdk') != -1) { }
6 8365 elsif (index($ua, 'jakarta commons-httpclient') != -1) { }
6 8359 elsif (index($ua, 'google-http-java-client') != -1) { }
6 8353 elsif (index($ua, 'researchscan.comsys.rwth-aachen.de') != -1) { }
1099 18 0 index($ua, 'libwww-perl') != -1 ? :
1305 48 249750 if (index($ua, lc $match) != -1)
1314 21 8769 if ($browser_tests->{'applecoremedia'} or $browser_tests->{'dalvik'} or $browser_tests->{'adm'})
1320 492 8305 if ($r) { }
0 8305 elsif ($ua =~ /seek (?! mo (?: toolbar )? \s+ \d+\.\d+ )/x) { }
42 8263 elsif ($ua =~ /search (?! [\w\s]* toolbar \b | bar \b | erpro \b )/x) { }
246 8017 elsif ($self->{'user_agent'} =~ m[([\w /\.\-]+)[ \;\(\)]*\+https?\:]i) { }
1324 444 48 unless ($id)
1328 492 0 unless (exists $robot_tests->{'robot_id'})
1335 270 222 unless defined $robot_fragment
1361 7975 203373 if ($ROBOT_FRAGMENT_EXCEPTIONS{$fragment})
1363 0 7975 unless $ROBOT_FRAGMENT_EXCEPTIONS{$fragment}
1364 7 7968 if (index($ua, $exception) != -1)
1370 311 211030 if (index($ua, $fragment) != -1)
1378 599 8198 if (exists $robot_tests->{'robot'} and $robot_tests->{'robot'} eq "unknown")
1383 1091 7706 if (defined $robot_fragment)
1388 1019 72 if ($self->{'user_agent'} =~ m[\s* # Beginning whitespace ([\w .:,\-\@\/]* # Words before fragment $robot_fragment # Match the fragment [\w .:,\-\@\/]*) # Words after fragment ]xi)
1397 36 276 if ($self->{'user_agent'} eq $full_string and $self->{'user_agent'} =~ m[\/.*\/] and $self->{'user_agent'} =~ m[ ([\w]* # Words before fragment $robot_fragment # Match the fragment (\/[\d\.]+)? # Version [\w]*) # Beta stuff ]xi)
1414 654 365 if ($full_string and $full_string =~ s[[/ \.v]*(\d+)(\.\d+)?([\.\w]*)$][]) { }
1424 353 666 unless (defined $self->{'robot_string'})
1430 6216 2581 if (not exists $self->{'robot_version'})
1450 0 7248 if (index($ua, "16bit") != -1)
1456 2964 4284 if (index($ua, "win") != -1)
1457 12 2952 if (index($ua, 'win16') != -1 or index($ua, 'windows 3') != -1 or index($ua, 'windows 16-bit') != -1) { }
72 2880 elsif (index($ua, 'win95') != -1 or index($ua, 'windows 95') != -1) { }
30 2850 elsif (index($ua, 'win 9x 4.90') != -1 or index($ua, 'windows me') != -1) { }
24 2826 elsif (index($ua, 'win98') != -1 or index($ua, 'windows 98') != -1) { }
12 2814 elsif (index($ua, 'windows 2000') != -1) { }
12 2802 elsif (index($ua, 'windows ce') != -1) { }
54 2748 elsif (index($ua, 'windows phone') != -1) { }
1463 6 6 if (index($ua, 'windows 3.1') != -1) { }
1505 6 48 if (index($ua, 'windows phone os 7.0') != -1) { }
12 36 elsif (index($ua, 'windows phone os 7.5') != -1) { }
12 24 elsif (index($ua, 'windows phone 8.0') != -1) { }
18 6 elsif (index($ua, 'windows phone 8.1') != -1) { }
6 0 elsif (index($ua, 'windows phone 10.0') != -1) { }
1523 3804 3444 if (index($ua, "nt") != -1)
1524 90 3714 if (index($ua, 'nt 5.0') != -1 or index($ua, 'nt5') != -1) { }
984 2730 elsif (index($ua, 'nt 5.1') != -1) { }
126 2604 elsif (index($ua, 'nt 5.2') != -1) { }
204 2400 elsif (index($ua, 'nt 6.0') != -1) { }
966 1434 elsif (index($ua, 'nt 6.1') != -1) { }
96 1338 elsif (index($ua, 'nt 6.2') != -1) { }
78 1260 elsif (index($ua, 'nt 6.3') != -1) { }
36 1224 elsif (index($ua, 'nt 10.0') != -1) { }
54 1170 elsif (index($ua, 'winnt') != -1 or index($ua, 'windows nt') != -1 or index($ua, 'nt4') != -1 or index($ua, 'nt3') != -1) { }
1579 2850 4398 if ($os) { }
462 3936 elsif (index($ua, 'macintosh') != -1 or index($ua, 'mac_') != -1) { }
420 3516 elsif ($ua =~ /\b(ipad|iphone|ipod)\b/) { }
1014 2502 elsif (index($ua, 'android') != -1) { }
498 2004 elsif (index($ua, 'inux') != -1) { }
42 1962 elsif ($tests->{'x11'} and index($ua, 'cros') != -1) { }
6 1956 elsif (index($ua, 'amiga') != -1) { }
6 1950 elsif (index($ua, 'os/2') != -1) { }
6 1944 elsif (index($ua, 'solaris') != -1) { }
0 1944 elsif (index($ua, 'samsung') == -1 and index($ua, 'sun') != -1) { }
0 1944 elsif (index($ua, 'irix') != -1) { }
0 1944 elsif (index($ua, 'hp-ux') != -1) { }
0 1944 elsif (index($ua, 'aix') != -1) { }
0 1944 elsif ($ua =~ /\bsco\b/ or index($ua, 'unix_sv') != -1) { }
0 1944 elsif (index($ua, 'unix_system_v') != -1) { }
0 1944 elsif ($ua =~ /\bncr\b/) { }
0 1944 elsif (index($ua, 'reliantunix') != -1) { }
0 1944 elsif (index($ua, 'dec') != -1 or index($ua, 'osf1') != -1 or index($ua, 'declpha') != -1 or index($ua, 'alphaserver') != -1 or index($ua, 'ultrix') != -1 or index($ua, 'alphastation') != -1) { }
0 1944 elsif (index($ua, 'sinix') != -1) { }
30 1914 elsif (index($ua, 'bsd') != -1) { }
12 1902 elsif ($tests->{'x11'}) { }
0 1902 elsif (index($ua, 'vax') != -1 or index($ua, 'openvms') != -1) { }
12 1890 elsif (index($ua, 'bb10') != -1) { }
6 1884 elsif (index($ua, 'rim tablet os') != -1) { }
6 1878 elsif (index($ua, 'playstation 3') != -1) { }
6 1872 elsif (index($ua, 'playstation portable') != -1) { }
54 1818 elsif (index($ua, 'windows') != -1) { }
18 1800 elsif (index($ua, 'win32') != -1) { }
144 1656 elsif ($self->{'user_agent'} =~ /(brew)|(\bbmp\b)/i) { }
1583 0 2850 if index($ua, "win32") != -1
1589 438 24 if (index($ua, 'mac os x') != -1) { }
1596 0 462 if (index($ua, '68k') != -1 or index($ua, '68000') != -1) { }
126 336 elsif (index($ua, 'ppc') != -1 or index($ua, 'powerpc') != -1) { }
1644 0 0 if index($ua, "i86") != -1
1645 0 0 if index($ua, "sunos 4") != -1
1646 0 0 if index($ua, "sunos 5") != -1
1652 0 0 if index($ua, "irix5") != -1
1653 0 0 if index($ua, "irix6") != -1
1659 0 0 if index($ua, "09.") != -1
1660 0 0 if index($ua, "10.") != -1
1666 0 0 if index($ua, "aix 1") != -1
1667 0 0 if index($ua, "aix 2") != -1
1668 0 0 if index($ua, "aix 3") != -1
1669 0 0 if index($ua, "aix 4") != -1
1706 30 0 if ($self->{'user_agent'} =~ /(\w*bsd\w*)/i)
1710 30 0 if index($ua, "freebsd") != -1
1749 102 42 if ($1) { }
1765 12 6 if (not $os and $browser_tests->{'firefox'} and index($ua, "fennec") == -1 and $self->mobile || $self->tablet)
1774 2556 4692 if ($os and not $os_string)
1789 541 2035 if (not defined $os) { }
20 2015 elsif ($os eq 'winphone') { }
196 1819 elsif ($os eq 'macosx') { }
185 1634 elsif ($os eq 'ios') { }
18 1616 elsif ($os eq 'chromeos') { }
478 1138 elsif ($os eq 'android') { }
6 1132 elsif ($os eq 'firefoxos') { }
70 1062 elsif ($os eq 'brew') { }
1794 20 0 if ($ua =~ /windows phone (?:os )?(\d+)(\.?\d*)([\.\d]*)/)
1799 157 39 if ($ua =~ /os x (\d+)[\._](\d+)[\._]?(\d*)/)
1800 139 18 length $3 ? :
1804 184 1 if ($ua =~ / os (\d+)[\._ ](\d+)[\._ ]?(\d*)/)
1805 117 67 length $3 ? :
1809 18 0 if ($ua =~ / cros \S* (\d+)(\.?\d*)([\.\d]*)/)
1814 466 12 if ($ua =~ /android (\d+)(\.?\d*)([\w\-\.]*)[\;\)]/)
1819 6 0 if ($ua =~ m[firefox/(\d+)(\.?\d*)([\.\d]*)])
1824 49 21 if ($ua =~ /(brew|\bbmp) (\d+)(\.?\d*)([\.\d]*)/)
1853 264 6944 if (defined $browser and $browser eq 'opera') { }
1883 5061 elsif ($ua =~ m[\b compatible; \s* [\w\-]* [/\s] ( [0-9]+ ) (?: .([0-9]+) (\S*) )? ;]x) { }
955 4106 elsif (not $browser) { }
24 4082 elsif ($browser_tests->{'edge'}) { }
940 3142 elsif ($browser_tests->{'safari'}) { }
6 3136 elsif ($browser_tests->{'fxios'}) { }
78 3058 elsif ($tests->{'meta_app'}) { }
12 3046 elsif ($browser_tests->{'instagram'}) { }
100 2946 elsif ($browser_tests->{'ie'}) { }
6 2940 elsif ($browser eq 'n3ds') { }
6 2934 elsif ($browser eq 'browsex') { }
6 2928 elsif ($ua =~ m[netscape6/(\d+)\.(\d+)([\d.]*)]) { }
12 2916 elsif ($browser eq 'brave') { }
18 2898 elsif ($browser eq 'chrome' and $ua =~ m[crios/(\d+)\.(\d+)([\d.]*)]) { }
6 2892 elsif ($browser eq 'pubsub' and $ua =~ m[apple-pubsub/(\d+)\.?(\d+)?([\d.]*)]) { }
78 2814 elsif ($browser eq 'obigo' and $self->{'user_agent'} =~ m[(obigo[\w\-]*|teleca)[\/ ]\w(\d+)(\w*)]i) { }
6 2808 elsif ($browser eq 'polaris' and $ua =~ m[polaris[ \/](\d+)\.?(\d+)?([\d\.]*)]) { }
336 2472 elsif ($browser eq 'ucbrowser' and $ua =~ m[ucbrowser[\/ ]*(\d+)\.?(\d+)?([\d\.]*)]) { }
6 2466 elsif ($browser eq 'samsung' and $ua =~ m[samsungbrowser/(\d+)\.(\d+)\s]) { }
36 2430 elsif ($browser_tests->{'yandex_browser'}) { }
1863 90 174 if ($ua =~ m[\AOpera.*\sVersion/(\d*)\.(\d*)\z]i) { }
48 126 elsif ($ua =~ m[\bOPR/(\d+)\.(\d+)]i) { }
126 0 elsif ($ua =~ m[Opera[ /](\d+).(\d+)]i) { }
1890 24 0 unless defined $major
1898 874 66 if (do { $ua =~ m[ safari/ ( \d+ (?: \.\d+ )* ) ]x }) { }
54 12 elsif ($ua =~ m[applewebkit\/([\d\.]{1,})]xi) { }
1911 874 0 if (my($safari_build, $safari_minor) = split(/\./, $1, 3))
1914 809 65 if defined $safari_minor
1918 54 0 if (my($safari_build, $safari_minor) = split(/\./, $1, 3))
1921 42 12 if $safari_minor
1934 60 18 if ($ua =~ m[ \b fbav/ ([^;]*) ]x)
1936 60 0 if ($beta)
1946 12 0 if ($self->{'user_agent'} =~ / \b Instagram [ ]+ ([0-9.]+) [ ] /x)
1948 12 0 if ($beta)
1957 18 82 if ($ua =~ /\b msie \s ( [0-9\.]+ ) (?: [a-z]+ [a-z0-9]* )? ;/x) { }
71 11 elsif ($ua =~ /\b rv: ( [0-9\.]+ ) \b/x) { }
1969 6 0 if ($ua =~ m[Nintendo 3DS;.*\sVersion/(\d*)\.(\d*)]i)
1975 6 0 if ($ua =~ /BrowseX \((\d+)\.(\d+)([\d.]*)/i)
1997 12 0 if ($ua =~ m[brave/(\d+)\.(\d+)([\d.]*)])
2041 36 0 if ($self->{'user_agent'} =~ m[ \b YaBrowser / ([0-9.]+) [ ] ]x)
2043 36 0 if ($beta)
2051 2448 4760 if (not defined $major and defined $self->{'browser_string'})
2053 2251 197 if ($version_index != -1)
2056 2239 12 if ($version_str =~ m[/(\d+)\.(\d+)([\w.]*)])
2065 1169 6039 unless (defined $major)
2066 24 1145 if ($ua =~ m[version/(\d+)\.(\d+)([\w.]*)])
2075 1145 6063 unless (defined $major)
2092 323 6885 unless (defined $major)
2094 0 323 if ($ua =~ m[[A-Za-z]+/(\d+)\;])
2101 502 6706 unless $major
2102 4697 2511 unless $minor
2103 2880 4328 if defined $beta and $beta eq ""
2107 168 7040 if ($browser_tests->{'netscape'})
2110 12 156 if $major == 2
2111 18 150 if $major == 3
2112 24 144 if $major == 4
2113 114 54 if $major >= 4
2114 6 162 if $major == 4 and $minor == 5
2115 96 72 if $major == 4 and ".$minor" >= "0.5" or $major >= 5
2118 6 162 if defined $beta and index($beta, "gold") != -1
2120 84 84 if $major == 5 or $major == 6
2122 90 78 if $major >= 5
2124 6 162 if ($browser eq "seamonkey")
2135 1708 5500 if ($browser_tests->{'ie'})
2136 23 1685 if $major == 3
2137 35 1673 if $major == 4
2138 1673 35 if $major >= 4
2139 70 1638 if $major == 5
2140 1638 70 if $major >= 5
2141 23 1685 if $major == 5 and $minor == 5
2142 1591 117 if ".$minor" >= "0.5" or $major >= 6
2143 389 1319 if $major == 6
2144 319 1389 if $major == 7
2145 605 1103 if $major == 8
2146 112 1596 if $major == 9
2147 66 1642 if $major == 10
2148 71 1637 if $major == 11
2157 41 7167 if ($browser_tests->{'aol'})
2160 6 35 if index($ua, "aol 3.0") != -1 or $version_tests->{'ie3'}
2163 0 41 if index($ua, "aol 4.0") != -1 or $version_tests->{'ie4'}
2164 0 41 if index($ua, "aol 5.0") != -1
2165 6 35 if index($ua, "aol 6.0") != -1
2166 0 41 if index($ua, "navio") != -1
2169 264 6944 if ($browser_tests->{'opera'})
2170 6 258 if index($ua, "opera 3") != -1 or index($ua, "opera/3") != -1
2172 0 264 if index($ua, "opera 4") != -1 or index($ua, "opera/4") != -1 and index($ua, "nintendo dsi") == -1
2176 0 264 if index($ua, "opera 5") != -1 or index($ua, "opera/5") != -1
2179 12 252 if index($ua, "opera 6") != -1 or index($ua, "opera/6") != -1
2182 30 234 if index($ua, "opera 7") != -1 or index($ua, "opera/7") != -1
2207 55 8274 if (index($ua, 'windows phone') != -1) { }
1020 7254 elsif (index($ua, 'android') != -1 or index($ua, 'silk-accelerated') != -1) { }
42 7212 elsif (index($ua, 'blackberry') != -1 or index($ua, 'bb10') != -1 or index($ua, 'rim tablet os') != -1) { }
18 7194 elsif (index($ua, 'ipod') != -1) { }
162 7032 elsif (index($ua, 'ipad') != -1) { }
240 6792 elsif (index($ua, 'iphone') != -1) { }
6 6786 elsif (index($ua, 'webos') != -1) { }
12 6774 elsif (index($ua, 'kindle') != -1) { }
0 6774 elsif (index($ua, 'audrey') != -1) { }
0 6774 elsif (index($ua, 'i-opener') != -1) { }
0 6774 elsif (index($ua, 'avantgo') != -1) { }
0 6774 elsif (index($ua, 'palmos') != -1) { }
6 6768 elsif (index($ua, 'playstation 3') != -1) { }
6 6762 elsif (index($ua, 'playstation portable') != -1) { }
6 6756 elsif (index($ua, 'nintendo dsi') != -1) { }
6 6750 elsif (index($ua, 'nintendo 3ds') != -1) { }
582 6168 elsif ($browser_tests->{'obigo'} or $browser_tests->{'ucbrowser'} or index($ua, 'up.browser') != -1 or index($ua, 'nokia') != -1 and index($ua, 'windows phone') == -1 or index($ua, 'alcatel') != -1 or $ua =~ /\bbrew\b/ or $ua =~ /\bbmp\b/ or index($ua, 'ericsson') != -1 or index($ua, 'sie-') == 0 or index($ua, 'wmlib') != -1 or index($ua, ' wap') != -1 or index($ua, 'wap ') != -1 or index($ua, 'wap/') != -1 or index($ua, '-wap') != -1 or index($ua, 'wap-') != -1 or index($ua, 'wap') == 0 or index($ua, 'wapper') != -1 or index($ua, 'zetor') != -1) { }
2337 7989 340 unless ($device_tests->{'tablet'})
2391 276 8053 if ($browser_tests->{'ucbrowser'} and $self->{'user_agent'} =~ m[ucweb/2.0\s*\(([^\;\)]*\;){3,4}\s*([^\;\)]*?)\s*\)]i) { }
12 8041 elsif ($ua =~ m[^(\bmot-[^ /]+)]) { }
108 7933 elsif ($browser_tests->{'obigo'} || index($ua, 'brew') != -1 and $self->{'user_agent'} =~ m[\d+x\d+ ([\d\w\- ]+?)( \S+\/\S+)*$]i) { }
18 7915 elsif ($ua =~ m[windows phone os [^\)]+ iemobile/[^;]+; ([^;]+; [^;\)]+)]g) { }
12 7903 elsif ($ua =~ m[windows phone [^\)]+ iemobile/[^;]+; arm; touch; ([^;]+; [^;\)]+)]g) { }
18 7885 elsif ($ua =~ m[windows phone 8[^\)]+ iemobile/[^;]+; ([^;]+; [^;\)]+)]g) { }
12 7873 elsif ($ua =~ /bb10; ([^;\)]+)/g) { }
6 7867 elsif ($ua =~ /blackberry ([\w.]+)/) { }
18 7849 elsif ($ua =~ m[blackberry(\d+)/]) { }
12 7837 elsif ($ua =~ /silk-accelerated/) { }
948 6889 elsif ($self->{'user_agent'} =~ /android .*\; ([^;]*) build/i) { }
114 6775 elsif ($self->{'user_agent'} =~ m[\b((alcatel|huawei|lg|nokia|samsung|sonyericsson)[\w\-]*)/]i) { }
6 6769 elsif ($self->{'user_agent'} =~ /CrKey/) { }
607 6162 elsif ($device) { }
2447 54 894 if ($model =~ /^KF/ or $model =~ /kindle fire/i) { }
84 810 elsif ($device_tests->{'tablet'}) { }
2476 2167 6162 if ($device) { }
2484 2160 6169 if ($device_string)
2493 0 1727 unless defined $self->{'user_agent'}
2499 0 1696 unless defined $self->{'user_agent'}
2506 1892 363 unless exists $self->{'robot_string'}
2513 642 292 unless exists $self->{'robot_string'}
2526 0 0 $self->robot ? :
546 0 $self->{'robot_tests'}{'robot_id'} ? :
2532 0 415 unless exists $self->{'robot_string'}
2533 415 0 if ($self->{'robot_version'}) { }
2544 106 0 if (defined $major) { }
2545 105 1 if (defined $minor) { }
2578 0 4228 unless defined $self->{'user_agent'}
2579 1278 2950 unless $self->{'os_tests'}
2586 0 4203 unless defined $self->{'user_agent'}
2587 85 4118 unless $self->{'os_tests'}
2593 2576 1439 unless exists $self->{'os_version'}
2594 1952 2063 if ($self->{'os_version'}) { }
2605 478 521 defined $major ? :
2629 0 0 unless $self->{'version_tests'}
2641 75 609 if ($self->gecko) { }
2651 212 683 unless $self->{'version_tests'}
2653 895 0 defined $self->{'major'} ? :
2658 260 899 unless $self->{'version_tests'}
2666 138 827 unless $self->{'version_tests'}
2677 884 0 defined $major ? :
2706 21 1 defined $major ? :
2734 643 4764 if ($self->safari)
2738 456 187 if ($ua =~ m[ version/ ( \d+ ) # Major version number is everything before first dot ( \. \d+ )? # Minor version number is first dot and following digits ]x)
2751 153 34 if ($ua =~ m[ safari/ ( \d+ (?: \.\d+ )* ) ]x)
2754 114 39 unless ($version)
2763 104 403 if $self->_cmp_versions($build, $maybe_build) >= 0
2768 5 109 if $ua =~ m[safari/12x]
2771 5 143 unless defined $version
2774 1 142 if $minor =~ s/(\D.*)//
2776 1 142 $beta ? :
2780 1744 3054 unless $self->{'version_tests'}
2791 5539 5316 if @a == 0 or $a[0] < $b[0]
2792 3643 1673 if @b == 0 or $b[0] < $a[0]
2804 193 1202 $self->engine_string eq 'MSIE' ? :
191 1395 !$self->engine_string ? :
2812 750 4908 if ($self->gecko)
2816 1025 3883 if ($self->trident)
2820 571 3312 if ($self->ie)
2824 37 3275 if ($self->edgelegacy)
2828 2696 579 if ($self->webkit)
2832 146 433 if ($self->presto)
2836 43 390 if ($self->netfront)
2840 16 374 if ($self->khtml)
2851 1295 280 $self->{'engine_version'} && $self->{'engine_version'} =~ /^(\d+(\.\d+)?)/ ? :
2858 1641 587 $self->{'engine_version'} && $self->{'engine_version'} =~ /^(\d+)/ ? :
2865 1554 560 $self->{'engine_version'} && $self->{'engine_version'} =~ /^\d+(\.\d+)/ ? :
2872 1123 301 $self->{'engine_version'} && $self->{'engine_version'} =~ /^\d+\.\d+([\.\d\+]*)/ ? :
2878 140 593 unless $self->{'version_tests'}
2901 0 4169 unless exists $self->{'device'}
2908 1076 761 unless exists $self->{'device_string'}
2920 252 1600 if ($self->safari)
2921 10 242 if ($self->major == 1 and $self->{'user_agent'} =~ /\s ( [a-z]{2} ) \)/msx)
2925 138 104 if ($self->{'user_agent'} =~ /\s ([a-z]{2})-([A-Za-z]{2})/msx)
2930 3 1701 if ($self->aol and $self->{'user_agent'} =~ /;([A-Z]{2})_([A-Z]{2})\)/)
2935 14 1687 if ($self->meta_app and $self->{'user_agent'} =~ m[ ;FBLC/ ([a-z]{2}) (?: [_-] ([A-Z]{2}) )? ]x)
2938 11 3 $2 ? :
2941 4 1683 if ($self->instagram and $self->{'user_agent'} =~ / (?: [(] | ;[ ] ) ([a-z]{2}) [_-] ([A-Z]{2}) [;)] /x)
2944 4 0 $2 ? :
2947 356 1327 if ($self->{'user_agent'} =~ /\b([a-z]{2})-([A-Za-z]{2})\b/msx)
2951 27 1300 if ($self->{'user_agent'} =~ /\[([a-z]{2})\]/msx)
2955 1147 153 if ($self->{'user_agent'} =~ /\(([^)]+)\)/msx)
2960 132 4676 if ($part =~ /^\s*([a-z]{2})\s*$/ and not $self->webview && $1 eq 'wv')
2978 1787 0 if $value
2981 1716 18 if $value
2984 0 1939 unless $self->{'device_tests'}
2985 368 1571 unless $self->{'os_tests'}
2986 496 1443 unless $self->{'robot_tests'}
2987 230 1709 unless $self->{'version_tests'}
2990 1144 3212 if $value
2993 3854 0 if $value
2996 760 0 if $value
2999 1953 449 if $value
3004 562 1377 if $self->device
3012 1 27 unless $self->{'robot_tests'}
3028 0 0 if $self->chrome and $self->browser_major and $self->browser_major >= 41
3034 0 0 if $self->opera and $self->browser_major and $self->browser_major == 40 || $self->browser_major >= 42