browser 3.0.3 → 5.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE.md +1 -1
  3. data/.prettierignore +1 -0
  4. data/.rubocop.yml +9 -0
  5. data/CHANGELOG.md +86 -19
  6. data/FUNDING.yml +3 -0
  7. data/README.md +101 -64
  8. data/bots.yml +300 -294
  9. data/browser.gemspec +3 -1
  10. data/lib/browser/base.rb +71 -16
  11. data/lib/browser/browser.rb +27 -26
  12. data/lib/browser/chrome.rb +12 -2
  13. data/lib/browser/device.rb +9 -2
  14. data/lib/browser/device/samsung.rb +33 -0
  15. data/lib/browser/device/unknown.rb +1 -1
  16. data/lib/browser/duck_duck_go.rb +22 -0
  17. data/lib/browser/edge.rb +2 -2
  18. data/lib/browser/google_search_app.rb +21 -0
  19. data/lib/browser/huawei_browser.rb +21 -0
  20. data/lib/browser/maxthon.rb +21 -0
  21. data/lib/browser/meta.rb +0 -1
  22. data/lib/browser/meta/base.rb +0 -1
  23. data/lib/browser/miui_browser.rb +21 -0
  24. data/lib/browser/platform.rb +5 -5
  25. data/lib/browser/platform/base.rb +3 -2
  26. data/lib/browser/platform/ios.rb +1 -1
  27. data/lib/browser/platform/mac.rb +4 -2
  28. data/lib/browser/platform/{other.rb → unknown.rb} +3 -3
  29. data/lib/browser/platform/windows.rb +1 -1
  30. data/lib/browser/safari.rb +16 -1
  31. data/lib/browser/samsung_browser.rb +21 -0
  32. data/lib/browser/sougou_browser.rb +24 -0
  33. data/lib/browser/{generic.rb → unknown.rb} +3 -3
  34. data/lib/browser/version.rb +1 -1
  35. data/samsung.yml +138 -0
  36. data/test/browser_test.rb +37 -6
  37. data/test/ua.yml +21 -1
  38. data/test/ua_bots.yml +8 -2
  39. data/test/unit/adobe_air_test.rb +1 -1
  40. data/test/unit/alipay_test.rb +6 -0
  41. data/test/unit/console_test.rb +2 -2
  42. data/test/unit/device_test.rb +29 -2
  43. data/test/unit/duck_duck_go_test.rb +37 -0
  44. data/test/unit/edge_test.rb +34 -2
  45. data/test/unit/google_search_app_test.rb +54 -0
  46. data/test/unit/huawei_browser_test.rb +25 -0
  47. data/test/unit/maxthon_test.rb +25 -0
  48. data/test/unit/meta_test.rb +9 -0
  49. data/test/unit/micro_messenger_test.rb +21 -6
  50. data/test/unit/miui_browser_test.rb +25 -0
  51. data/test/unit/opera_test.rb +1 -0
  52. data/test/unit/platform_test.rb +12 -7
  53. data/test/unit/qq_test.rb +12 -0
  54. data/test/unit/safari_test.rb +12 -7
  55. data/test/unit/samsung_browser_test.rb +23 -0
  56. data/test/unit/sougou_browser_test.rb +41 -0
  57. metadata +36 -11
  58. data/lib/browser/meta/modern.rb +0 -11
@@ -32,6 +32,8 @@ CHROME: "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/53
32
32
  CHROME_OS: "Mozilla/5.0 (X11; CrOS x86_64 3701.81.0) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.57 Safari/537.31."
33
33
  COREMEDIA: "Apple Mac OS X v10.6.4 CoreMedia v1.0.0.10F569"
34
34
  CUSTOM_APP: "Our App 0.0.1 (Linux; Android 4.0.3; HTC Ruby Build/IML74K; en_CA)"
35
+ DUCKDUCKGO_BROWSER_ANDROID: Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.96 Mobile Safari/537.36 DuckDuckGo/5"
36
+ DUCKDUCKGO_BROWSER_IOS: "Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 DuckDuckGo/7"
35
37
  ELECTRON: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Electron/1.4.12 Safari/537.36"
