browser 4.2.0 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +32 -1
- data/FUNDING.yml +3 -0
- data/README.md +97 -47
- data/bots.yml +1 -1
- data/lib/browser/base.rb +61 -6
- data/lib/browser/browser.rb +22 -2
- data/lib/browser/chrome.rb +7 -1
- data/lib/browser/device.rb +9 -2
- data/lib/browser/device/samsung.rb +33 -0
- data/lib/browser/device/unknown.rb +1 -1
- data/lib/browser/google_search_app.rb +21 -0
- data/lib/browser/huawei_browser.rb +21 -0
- data/lib/browser/maxthon.rb +21 -0
- data/lib/browser/miui_browser.rb +21 -0
- data/lib/browser/platform.rb +4 -4
- data/lib/browser/platform/ios.rb +1 -1
- data/lib/browser/platform/mac.rb +1 -1
- data/lib/browser/platform/{other.rb → unknown.rb} +3 -3
- data/lib/browser/platform/windows.rb +1 -1
- data/lib/browser/safari.rb +9 -1
- data/lib/browser/sougou_browser.rb +24 -0
- data/lib/browser/{generic.rb → unknown.rb} +3 -3
- data/lib/browser/version.rb +1 -1
- data/samsung.yml +138 -0
- data/test/browser_test.rb +37 -6
- data/test/ua.yml +16 -4
- data/test/unit/adobe_air_test.rb +1 -1
- data/test/unit/alipay_test.rb +6 -0
- data/test/unit/console_test.rb +2 -2
- data/test/unit/device_test.rb +29 -2
- data/test/unit/duck_duck_go_test.rb +2 -0
- data/test/unit/google_search_app_test.rb +54 -0
- data/test/unit/huawei_browser_test.rb +25 -0
- data/test/unit/maxthon_test.rb +25 -0
- data/test/unit/meta_test.rb +9 -0
- data/test/unit/miui_browser_test.rb +25 -0
- data/test/unit/opera_test.rb +1 -0
- data/test/unit/platform_test.rb +6 -6
- data/test/unit/qq_test.rb +12 -0
- data/test/unit/safari_test.rb +12 -7
- data/test/unit/sougou_browser_test.rb +41 -0
- metadata +26 -8
data/test/browser_test.rb
CHANGED
@@ -106,14 +106,13 @@ class BrowserTest < Minitest::Test
|
|
106
106
|
refute browser.chrome?(">=65")
|
107
107
|
end
|
108
108
|
|
109
|
-
test "detects unknown
|
109
|
+
test "detects unknown browser" do
|
110
110
|
browser = Browser.new("Unknown")
|
111
|
-
assert_equal :generic, browser.id
|
112
|
-
end
|
113
111
|
|
114
|
-
|
115
|
-
browser
|
116
|
-
assert_equal
|
112
|
+
assert browser.unknown?
|
113
|
+
refute browser.known?
|
114
|
+
assert_equal :unknown_browser, browser.id
|
115
|
+
assert_equal "Unknown Browser", browser.name
|
117
116
|
end
|
118
117
|
|
119
118
|
test "returns empty language set for missing accept language" do
|
@@ -155,4 +154,36 @@ class BrowserTest < Minitest::Test
|
|
155
154
|
browser = Browser.new("Fancy new browser")
|
156
155
|
refute browser.known?
|
157
156
|
end
|
157
|
+
|
158
|
+
test "rejects user agent larger than 2048 bytes" do
|
159
|
+
message = "user_agent cannot be larger than 2048 bytes; actual size is " \
|
160
|
+
"2049 bytes"
|
161
|
+
|
162
|
+
error =
|
163
|
+
begin
|
164
|
+
Browser.new("a" * 2049)
|
165
|
+
nil
|
166
|
+
rescue Browser::Error => error
|
167
|
+
error
|
168
|
+
end
|
169
|
+
|
170
|
+
refute_nil error
|
171
|
+
assert_equal message, error.message
|
172
|
+
end
|
173
|
+
|
174
|
+
test "rejects accept language larger than 2048 bytes" do
|
175
|
+
message = "accept_language cannot be larger than 2048 bytes; actual size " \
|
176
|
+
"is 2049 bytes"
|
177
|
+
|
178
|
+
error =
|
179
|
+
begin
|
180
|
+
Browser.new("Chrome", accept_language: "a" * 2049).accept_language
|
181
|
+
nil
|
182
|
+
rescue Browser::Error => error
|
183
|
+
error
|
184
|
+
end
|
185
|
+
|
186
|
+
refute_nil error
|
187
|
+
assert_equal message, error.message
|
188
|
+
end
|
158
189
|
end
|
data/test/ua.yml
CHANGED
@@ -32,8 +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_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"
|
36
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"
|
37
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"
|
38
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]
|
39
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;]"
|
@@ -44,6 +44,10 @@ FIREFOX_IOS: "Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/
|
|
44
44
|
FIREFOX_MODERN: "Mozilla/5.0 (X11; Ubuntu; Linux armv7l; rv:17.0) Gecko/20100101 Firefox/17.0"
|
45
45
|
FIREFOX_OS: "Mozilla/5.0 (Mobile; rv:18.0) Gecko/18.0 Firefox/18.0"
|
46
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"
|
47
51
|
IE10: "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; EIE10;ENUSMSN)"
|
48
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)"
|
49
53
|
IE10_X64_WINX64: "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)"
|
@@ -81,16 +85,18 @@ KINDLE_FIRE_HD_MOBILE: "Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build/
|
|
81
85
|
LUMIA800: "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; XBLWP7; ZuneWP7"
|
82
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"
|
83
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"
|
84
|
-
|
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"
|
85
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"
|
86
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"
|
87
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"
|
88
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"
|
89
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"
|
90
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)"
|
91
|
-
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"
|
92
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"
|
93
|
-
|
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"
|
94
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"
|
95
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"
|
96
102
|
NINTENDO_SWITCH: "Mozilla/5.0 (Nintendo Switch; WifiWebAuthApplet) AppleWebKit/601.6 (KHTML, like Gecko) NF/4.0.0.7.9 NintendoBrowser/5.1.0.15785"
|
@@ -114,6 +120,8 @@ QQ_BROWSER_ANDROID: "Mozilla/5.0 (Linux; Android 5.1.1; SM-N9108V Build/LMY47X)
|
|
114
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"
|
115
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"
|
116
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"
|
117
125
|
QUICKTIME: "QuickTime/7.6.8 (qtver=7.6.8;os=Windows NT 5.1Service Pack 3)"
|
118
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"
|
119
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"
|
@@ -128,6 +136,10 @@ SAFARI_IPHONE_WEBAPP_MODE: "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_2 like Mac O
|
|
128
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"
|
129
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"
|
130
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"
|
131
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+"
|
132
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)
|
133
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)"
|
data/test/unit/adobe_air_test.rb
CHANGED
@@ -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 "
|
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
|
data/test/unit/alipay_test.rb
CHANGED
@@ -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
|
data/test/unit/console_test.rb
CHANGED
@@ -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 "
|
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 "
|
13
|
+
assert_equal "Unknown Browser", browser.name
|
14
14
|
end
|
15
15
|
end
|
data/test/unit/device_test.rb
CHANGED
@@ -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 :
|
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 :
|
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
|
@@ -9,6 +9,7 @@ class DuckDuckGoTest < Minitest::Test
|
|
9
9
|
refute browser.safari?
|
10
10
|
refute browser.chrome?
|
11
11
|
assert browser.webkit?
|
12
|
+
refute browser.bot?
|
12
13
|
assert_equal "DuckDuckGo", browser.name
|
13
14
|
assert_equal :duckduckgo, browser.id
|
14
15
|
end
|
@@ -18,6 +19,7 @@ class DuckDuckGoTest < Minitest::Test
|
|
18
19
|
assert browser.duck_duck_go?
|
19
20
|
refute browser.safari?
|
20
21
|
refute browser.chrome?
|
22
|
+
refute browser.bot?
|
21
23
|
assert_equal "DuckDuckGo", browser.name
|
22
24
|
assert_equal :duckduckgo, browser.id
|
23
25
|
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
|
data/test/unit/meta_test.rb
CHANGED
@@ -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
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
class MiuiBrowserTest < Minitest::Test
|
6
|
+
test "detects Miui Browser" do
|
7
|
+
browser = Browser.new(Browser["MIUI_BROWSER"])
|
8
|
+
assert browser.miui_browser?
|
9
|
+
refute browser.safari?
|
10
|
+
refute browser.chrome?
|
11
|
+
assert_equal "Miui Browser", browser.name
|
12
|
+
assert_equal :miui_browser, browser.id
|
13
|
+
end
|
14
|
+
|
15
|
+
test "detects correct version" do
|
16
|
+
browser = Browser.new(Browser["MIUI_BROWSER"])
|
17
|
+
assert_equal "12.3.3", browser.full_version
|
18
|
+
assert_equal "12", browser.version
|
19
|
+
end
|
20
|
+
|
21
|
+
test "detects version by range" do
|
22
|
+
browser = Browser.new(Browser["MIUI_BROWSER"])
|
23
|
+
assert browser.miui_browser?(%w[>=12 <13])
|
24
|
+
end
|
25
|
+
end
|
data/test/unit/opera_test.rb
CHANGED
data/test/unit/platform_test.rb
CHANGED
@@ -20,7 +20,7 @@ class PlatformTest < Minitest::Test
|
|
20
20
|
|
21
21
|
Browser::Platform.matchers.shift
|
22
22
|
platform = Browser::Platform.new("Custom")
|
23
|
-
assert_equal :
|
23
|
+
assert_equal :unknown_platform, platform.id
|
24
24
|
end
|
25
25
|
|
26
26
|
test "implements to_s" do
|
@@ -35,13 +35,13 @@ class PlatformTest < Minitest::Test
|
|
35
35
|
refute platform == :android
|
36
36
|
end
|
37
37
|
|
38
|
-
test "detect
|
39
|
-
platform = Browser::Platform.new("
|
38
|
+
test "detect unknown platforms" do
|
39
|
+
platform = Browser::Platform.new("Unknown")
|
40
40
|
|
41
|
-
assert_equal "
|
42
|
-
assert_equal :
|
41
|
+
assert_equal "Unknown", platform.name
|
42
|
+
assert_equal :unknown_platform, platform.id
|
43
43
|
assert_equal "0", platform.version
|
44
|
-
assert platform.
|
44
|
+
assert platform.unknown?
|
45
45
|
end
|
46
46
|
|
47
47
|
test "detect ios (iPhone)" do
|
data/test/unit/qq_test.rb
CHANGED
@@ -9,6 +9,9 @@ class QQTest < Minitest::Test
|
|
9
9
|
assert_equal "6.3.3.432", browser.full_version
|
10
10
|
assert_equal "QQ Browser", browser.name
|
11
11
|
assert_equal :qq, browser.id
|
12
|
+
|
13
|
+
refute browser.chrome?
|
14
|
+
refute browser.safari?
|
12
15
|
end
|
13
16
|
|
14
17
|
test "detects QQ browser for Android" do
|
@@ -17,6 +20,9 @@ class QQTest < Minitest::Test
|
|
17
20
|
assert_equal "6.2", browser.full_version
|
18
21
|
assert_equal "QQ Browser", browser.name
|
19
22
|
assert_equal :qq, browser.id
|
23
|
+
|
24
|
+
refute browser.chrome?
|
25
|
+
refute browser.safari?
|
20
26
|
end
|
21
27
|
|
22
28
|
test "detects QQ browser for Mac" do
|
@@ -25,6 +31,9 @@ class QQTest < Minitest::Test
|
|
25
31
|
assert_equal "4.2.4753.400", browser.full_version
|
26
32
|
assert_equal "QQ Browser", browser.name
|
27
33
|
assert_equal :qq, browser.id
|
34
|
+
|
35
|
+
refute browser.chrome?
|
36
|
+
refute browser.safari?
|
28
37
|
end
|
29
38
|
|
30
39
|
test "detects QQ browser lite for Mac" do
|
@@ -33,5 +42,8 @@ class QQTest < Minitest::Test
|
|
33
42
|
assert_equal "1.0.4", browser.full_version
|
34
43
|
assert_equal "QQ Browser", browser.name
|
35
44
|
assert_equal :qq, browser.id
|
45
|
+
|
46
|
+
refute browser.chrome?
|
47
|
+
refute browser.safari?
|
36
48
|
end
|
37
49
|
end
|