ronin-web-user_agents 0.1.0.beta1 → 0.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/.github/workflows/ruby.yml +1 -0
- data/.yardopts +1 -1
- data/ChangeLog.md +3 -0
- data/README.md +3 -2
- data/gemspec.yml +3 -3
- data/lib/ronin/web/user_agents/chrome.rb +1 -1
- data/lib/ronin/web/user_agents/data_dir.rb +1 -1
- data/lib/ronin/web/user_agents/firefox.rb +1 -1
- data/lib/ronin/web/user_agents/google_bot.rb +1 -1
- data/lib/ronin/web/user_agents/os/android.rb +1 -1
- data/lib/ronin/web/user_agents/os/linux.rb +1 -1
- data/lib/ronin/web/user_agents/os/mac_os.rb +1 -1
- data/lib/ronin/web/user_agents/os/windows.rb +1 -1
- data/lib/ronin/web/user_agents/version.rb +2 -2
- data/lib/ronin/web/user_agents.rb +1 -1
- data/ronin-web-user_agents.gemspec +2 -1
- metadata +6 -23
- data/spec/chrome_spec.rb +0 -511
- data/spec/firefox_spec.rb +0 -414
- data/spec/google_bot_spec.rb +0 -231
- data/spec/os/android_spec.rb +0 -55
- data/spec/os/linux_spec.rb +0 -48
- data/spec/os/mac_os_spec.rb +0 -73
- data/spec/os/windows_spec.rb +0 -52
- data/spec/spec_helper.rb +0 -4
- data/spec/user_agents_spec.rb +0 -49
data/spec/chrome_spec.rb
DELETED
@@ -1,511 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'ronin/web/user_agents/chrome'
|
3
|
-
|
4
|
-
describe Ronin::Web::UserAgents::Chrome do
|
5
|
-
describe ".build" do
|
6
|
-
let(:chrome_version) { '100.0.4758.80' }
|
7
|
-
|
8
|
-
context "when given `os: :windows`" do
|
9
|
-
let(:os) { :windows }
|
10
|
-
|
11
|
-
context "but os_version: is not given" do
|
12
|
-
it do
|
13
|
-
expect {
|
14
|
-
subject.build(chrome_version: chrome_version, os: os)
|
15
|
-
}.to raise_error(ArgumentError,"os: #{os.inspect} also requires an os_version: value")
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
Ronin::Web::UserAgents::OS::Windows::VERSIONS.each do |version_id,version_string|
|
20
|
-
context "when given `os_version: #{version_id.inspect}`" do
|
21
|
-
let(:os_version) { version_id }
|
22
|
-
let(:windows_version) { version_string }
|
23
|
-
|
24
|
-
it "must include 'Windows NT #{version_string}' in the extensions" do
|
25
|
-
expect(
|
26
|
-
subject.build(
|
27
|
-
chrome_version: chrome_version,
|
28
|
-
os: os,
|
29
|
-
os_version: os_version
|
30
|
-
)
|
31
|
-
).to eq("Mozilla/5.0 (Windows NT #{windows_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
|
32
|
-
end
|
33
|
-
|
34
|
-
Ronin::Web::UserAgents::OS::Windows::ARCHES.each do |arch_id,arch_string|
|
35
|
-
|
36
|
-
context "and when `arch: #{arch_id.inspect}` is given" do
|
37
|
-
let(:arch) { arch_id }
|
38
|
-
let(:windows_arch) { arch_string }
|
39
|
-
|
40
|
-
if arch_id
|
41
|
-
it "must appned '#{arch_string}' after the Windows version" do
|
42
|
-
expect(
|
43
|
-
subject.build(
|
44
|
-
chrome_version: chrome_version,
|
45
|
-
os: os,
|
46
|
-
os_version: os_version,
|
47
|
-
arch: arch
|
48
|
-
)
|
49
|
-
).to eq("Mozilla/5.0 (Windows NT #{windows_version}; #{windows_arch}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
|
50
|
-
end
|
51
|
-
|
52
|
-
context "and when given the `chrome_version:` keyword argument" do
|
53
|
-
let(:chrome_version) { '1.2.3' }
|
54
|
-
|
55
|
-
it "must use the specified `chrome_version:` value" do
|
56
|
-
expect(
|
57
|
-
subject.build(
|
58
|
-
chrome_version: chrome_version,
|
59
|
-
os: os,
|
60
|
-
os_version: os_version,
|
61
|
-
arch: arch
|
62
|
-
)
|
63
|
-
).to eq("Mozilla/5.0 (Windows NT #{windows_version}; #{windows_arch}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
|
64
|
-
end
|
65
|
-
end
|
66
|
-
else # `arch: nil` edge-case
|
67
|
-
it "must not appned any additional fields" do
|
68
|
-
expect(
|
69
|
-
subject.build(
|
70
|
-
chrome_version: chrome_version,
|
71
|
-
os: os,
|
72
|
-
os_version: os_version,
|
73
|
-
arch: arch
|
74
|
-
)
|
75
|
-
).to eq("Mozilla/5.0 (Windows NT #{windows_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
|
76
|
-
end
|
77
|
-
|
78
|
-
context "and when given the `chrome_version:` keyword argument" do
|
79
|
-
let(:chrome_version) { '1.2.3' }
|
80
|
-
|
81
|
-
it "must use the specified `chrome_version:` value" do
|
82
|
-
expect(
|
83
|
-
subject.build(
|
84
|
-
chrome_version: chrome_version,
|
85
|
-
os: os,
|
86
|
-
os_version: os_version,
|
87
|
-
arch: arch
|
88
|
-
)
|
89
|
-
).to eq("Mozilla/5.0 (Windows NT #{windows_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
context "and when given the `chrome_version:` keyword argument" do
|
97
|
-
let(:chrome_version) { '1.2.3' }
|
98
|
-
|
99
|
-
it "must use the specified `chrome_version:` value" do
|
100
|
-
expect(
|
101
|
-
subject.build(
|
102
|
-
chrome_version: chrome_version,
|
103
|
-
os: os,
|
104
|
-
os_version: os_version
|
105
|
-
)
|
106
|
-
).to eq("Mozilla/5.0 (Windows NT #{windows_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
context "when given `os: :macos`" do
|
114
|
-
let(:os) { :macos }
|
115
|
-
|
116
|
-
Ronin::Web::UserAgents::OS::MacOS::VERSIONS_UNDERSCORED.each do |version,underscored_version|
|
117
|
-
context "and when given `os_version: '#{version}'`" do
|
118
|
-
let(:os_version) { version }
|
119
|
-
|
120
|
-
it "must include 'Macintosh; Intel Mac OS X #{underscored_version}' in the extensions" do
|
121
|
-
expect(
|
122
|
-
subject.build(
|
123
|
-
chrome_version: chrome_version,
|
124
|
-
os: os,
|
125
|
-
os_version: os_version
|
126
|
-
)
|
127
|
-
).to eq("Mozilla/5.0 (Macintosh; Intel Mac OS X #{underscored_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
|
128
|
-
end
|
129
|
-
|
130
|
-
context "when given `chrome_version: ...`" do
|
131
|
-
let(:chrome_version) { '1.2.3' }
|
132
|
-
|
133
|
-
it "must use the specified `chrome_version:` value" do
|
134
|
-
expect(
|
135
|
-
subject.build(
|
136
|
-
chrome_version: chrome_version,
|
137
|
-
os: os,
|
138
|
-
os_version: os_version
|
139
|
-
)
|
140
|
-
).to eq("Mozilla/5.0 (Macintosh; Intel Mac OS X #{underscored_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
|
141
|
-
end
|
142
|
-
end
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
context "and when given an unknown `os_version:` value" do
|
147
|
-
let(:os_version) { '12.0.0' }
|
148
|
-
let(:underscored_version) { os_version.tr('.','_') }
|
149
|
-
|
150
|
-
it "must include 'Macintosh; Intel Mac OS X X_Y_Z' in the extensions" do
|
151
|
-
expect(
|
152
|
-
subject.build(
|
153
|
-
chrome_version: chrome_version,
|
154
|
-
os: os,
|
155
|
-
os_version: os_version
|
156
|
-
)
|
157
|
-
).to eq("Mozilla/5.0 (Macintosh; Intel Mac OS X #{underscored_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
|
158
|
-
end
|
159
|
-
|
160
|
-
context "and when given the `chrome_version:` keyword argument" do
|
161
|
-
let(:chrome_version) { '1.2.3' }
|
162
|
-
|
163
|
-
it "must use the specified `chrome_version:` value" do
|
164
|
-
expect(
|
165
|
-
subject.build(
|
166
|
-
chrome_version: chrome_version,
|
167
|
-
os: os,
|
168
|
-
os_version: os_version
|
169
|
-
)
|
170
|
-
).to eq("Mozilla/5.0 (Macintosh; Intel Mac OS X #{underscored_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
|
171
|
-
end
|
172
|
-
end
|
173
|
-
end
|
174
|
-
|
175
|
-
context "but `os_version:` is not given" do
|
176
|
-
it do
|
177
|
-
expect {
|
178
|
-
subject.build(chrome_version: chrome_version, os: os)
|
179
|
-
}.to raise_error(ArgumentError,"os: #{os.inspect} also requires an os_version: value")
|
180
|
-
end
|
181
|
-
end
|
182
|
-
end
|
183
|
-
|
184
|
-
context "when given `os: :linux`" do
|
185
|
-
let(:os) { :linux }
|
186
|
-
|
187
|
-
context "but `arch:` is not given" do
|
188
|
-
it do
|
189
|
-
expect {
|
190
|
-
subject.build(chrome_version: chrome_version, os: os)
|
191
|
-
}.to raise_error(ArgumentError,"os: #{os.inspect} also requires an arch: value")
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
Ronin::Web::UserAgents::OS::Linux::ARCHES.each do |arch_id,arch_string|
|
196
|
-
context "when given `arch: #{arch_id.inspect}`" do
|
197
|
-
let(:arch) { arch_id }
|
198
|
-
let(:linux_arch) { arch_string }
|
199
|
-
|
200
|
-
it "must add 'Linux #{arch_string}' to the extensions" do
|
201
|
-
expect(
|
202
|
-
subject.build(
|
203
|
-
chrome_version: chrome_version,
|
204
|
-
os: os,
|
205
|
-
arch: arch
|
206
|
-
)
|
207
|
-
).to eq("Mozilla/5.0 (X11; Linux #{linux_arch}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
|
208
|
-
end
|
209
|
-
|
210
|
-
Ronin::Web::UserAgents::OS::Linux::DISTROS.each do |distro_id,distro_string|
|
211
|
-
context "and when given `linux_distro: #{distro_id.inspect}" do
|
212
|
-
if distro_id
|
213
|
-
let(:linux_distro) { distro_string }
|
214
|
-
|
215
|
-
it "must add the '; #{distro_string}' to the extensions" do
|
216
|
-
expect(
|
217
|
-
subject.build(
|
218
|
-
chrome_version: chrome_version,
|
219
|
-
os: os,
|
220
|
-
linux_distro: linux_distro,
|
221
|
-
arch: arch
|
222
|
-
)
|
223
|
-
).to eq("Mozilla/5.0 (X11; #{linux_distro}; Linux #{linux_arch}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
|
224
|
-
end
|
225
|
-
else # `linux_distro: nil` edge-case
|
226
|
-
it "must omit the Linux Distro from the extensions" do
|
227
|
-
expect(
|
228
|
-
subject.build(
|
229
|
-
chrome_version: chrome_version,
|
230
|
-
os: os,
|
231
|
-
arch: arch
|
232
|
-
)
|
233
|
-
).to eq("Mozilla/5.0 (X11; Linux #{linux_arch}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
|
234
|
-
end
|
235
|
-
end
|
236
|
-
end
|
237
|
-
end
|
238
|
-
|
239
|
-
context "and when given the `chrome_version:` keyword argument" do
|
240
|
-
let(:chrome_version) { '1.2.3' }
|
241
|
-
|
242
|
-
it "must use the specified `chrome_version:` value" do
|
243
|
-
expect(
|
244
|
-
subject.build(
|
245
|
-
chrome_version: chrome_version,
|
246
|
-
os: os,
|
247
|
-
arch: arch
|
248
|
-
)
|
249
|
-
).to eq("Mozilla/5.0 (X11; Linux #{linux_arch}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Safari/537.36")
|
250
|
-
end
|
251
|
-
end
|
252
|
-
end
|
253
|
-
end
|
254
|
-
end
|
255
|
-
|
256
|
-
context "when given `os: :android`" do
|
257
|
-
let(:os) { :android }
|
258
|
-
|
259
|
-
context "but os_version: is not given" do
|
260
|
-
it do
|
261
|
-
expect {
|
262
|
-
subject.build(chrome_version: chrome_version, os: os)
|
263
|
-
}.to raise_error(ArgumentError,"os: #{os.inspect} also requires an os_version: value")
|
264
|
-
end
|
265
|
-
end
|
266
|
-
|
267
|
-
context "when given an `os_version:` keyword argument" do
|
268
|
-
let(:os_version) { '4.0.4' }
|
269
|
-
let(:android_version) { os_version }
|
270
|
-
|
271
|
-
it "must add 'Linux; Android ...' to the extensions" do
|
272
|
-
expect(
|
273
|
-
subject.build(
|
274
|
-
chrome_version: chrome_version,
|
275
|
-
os: os,
|
276
|
-
os_version: os_version
|
277
|
-
)
|
278
|
-
).to eq("Mozilla/5.0 (Linux; Android #{android_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Mobile Safari/537.36")
|
279
|
-
end
|
280
|
-
|
281
|
-
Ronin::Web::UserAgents::OS::Android::ARCHES.each do |arch_id,arch_string|
|
282
|
-
context "and when given `arch: #{arch_id.inspect}`" do
|
283
|
-
let(:arch) { arch_id }
|
284
|
-
let(:android_arch) { arch_string }
|
285
|
-
|
286
|
-
if arch_id
|
287
|
-
it "must add 'Linux; #{arch_string}' to the extensions" do
|
288
|
-
expect(
|
289
|
-
subject.build(
|
290
|
-
chrome_version: chrome_version,
|
291
|
-
os: os,
|
292
|
-
os_version: os_version,
|
293
|
-
arch: arch
|
294
|
-
)
|
295
|
-
).to eq("Mozilla/5.0 (Linux; #{android_arch}; Android #{android_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Mobile Safari/537.36")
|
296
|
-
end
|
297
|
-
|
298
|
-
context "and when given `chrome_version: ...`" do
|
299
|
-
let(:chrome_version) { '1.2.3' }
|
300
|
-
|
301
|
-
it "must use the specified `chrome_version:` value" do
|
302
|
-
expect(
|
303
|
-
subject.build(
|
304
|
-
chrome_version: chrome_version,
|
305
|
-
os: os,
|
306
|
-
os_version: os_version,
|
307
|
-
arch: arch
|
308
|
-
)
|
309
|
-
).to eq("Mozilla/5.0 (Linux; #{android_arch}; Android #{android_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Mobile Safari/537.36")
|
310
|
-
end
|
311
|
-
end
|
312
|
-
else # `arch: nil` edge-case
|
313
|
-
it "must omit th Android architecture from the extensions" do
|
314
|
-
expect(
|
315
|
-
subject.build(
|
316
|
-
chrome_version: chrome_version,
|
317
|
-
os: os,
|
318
|
-
os_version: os_version,
|
319
|
-
arch: arch
|
320
|
-
)
|
321
|
-
).to eq("Mozilla/5.0 (Linux; Android #{android_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Mobile Safari/537.36")
|
322
|
-
end
|
323
|
-
|
324
|
-
context "and when given the `chrome_version:` keyword argument" do
|
325
|
-
let(:chrome_version) { '1.2.3' }
|
326
|
-
|
327
|
-
it "must use the specified `chrome_version:` value" do
|
328
|
-
expect(
|
329
|
-
subject.build(
|
330
|
-
chrome_version: chrome_version,
|
331
|
-
os: os,
|
332
|
-
os_version: os_version,
|
333
|
-
arch: arch
|
334
|
-
)
|
335
|
-
).to eq("Mozilla/5.0 (Linux; Android #{android_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Mobile Safari/537.36")
|
336
|
-
end
|
337
|
-
end
|
338
|
-
end
|
339
|
-
end
|
340
|
-
end
|
341
|
-
|
342
|
-
context "when the `android_device:` keyword argument is given" do
|
343
|
-
let(:android_device) { 'SM-A307FN' }
|
344
|
-
|
345
|
-
it "must include the Android device in the extensions" do
|
346
|
-
expect(
|
347
|
-
subject.build(
|
348
|
-
chrome_version: chrome_version,
|
349
|
-
os: os,
|
350
|
-
os_version: os_version,
|
351
|
-
android_device: android_device
|
352
|
-
)
|
353
|
-
).to eq("Mozilla/5.0 (Linux; Android #{android_version}; #{android_device}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/#{chrome_version} Mobile Safari/537.36")
|
354
|
-
end
|
355
|
-
end
|
356
|
-
end
|
357
|
-
end
|
358
|
-
|
359
|
-
context "when given `os: :other`" do
|
360
|
-
let(:os) { :other }
|
361
|
-
|
362
|
-
it do
|
363
|
-
expect {
|
364
|
-
subject.build(chrome_version: chrome_version, os: os)
|
365
|
-
}.to raise_error(ArgumentError,"unsupported os: value (#{os.inspect})")
|
366
|
-
end
|
367
|
-
end
|
368
|
-
end
|
369
|
-
|
370
|
-
describe ".random" do
|
371
|
-
it "must return a random Chrome User-Agent string" do
|
372
|
-
expect(subject.random).to match(
|
373
|
-
%r{^Mozilla/5\.0 \([^\)]+\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
|
374
|
-
)
|
375
|
-
end
|
376
|
-
|
377
|
-
it "must generate a new random Chrome User-Agent string each time" do
|
378
|
-
expect(subject.random).to_not eq(subject.random)
|
379
|
-
end
|
380
|
-
|
381
|
-
context "when `os: :windows`" do
|
382
|
-
let(:os) { :windows }
|
383
|
-
|
384
|
-
it "must return a random Windows Chrome User-Agent string" do
|
385
|
-
expect(subject.random(os: os)).to match(
|
386
|
-
%r{^Mozilla/5\.0 \(Windows NT \d+(?:\.\d+)*(?:; (?:WOW64|Win64; x64))?\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
|
387
|
-
)
|
388
|
-
end
|
389
|
-
|
390
|
-
context "and when given `os_version:`" do
|
391
|
-
let(:os_version) { 10 }
|
392
|
-
|
393
|
-
it "must return a random Windows Chrome User-Agent string for that version of Windows" do
|
394
|
-
expect(subject.random(os: os, os_version: os_version)).to match(
|
395
|
-
%r{^Mozilla/5\.0 \(Windows NT 10\.0(?:; (?:WOW64|Win64; x64))?\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
|
396
|
-
)
|
397
|
-
end
|
398
|
-
end
|
399
|
-
|
400
|
-
context "and when given `arch: :wow64`" do
|
401
|
-
let(:arch) { :wow64 }
|
402
|
-
|
403
|
-
it "must return a random Windows Chrome User-Agent string for the WOW64 architecture" do
|
404
|
-
expect(subject.random(os: os, arch: arch)).to match(
|
405
|
-
%r{^Mozilla/5\.0 \(Windows NT \d+(?:\.\d+)*; WOW64\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
|
406
|
-
)
|
407
|
-
end
|
408
|
-
end
|
409
|
-
|
410
|
-
context "and when given `arch: :win64`" do
|
411
|
-
let(:arch) { :win64 }
|
412
|
-
|
413
|
-
it "must return a random Windows Chrome User-Agent string for the WOW64 architecture" do
|
414
|
-
expect(subject.random(os: os, arch: arch)).to match(
|
415
|
-
%r{^Mozilla/5\.0 \(Windows NT \d+(?:\.\d+)*; Win64; x64\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
|
416
|
-
)
|
417
|
-
end
|
418
|
-
end
|
419
|
-
end
|
420
|
-
|
421
|
-
context "when `os: :macos` is given" do
|
422
|
-
let(:os) { :macos }
|
423
|
-
|
424
|
-
it "must return a macOS Chrome User-Agent string" do
|
425
|
-
expect(subject.random(os: os)).to match(
|
426
|
-
%r{^Mozilla/5\.0 \(Macintosh; Intel Mac OS X \d+(_\d+){1,2}\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
|
427
|
-
)
|
428
|
-
end
|
429
|
-
|
430
|
-
context "and when `os_version:` is given" do
|
431
|
-
let(:os_version) { '10.11.12' }
|
432
|
-
|
433
|
-
it "must return a macOS Chrome User-Agent string for that macOS version" do
|
434
|
-
expect(subject.random(os: os, os_version: os_version)).to match(
|
435
|
-
%r{^Mozilla/5\.0 \(Macintosh; Intel Mac OS X 10_11_12\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
|
436
|
-
)
|
437
|
-
end
|
438
|
-
end
|
439
|
-
end
|
440
|
-
|
441
|
-
context "when `os: :linux` is given" do
|
442
|
-
let(:os) { :linux }
|
443
|
-
|
444
|
-
it "must return a Linux Chrome User-Agent string" do
|
445
|
-
expect(subject.random(os: os)).to match(
|
446
|
-
%r{^Mozilla/5\.0 \(X11(?:; (?:Ubuntu|Fedora|Arch))?; Linux (?:x86_64|aarch64|i686)\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
|
447
|
-
)
|
448
|
-
end
|
449
|
-
|
450
|
-
context "and when `linux_distro:` is given" do
|
451
|
-
let(:linux_distro) { :ubuntu }
|
452
|
-
|
453
|
-
it "must return a Linux Chrome User-Agent string for that Linux Distro" do
|
454
|
-
expect(subject.random(os: os, linux_distro: linux_distro)).to match(
|
455
|
-
%r{^Mozilla/5\.0 \(X11; Ubuntu; Linux (?:x86_64|aarch64|i686)\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
|
456
|
-
)
|
457
|
-
end
|
458
|
-
end
|
459
|
-
|
460
|
-
context "and when `arch:` is given" do
|
461
|
-
let(:arch) { :arm64 }
|
462
|
-
|
463
|
-
it "must return a Linux Chrome User-Agent string for that architecture" do
|
464
|
-
expect(subject.random(os: os, arch: arch)).to match(
|
465
|
-
%r{^Mozilla/5\.0 \(X11(?:; (?:Ubuntu|Fedora|Arch))?; Linux aarch64\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
|
466
|
-
)
|
467
|
-
end
|
468
|
-
end
|
469
|
-
end
|
470
|
-
|
471
|
-
context "when `os: :android` is given" do
|
472
|
-
let(:os) { :android }
|
473
|
-
|
474
|
-
it "must return a Android Chrome User-Agent string" do
|
475
|
-
expect(subject.random(os: os)).to match(
|
476
|
-
%r{^Mozilla/5\.0 \(Linux(?:; (?:arm|arm_64))?; Android \d+(?:\.\d+)*(?:; [^\(\)]+(?:\([^\)]+\)[^\(\)]+)?)?\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
|
477
|
-
)
|
478
|
-
end
|
479
|
-
|
480
|
-
context "and when `os_version:` is given" do
|
481
|
-
let(:os_version) { '8.1' }
|
482
|
-
|
483
|
-
it "must return a Android Chrome User-Agent string for that Android version" do
|
484
|
-
expect(subject.random(os: os, os_version: os_version)).to match(
|
485
|
-
%r{^Mozilla/5\.0 \(Linux(?:; (?:arm|arm_64))?; Android 8\.1(?:; [^\(\)]+(?:\([^\)]+\)[^\(\)]+)?)?\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
|
486
|
-
)
|
487
|
-
end
|
488
|
-
end
|
489
|
-
|
490
|
-
context "and when `arch:` is given" do
|
491
|
-
let(:arch) { :arm64 }
|
492
|
-
|
493
|
-
it "must return a Linux Chrome User-Agent string for that architecture" do
|
494
|
-
expect(subject.random(os: os, arch: arch)).to match(
|
495
|
-
%r{^Mozilla/5\.0 \(Linux; arm_64; Android (?:\d+(?:\.\d+)*)(?:; [^\(\)]+(?:\([^\)]+\)[^\(\)]+)?)?\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
|
496
|
-
)
|
497
|
-
end
|
498
|
-
end
|
499
|
-
|
500
|
-
context "and when `android_device:` is given" do
|
501
|
-
let(:android_device) { 'SM-A307FN' }
|
502
|
-
|
503
|
-
it "must return a Linux Chrome User-Agent string with that Android device" do
|
504
|
-
expect(subject.random(os: os, android_device: android_device)).to match(
|
505
|
-
%r{^Mozilla/5\.0 \(Linux(?:; (?:arm|arm_64))?; Android (?:\d+(?:\.\d+)*); #{android_device}\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/\d+(\.\d+)* (?:Mobile )?Safari/537\.36$}
|
506
|
-
)
|
507
|
-
end
|
508
|
-
end
|
509
|
-
end
|
510
|
-
end
|
511
|
-
end
|