36
38
  FACEBOOK: Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 [FBAN/FBIOS;FBAV/135.0.0.45.90;FBBV/66877072;FBDV/iPhone9,3;FBMD/iPhone;FBSN/iOS;FBSV/10.3.3;FBSS/2;FBCR/AT&T;FBID/phone;FBLC/en_US;FBOP/5;FBRV/0]
37
39
  FACEBOOK_ANDROID: "Mozilla/5.0 (Linux; Android 9; ONEPLUS A6003 Build/PKQ1.180716.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/73.0.3683.90 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/214.0.0.43.83;]"
@@ -42,6 +44,10 @@ FIREFOX_IOS: "Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/
42
44
  FIREFOX_MODERN: "Mozilla/5.0 (X11; Ubuntu; Linux armv7l; rv:17.0) Gecko/20100101 Firefox/17.0"
43
45
  FIREFOX_OS: "Mozilla/5.0 (Mobile; rv:18.0) Gecko/18.0 Firefox/18.0"
44
46
  FIREFOX_TABLET: "Mozilla/5.0 (Android; Tablet; rv:14.0) Gecko/14.0 Firefox/14.0"
47
+ GOOGLE_SEARCH_APP_ANDROID: "Mozilla/5.0 (Linux; Android 10; SM-G960U Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.117 Mobile Safari/537.36 GSA/11.6.8.21.arm64"
48
+ GOOGLE_SEARCH_APP_IPAD: "Mozilla/5.0 (iPad; CPU OS 12_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) GSA/102.0.304944559 Mobile/15E148 Safari/605.1"
49
+ GOOGLE_SEARCH_APP_IPHONE: "Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) GSA/105.0.307913796 Mobile/17D50 Safari/604.1"
50
+ HUAWEI_BROWSER: "Mozilla/5.0 (Linux; Android 10; HMA-AL00; HMSCore 5.0.0.304; GMSCore 19.6.29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 HuaweiBrowser/10.1.2.300 Mobile Safari/537.36"
45
51
  IE10: "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; EIE10;ENUSMSN)"
46
52
  IE10_COMPAT: "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; EIE10;ENUSMSN)"
47
53
  IE10_X64_WINX64: "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)"
@@ -77,12 +83,19 @@ KINDLE_FIRE: "Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Kindle Fire Build/GIN
77
83
  KINDLE_FIRE_HD: "Mozilla/5.0 (Linux; U; en-us; KFTT Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.4 Safari/535.19 Silk-Accelerated=true"
78
84
  KINDLE_FIRE_HD_MOBILE: "Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.4 Mobile Safari/535.19 Silk-Accelerated=true"
79
85
  LUMIA800: "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; XBLWP7; ZuneWP7"
80
- MICRO_MESSENGER: "Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13E238 MicroMessenger/6.3.15 NetType/3G+ Language/zh_CN"
86
+ MAC_OS: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Safari/605.1.15"
87
+ MAC_OSX: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.9"
88
+ MAXTHON: "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36 Maxthon/5.3.8.2000"
89
+ MICRO_MESSENGER_ANDROID: "Mozilla/5.0 (Linux; Android 7.1.2; Redmi 4X Build/N2G47H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045131 Mobile Safari/537.36 MMWEBID/9286 MicroMessenger/7.0.13.1640(0x27000D37) Process/tools NetType/WIFI Language/zh_CN ABI/arm64 WeChat/arm64"
90
+ MICRO_MESSENGER_IOS: "Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.10(0x17000a21) NetType/4G Language/zh_CN"
81
91
  MIDP: MIDP-2.0
92
+ MIUI_BROWSER: "Mozilla/5.0 (Linux; U; Android 7.1.2; zh-cn; Redmi 4X Build/N2G47H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.141 Mobile Safari/537.36 XiaoMi/MiuiBrowser/12.3.3-g"
82
93
  MOBILE_CHROME: "Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3"
83
94
  MS_EDGE: "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0"
95
+ MS_EDGE_ANDROID: "Mozilla/5.0 (Linux; Android 7.1.2; Redmi 4X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.0 Mobile Safari/537.36 EdgA/44.11.2.4122"
84
96
  MS_EDGE_CHROME: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.29 Safari/537.36 Edg/79.0.309.18"
85
97
  MS_EDGE_COMPAT: "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/8.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; Microsoft Outlook 15.0.4433; ms-office; MSOffice 15)"
98
+ MS_EDGE_IOS: "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.1 EdgiOS/44.5.0.10 Mobile/15E148 Safari/604.1"
86
99
  MS_EDGE_MOBILE: "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; DEVICE INFO) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Mobile Safari/537.36 Edge/12.0"
87
100
  NEXUS7: "Mozilla/5.0 (Linux; Android 4.3; Nexus 7 Build/JWR66Y) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Safari/537.36"
88
101
  NEXUS_TABLET: "Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19"
@@ -107,6 +120,8 @@ QQ_BROWSER_ANDROID: "Mozilla/5.0 (Linux; Android 5.1.1; SM-N9108V Build/LMY47X)
107
120
  QQ_BROWSER_IOS: "Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13E238 QQ/6.3.3.432 V1_IPH_SQ_6.3.3_1_APP_A Pixel/640 Core/UIWebView NetType/WIFI Mem/47"
108
121
  QQ_BROWSER_MAC: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36 QQBrowser/4.2.4753.400"
109
122
  QQ_BROWSER_MAC_LITE: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14 QQBrowserLite/1.0.4"
123
+ SOUGOU_BROWSER: "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36 SE 2.X MetaSr 1.0"
124
+ SOUGOU_BROWSER_MOBILE: "Mozilla/5.0 (Linux; Android 7.1.2; Redmi 4X Build/N2G47H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/68.0.3440.106 Mobile Safari/537.36 AWP/2.0 SogouMSE,SogouMobileBrowser/5.28.12"
110
125
  QUICKTIME: "QuickTime/7.6.8 (qtver=7.6.8;os=Windows NT 5.1Service Pack 3)"
111
126
  SAFARI3: "Mozilla/5.0 (Windows; U; Windows NT 6.0; en) AppleWebKit/522.15.5 (KHTML, like Gecko) Version/3.0.3 Safari/522.15.5"
112
127
  SAFARI4: "Mozilla/5.0 (Windows; U; Windows NT 6.0; fr-ch) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9"
@@ -119,7 +134,12 @@ SAFARI: "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-us) AppleWebKit/53
119
134
  SAFARI_IPAD_WEBAPP_MODE: "Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405"
120
135
  SAFARI_IPHONE_WEBAPP_MODE: "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.20 (KHTML, like Gecko) Mobile/7B298g"
121
136
  SAMSUNG: "Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SAMSUNG-SGH-I497 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30"
137
+ SAMSUNG_BROWSER: "Mozilla/5.0 (Linux; Android 10; SAMSUNG SM-N960U) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/11.1 Chrome/75.0.3770.143 Mobile Safari/537.36"
122
138
  SAMSUNG_CHROME: "Mozilla/5.0 (Linux; Android 4.4.2; en-gb; SAMSUNG GT-I9195/I9195XXUCNEA Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36"
139
+ SAMSUNG_SM-G975F: "Mozilla/5.0 (Linux; Android 10; SM-G975F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.101 Mobile Safari/537.36"
140
+ SAMSUNG_SM-G960F: "Mozilla/5.0 (Linux; Android 8.0.0; SM-G960F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.127 Mobile Safari/537.36"
141
+ SAMSUNG_SM-F700F: "Mozilla/5.0 (Linux; Android 10; SAMSUNG SM-F700F) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/11.1 Chrome/75.0.3770.143 Mobile Safari/537.36"
142
+ SAMSUNG_SM-FAKE: "Mozilla/5.0 (Linux; Android 8.0.0; SM-0000) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.127 Mobile Safari/537.36"
123
143
  SMART_TV: "Mozilla/5.0 (SmartHub; SMART-TV; U; Linux/SmartTV) AppleWebKit/531.2+ (KHTML, like Gecko) WebBrowser/1.0 SmartTV Safari/531.2+"
124
144
  SNAPCHAT: Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Snapchat/10.69.5.72 (iPhone10,3; iOS 13.2.2; gzip)
125
145
  SNAPCHAT_EMPTY_STRING_VERSION: "Mozilla/5.0 (Linux; Android 9; SM-N960U Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.96 Mobile Safari/537.36Snapchat10.70.0.0 (SM-N960U; Android 9#N960USQS3CSJ2#28; gzip)"
@@ -4,15 +4,16 @@ ADS_TXT_CRAWLER: "AdsTxtCrawler/1.0"
4
4
  ANDERSPINK: "Mozilla/5.0 (compatible; AndersPinkBot/1.0; +http://anderspink.com/bot.html)"
5
5
  APIS_GOOGLE: "APIs-Google; (+https://developers.google.com/webmasters/APIs-Google.html)"
6
6
  APPLE_BOT: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5 (Applebot/0.1)"
7
+ ARCHIVEBOT: "ArchiveTeam ArchiveBot/20190617.01 (wpull 2.0.3) and not Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36"
7
8
  ASK: "Mozilla/2.0 (compatible; Ask Jeeves/Teoma; +http://sp.ask.com/docs/about/tech_crawling.html)"
8
9
  AWS_ELB: ELB-HealthChecker/1.0
9
- ARCHIVEBOT: "ArchiveTeam ArchiveBot/20190617.01 (wpull 2.0.3) and not Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36"
10
10
  BAIDU: "Baiduspider+(+http://www.baidu.com/search/spider.htm)"
11
11
  BARKROWLER: "Barkrowler/0.7 (+http://www.exensa.com/crawl)"
12
12
  BINGBOT: "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
13
13
  BINGPREVIEW: "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534+ (KHTML, like Gecko) BingPreview/1.0b"
14
14
  BUBING: "BUbiNG (+http://law.di.unimi.it/BUbiNG.html)"
15
15
  BUZZBOT: "Buzzbot/1.0 (Buzzbot; http://www.buzzstream.com; buzzbot@buzzstream.com)"
16
+ CHROME_LIGHTHOUSE: "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3694.0 Mobile Safari/537.36 Chrome-Lighthouse"
16
17
  CIPACRAWLER: "CipaCrawler/3.0 (info@domaincrawler.com; http://www.domaincrawler.com/www.example.com)"
17
18
  CLOUDFLARE: "Mozilla/5.0 (compatible; CloudFlare-AlwaysOnline/1.0; +http://www.cloudflare.com/always-online) AppleWebKit/534.34"
18
19
  COMMONCRAWL: "CCBot/2.0 (http://commoncrawl.org/faq/)"
@@ -30,7 +31,9 @@ FYREBOT: "Fyrebot/1.0"
30
31
  GARLIK: "GarlikCrawler/1.2 (http://garlik.com/, crawler@garlik.com)"
31
32
  GERMCRAWLER: "GermCrawler"
32
33
  GO_1.1_PACKAGE_HTTP: "Go 1.1 package http"
34
+ GO_HTTP_CLIENT: "Go-http-client"
33
35
  GOOGLE_BOT: "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
36
+ GOOGLE_IMAGE_PROXY: "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)"
34
37
  GOOGLE_PAGE_SPEED_INSIGHTS: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.4 (KHTML, like Gecko; Google Page Speed Insights) Chrome/22.0.1229 Safari/537.4"
35
38
  GOOGLE_SHOPPING: "google-xrawler"
36
39
  GOOGLE_SITE_VERIFICATION: Mozilla/5.0 (compatible; Google-Site-Verification/1.0)
@@ -43,6 +46,7 @@ IMPLISENSEBOT: "ImplisenseBot 1.0"
43
46
  JAUNT: "Jaunt/1.5"
44
47
  JOBSEEKER: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/538.1 (KHTML, like Gecko) JobBot/5.0 (compatible; +http://www.jobseeker.com.au/bot.html) Safari/538.1"
45
48
  JOOBLE: "Mozilla/5.0 (compatible; Jooblebot/2.0; Windows NT 6.1; WOW64; +http://jooble.org/jooble-bot) Mobile"
49
+ KNOWLEDGE_AI: "The Knowledge AI"
46
50
  LINKDEXBOT: "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/bots/)"
47
51
  LINKEDIN: "LinkedInBot/1.0 (compatible; Mozilla/5.0; Jakarta Commons-HttpClient/3.1 +http://www.linkedin.com)"
48
52
  LOAD_TIME_BOT: "Mozilla/5.0 (compatible; LoadTimeBot/0.9; +http://www.loadtime.net/bot.html)"
@@ -68,10 +72,12 @@ SCOUT_URL_MONITOR: ScoutURLMonitor/6.2.2
68
72
  SCRAPY: "Scrapy/0.18.4 (+http://scrapy.org)"
69
73
  SEMANTICBOT: "Mozilla/5.0 (compatible; Semanticbot/1.0; +http://sempi.tech/bot.html)"
70
74
  SEO_AUDIT: "Mozilla/5.0 (compatible; seo-audit-check-bot/1.0)"
75
+ SEOBILITYBOT: "SeobilityBot (SEO Tool; https://www.seobility.net/sites/bot.html)"
71
76
  SEODIVER: "Mozilla/5.0 (compatible; SEOdiver/1.0; +http://www.seodiver.com/bot)"
72
77
  SEOKICKS: "Mozilla/5.0 (compatible; SEOkicks-Robot; +http://www.seokicks.de/robot.html)"
73
78
  SISTRIX: "Mozilla/5.0 (compatible; SISTRIX Crawler; http://crawler.sistrix.net/)"
74
- SITECHECK: 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.0) SiteCheck-sitecrawl by Siteimprove.com'
79
+ SITECHECK: "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.0) SiteCheck-sitecrawl by Siteimprove.com"
80
+ SKYPE: "Mozilla/5.0 (Windows NT 6.1; WOW64) SkypeUriPreview Preview/0.5"
75
81
  SOCIALRANKIO: SocialRankIOBot; http://socialrank.io/about
76
82
  SQUIDER: "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36 Squider/0.01"
77
83
  STRIPE: "Stripe/1.0 (+https://stripe.com/docs/webhooks)"
@@ -9,7 +9,7 @@ class AdobeAirTest < Minitest::Test
9
9
  assert browser.webkit?
10
10
  assert_equal "0", browser.version
11
11
  assert_equal "0.0", browser.full_version
12
- assert_equal "Generic Browser", browser.name
12
+ assert_equal "Unknown Browser", browser.name
13
13
  assert_equal "Adobe AIR", browser.platform.name
14
14
  assert_equal "13.0", browser.platform.version
15
15
  end
@@ -10,6 +10,9 @@ class AlipayTest < Minitest::Test
10
10
  assert browser.alipay?
11
11
  assert_equal "Alipay", browser.name
12
12
  assert_equal "2.3.4", browser.full_version
13
+
14
+ refute browser.chrome?
15
+ refute browser.safari?
13
16
  end
14
17
 
15
18
  test "detects alipay Android" do
@@ -19,6 +22,9 @@ class AlipayTest < Minitest::Test
19
22
  assert browser.alipay?
20
23
  assert_equal "Alipay", browser.name
21
24
  assert_equal "9.0.1.073001", browser.full_version
25
+
26
+ refute browser.chrome?
27
+ refute browser.safari?
22
28
  end
23
29
 
24
30
  test "detects version by range" do
@@ -5,11 +5,11 @@ require "test_helper"
5
5
  class ConsoleTest < Minitest::Test
6
6
  test "detects psp" do
7
7
  browser = Browser.new(Browser["PSP"])
8
- assert_equal "Generic Browser", browser.name
8
+ assert_equal "Unknown Browser", browser.name
9
9
  end
10
10
 
11
11
  test "detects psp vita" do
12
12
  browser = Browser.new(Browser["PSP_VITA"])
13
- assert_equal "Generic Browser", browser.name
13
+ assert_equal "Unknown Browser", browser.name
14
14
  end
15
15
  end
@@ -20,14 +20,14 @@ class DeviceTest < Minitest::Test
20
20
 
21
21
  Browser::Device.matchers.shift
22
22
  device = Browser::Device.new("Custom")
23
- assert_equal :unknown, device.id
23
+ assert_equal :unknown_device, device.id
24
24
  end
25
25
 
26
26
  test "detect generic device" do
27
27
  device = Browser::Device.new("")
28
28
 
29
29
  assert device.unknown?
30
- assert_equal :unknown, device.id
30
+ assert_equal :unknown_device, device.id
31
31
  end
32
32
 
33
33
  test "detect ipad" do
@@ -258,4 +258,31 @@ class DeviceTest < Minitest::Test
258
258
  assert_equal name, device.name
259
259
  end
260
260
  end
261
+
262
+ test "detect samsung devices" do
263
+ device = Browser::Device.new(Browser["SAMSUNG_SM-G975F"])
264
+
265
+ assert device.samsung?
266
+ assert_equal :samsung, device.id
267
+ assert_equal "Samsung Galaxy S10+", device.name
268
+ end
269
+
270
+ test "detect generic samsung devices" do
271
+ device = Browser::Device.new(Browser["SAMSUNG_SM-FAKE"])
272
+
273
+ assert device.samsung?
274
+ assert_equal :samsung, device.id
275
+ assert_equal "Samsung SM-0000", device.name
276
+ end
277
+
278
+ {
279
+ "SAMSUNG_SM-G975F" => "Samsung Galaxy S10+",
280
+ "SAMSUNG_SM-G960F" => "Samsung Galaxy S9",
281
+ "SAMSUNG_SM-F700F" => "Samsung Galaxy Z Flip"
282
+ }.each do |key, name|
283
+ test "detect device name of #{key} as #{name}" do
284
+ device = Browser::Device.new(Browser[key])
285
+ assert_equal name, device.name
286
+ end
287
+ end
261
288
  end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class DuckDuckGoTest < Minitest::Test
6
+ test "detects DuckDuckGo on iOS device" do
7
+ browser = Browser.new(Browser["DUCKDUCKGO_BROWSER_IOS"])
8
+ assert browser.duck_duck_go?
9
+ refute browser.safari?
10
+ refute browser.chrome?
11
+ assert browser.webkit?
12
+ refute browser.bot?
13
+ assert_equal "DuckDuckGo", browser.name
14
+ assert_equal :duckduckgo, browser.id
15
+ end
16
+
17
+ test "detects DuckDuckGo on Android device" do
18
+ browser = Browser.new(Browser["DUCKDUCKGO_BROWSER_ANDROID"])
19
+ assert browser.duck_duck_go?
20
+ refute browser.safari?
21
+ refute browser.chrome?
22
+ refute browser.bot?
23
+ assert_equal "DuckDuckGo", browser.name
24
+ assert_equal :duckduckgo, browser.id
25
+ end
26
+
27
+ test "detects correct version" do
28
+ browser = Browser.new(Browser["DUCKDUCKGO_BROWSER_IOS"])
29
+ assert_equal "7", browser.full_version
30
+ assert_equal "7", browser.version
31
+ end
32
+
33
+ test "detects version by range" do
34
+ browser = Browser.new(Browser["DUCKDUCKGO_BROWSER_IOS"])
35
+ assert browser.duck_duck_go?(%w[>=7 <8])
36
+ end
37
+ end
@@ -65,8 +65,40 @@ class EdgeTest < ActionController::TestCase
65
65
  refute browser.safari?
66
66
  end
67
67
 
68
+ test "detects Microsoft Edge Mobile on iOS" do
69
+ browser = Browser.new(Browser["MS_EDGE_IOS"])
70
+
71
+ assert_equal :edge, browser.id
72
+ assert_equal "Microsoft Edge", browser.name
73
+ assert_equal "44.5.0.10", browser.full_version
74
+ assert_equal "44", browser.version
75
+ refute browser.platform.windows10?
76
+ refute browser.platform.windows_phone?
77
+ assert browser.platform.ios?
78
+ assert browser.edge?
79
+ refute browser.webkit?
80
+ refute browser.chrome?
81
+ refute browser.safari?
82
+ end
83
+
84
+ test "detects Microsoft Edge Mobile on Android" do
85
+ browser = Browser.new(Browser["MS_EDGE_ANDROID"])
86
+
87
+ assert_equal :edge, browser.id
88
+ assert_equal "Microsoft Edge", browser.name
89
+ assert_equal "44.11.2.4122", browser.full_version
90
+ assert_equal "44", browser.version
91
+ refute browser.platform.windows10?
92
+ refute browser.platform.windows_phone?
93
+ assert browser.platform.android?
94
+ assert browser.edge?
95
+ refute browser.webkit?
96
+ refute browser.chrome?
97
+ refute browser.safari?
98
+ end
99
+
68
100
  test "detects version by range" do
69
- browser = Browser.new(Browser["MS_EDGE"])
70
- assert browser.edge?(%w[>=12 <13])
101
+ browser = Browser.new(Browser["MS_EDGE_IOS"])
102
+ assert browser.edge?(%w[>=43 <45])
71
103
  end
72
104
  end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class GoogleSearchAppTest < Minitest::Test
6
+ test "detects Google Search App (Android)" do
7
+ browser = Browser.new(Browser["GOOGLE_SEARCH_APP_ANDROID"])
8
+
9
+ assert browser.webkit?
10
+ assert browser.google_search_app?
11
+ assert browser.platform.android?
12
+ assert_equal :google_search_app, browser.id
13
+ assert_equal "11", browser.version
14
+ assert_equal "11.6.8.21", browser.full_version
15
+ assert_equal "Google Search App", browser.name
16
+ refute browser.chrome?
17
+ refute browser.safari?
18
+ end
19
+
20
+ test "detects Google Search App (iPad)" do
21
+ browser = Browser.new(Browser["GOOGLE_SEARCH_APP_IPAD"])
22
+
23
+ assert browser.webkit?
24
+ assert browser.google_search_app?
25
+ assert browser.device.ipad?
26
+ assert browser.platform.ios?
27
+ assert_equal :google_search_app, browser.id
28
+ assert_equal "102", browser.version
29
+ assert_equal "102.0.304944559", browser.full_version
30
+ assert_equal "Google Search App", browser.name
31
+ refute browser.chrome?
32
+ refute browser.safari?
33
+ end
34
+
35
+ test "detects Google Search App (iPhone)" do
36
+ browser = Browser.new(Browser["GOOGLE_SEARCH_APP_IPHONE"])
37
+
38
+ assert browser.webkit?
39
+ assert browser.google_search_app?
40
+ assert browser.device.iphone?
41
+ assert browser.platform.ios?
42
+ assert_equal :google_search_app, browser.id
43
+ assert_equal "105", browser.version
44
+ assert_equal "105.0.307913796", browser.full_version
45
+ assert_equal "Google Search App", browser.name
46
+ refute browser.chrome?
47
+ refute browser.safari?
48
+ end
49
+
50
+ test "detects version by range (iPad)" do
51
+ browser = Browser.new(Browser["GOOGLE_SEARCH_APP_IPAD"])
52
+ assert browser.google_search_app?(%w[>=102 <103])
53
+ end
54
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class HuaweiBrowserTest < Minitest::Test
6
+ test "detects Huawei Browser" do
7
+ browser = Browser.new(Browser["HUAWEI_BROWSER"])
8
+ assert browser.huawei_browser?
9
+ refute browser.safari?
10
+ refute browser.chrome?
11
+ assert_equal "Huawei Browser", browser.name
12
+ assert_equal :huawei_browser, browser.id
13
+ end
14
+
15
+ test "detects correct version" do
16
+ browser = Browser.new(Browser["HUAWEI_BROWSER"])
17
+ assert_equal "10.1.2.300", browser.full_version
18
+ assert_equal "10", browser.version
19
+ end
20
+
21
+ test "detects version by range" do
22
+ browser = Browser.new(Browser["HUAWEI_BROWSER"])
23
+ assert browser.huawei_browser?(%w[>=10 <11])
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class MaxthonTest < Minitest::Test
6
+ test "detects Maxthon" do
7
+ browser = Browser.new(Browser["MAXTHON"])
8
+ assert browser.maxthon?
9
+ refute browser.safari?
10
+ refute browser.chrome?
11
+ assert_equal "Maxthon", browser.name
12
+ assert_equal :maxthon, browser.id
13
+ end
14
+
15
+ test "detects correct version" do
16
+ browser = Browser.new(Browser["MAXTHON"])
17
+ assert_equal "5.3.8.2000", browser.full_version
18
+ assert_equal "5", browser.version
19
+ end
20
+
21
+ test "detects version by range" do
22
+ browser = Browser.new(Browser["MAXTHON"])
23
+ assert browser.maxthon?(%w[>=5 <6])
24
+ end
25
+ end
@@ -45,4 +45,13 @@ class MetaTest < Minitest::Test
45
45
  assert meta.include?("blackberry")
46
46
  assert meta.include?("mobile")
47
47
  end
48
+
49
+ test "returns string representation for unknown platform/device/browser" do
50
+ browser = Browser.new("Unknown")
51
+ meta = browser.to_s
52
+
53
+ assert meta.include?("unknown_platform")
54
+ assert meta.include?("unknown_device")
55
+ assert meta.include?("unknown_browser")
56
+ end
48
57
  end
@@ -3,18 +3,33 @@
3
3
  require "test_helper"
4
4
 
5
5
  class MicroMessengerTest < Minitest::Test
6
- test "detects micro messenger 6.3.15" do
7
- browser = Browser.new(Browser["MICRO_MESSENGER"])
6
+ test "detects micro messenger 7.0.10 on iOS" do
7
+ browser = Browser.new(Browser["MICRO_MESSENGER_IOS"])
8
8
 
9
9
  assert browser.micro_messenger?
10
10
  assert browser.wechat?
11
- assert_equal "6.3.15", browser.full_version
11
+ assert_equal "7.0.10", browser.full_version
12
12
  assert_equal "MicroMessenger", browser.name
13
13
  assert_equal :micro_messenger, browser.id
14
14
  end
15
15
 
16
- test "detects version by range" do
17
- browser = Browser.new(Browser["MICRO_MESSENGER"])
18
- assert browser.wechat?(%w[>=6 <7])
16
+ test "detects version by range on iOS" do
17
+ browser = Browser.new(Browser["MICRO_MESSENGER_IOS"])
18
+ assert browser.wechat?(%w[>=7 <8])
19
+ end
20
+
21
+ test "detects micro messenger 7.0.13.1640 on Android" do
22
+ browser = Browser.new(Browser["MICRO_MESSENGER_ANDROID"])
23
+
24
+ assert browser.micro_messenger?
25
+ assert browser.wechat?
26
+ assert_equal "7.0.13.1640", browser.full_version
27
+ assert_equal "MicroMessenger", browser.name
28
+ assert_equal :micro_messenger, browser.id
29
+ end
30
+
31
+ test "detects version by range on Android" do
32
+ browser = Browser.new(Browser["MICRO_MESSENGER_ANDROID"])
33
+ assert browser.wechat?(%w[>=7 <8])
19
34
  end
20
35
  end