iGEL-ua_parser 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,85 @@
1
+ module UaParser
2
+ # This class stores the version number for comparison and printing out the
3
+ # major version
4
+ class Version
5
+ include Comparable
6
+
7
+ attr_reader :name
8
+
9
+ class DifferentAgentsNotComparable < RuntimeError
10
+ end
11
+
12
+ # Initializes a new Version object with the given version number (you should
13
+ # pass it as a String). Optional you may pass a user agent name as a Symbol,
14
+ # which allows #major to print out the version number in the common way.
15
+ def initialize(version, name = nil)
16
+ version = version.to_s if version.is_a?(Integer) || version.is_a?(Float)
17
+ raise TypeError, "version must be a String, Integer or Float, but was a #{version.class}" unless version.is_a?(String)
18
+ @tokens = version.split(/(\.|_|[a-z]+)/)
19
+ @tokens.delete_if { |t| t == "." || t == "_" }
20
+ insert_zeros_before = []
21
+ @tokens.each_index do |i|
22
+ if @tokens[i] =~ /\A[0-9]+\Z/
23
+ while @tokens[i] =~ /\A0[0-9]/ # Remember zeros, but chop them of for now
24
+ insert_zeros_before << i
25
+ @tokens[i] = @tokens[i][1..-1]
26
+ end
27
+ @tokens[i] = @tokens[i].to_i
28
+ end
29
+ end
30
+ insert_zeros_before.each do |i| # Insert zeros again
31
+ @tokens.insert(i, 0)
32
+ end
33
+ @version = version
34
+ @name = name
35
+ end
36
+
37
+ # Returns -1, if the given version is smaller than the current one, 0 if
38
+ # they are equal and 1 if the current version is bigger. Used by Comparable
39
+ # to provide funktions like <, >= or between?
40
+ def <=>(other)
41
+ raise TypeError unless other.is_a?(Version)
42
+ raise DifferentAgentsNotComparable, "Cannot compare #{@name} and #{other.name}" unless @name == other.name
43
+ i_sort(other)
44
+ end
45
+
46
+ # Returns the whole version number, as given by the by the user agent.
47
+ def full
48
+ @version
49
+ end
50
+
51
+ # Returns the major version, e.g. "3.0", "2.0b" or "1.5" for Firefox,
52
+ # "9.6" for Opera or "7.0" or "5.5" for Internet Explorer
53
+ def major
54
+ if @name == :opera || (@name == :netscape && self >= Version.new(5, :netscape))
55
+ return "#{@tokens[0]}.#{@tokens[1].to_s[0...1]}"
56
+ elsif [:internet_explorer, :navigator].include?(@name) && @tokens[1] == 0
57
+ return "#{@tokens[0]}"
58
+ elsif @tokens.size == 1
59
+ return "#{@tokens[0]}"
60
+ elsif @tokens[2].is_a?(String)
61
+ return "#{@tokens[0]}.#{@tokens[1]}#{@tokens[2]}"
62
+ else
63
+ return "#{@tokens[0]}.#{@tokens[1]}"
64
+ end
65
+ end
66
+
67
+ protected
68
+ # Required by i_sort
69
+ def tokens
70
+ @tokens
71
+ end
72
+
73
+ private
74
+ # Used to recursively compare the version numbers
75
+ def i_sort(other, deep = 0)
76
+ return 0 if @tokens[deep].nil? && other.tokens[deep].nil?
77
+ my_token = @tokens[deep] || 0
78
+ other_token = other.tokens[deep] || 0
79
+ return 1 if my_token.is_a?(Integer) && other_token.is_a?(String)
80
+ return -1 if my_token.is_a?(String) && other_token.is_a?(Integer)
81
+ return i_sort(other, deep + 1) if my_token == other_token
82
+ return my_token <=> other_token
83
+ end
84
+ end
85
+ end
data/lib/ua_parser.rb ADDED
@@ -0,0 +1,2 @@
1
+ require "ua_parser/user_agent"
2
+ require "ua_parser/version"
@@ -0,0 +1,620 @@
1
+ $:.unshift File.join(File.dirname(__FILE__),'..','lib')
2
+
3
+ require 'test/unit'
4
+ require 'ua_parser'
5
+
6
+ class CrawlerTest < Test::Unit::TestCase
7
+ include UaParser
8
+
9
+ def test_baiduspider
10
+ ua = UserAgent.new "Baiduspider+(+http://www.baidu.com/search/spider.htm)"
11
+ assert ua.known?
12
+ assert ua.bot?
13
+ assert !ua.browser?
14
+ assert !ua.feed_reader?
15
+ assert !ua.other?
16
+ assert_equal nil, ua.render_engine
17
+ assert_equal nil, ua.render_engine_version
18
+ assert_equal :baiduspider, ua.name
19
+ assert_equal nil, ua.version
20
+ assert_equal [], ua.emails
21
+ assert_equal nil, ua.email
22
+ assert_equal ["http://www.baidu.com/search/spider.htm"], ua.urls
23
+ assert_equal "http://www.baidu.com/search/spider.htm", ua.url
24
+ [:architecture, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
25
+ assert_raise NotImplementedError do
26
+ ua.method(method).call
27
+ end
28
+ end
29
+ end
30
+
31
+ def test_cuil_twiceler_0_9
32
+ ua = UserAgent.new "Mozilla/5.0 (Twiceler-0.9 http://www.cuil.com/twiceler/robot.html)"
33
+ assert ua.known?
34
+ assert ua.bot?
35
+ assert !ua.browser?
36
+ assert !ua.feed_reader?
37
+ assert !ua.other?
38
+ assert_equal nil, ua.render_engine
39
+ assert_equal nil, ua.render_engine_version
40
+ assert_equal :"twiceler", ua.name
41
+ assert_equal "0.9", ua.version.full
42
+ assert_equal "0.9", ua.version.major
43
+ assert_equal [], ua.emails
44
+ assert_equal nil, ua.email
45
+ assert_equal ["http://www.cuil.com/twiceler/robot.html"], ua.urls
46
+ assert_equal "http://www.cuil.com/twiceler/robot.html", ua.url
47
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
48
+ assert_raise NotImplementedError do
49
+ ua.method(method).call
50
+ end
51
+ end
52
+ end
53
+
54
+ def test_cuil_0_9_twiceler_wrong_domain
55
+ ua = UserAgent.new "Mozilla/5.0 (Twiceler-0.9 http://www.cuill.com/twiceler/robot.html)"
56
+ assert ua.known?
57
+ assert ua.bot?
58
+ assert !ua.browser?
59
+ assert !ua.feed_reader?
60
+ assert !ua.other?
61
+ assert_equal nil, ua.render_engine
62
+ assert_equal nil, ua.render_engine_version
63
+ assert_equal :"twiceler", ua.name
64
+ assert_equal "0.9", ua.version.major
65
+ assert_equal "0.9", ua.version.full
66
+ assert_equal [], ua.emails
67
+ assert_equal nil, ua.email
68
+ assert_equal ["http://www.cuill.com/twiceler/robot.html"], ua.urls
69
+ assert_equal "http://www.cuill.com/twiceler/robot.html", ua.url
70
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
71
+ assert_raise NotImplementedError do
72
+ ua.method(method).call
73
+ end
74
+ end
75
+ end
76
+
77
+ def test_gigabot_3_0
78
+ ua = UserAgent.new "Gigabot/3.0 (http://www.gigablast.com/spider.html)"
79
+ assert ua.known?
80
+ assert ua.bot?
81
+ assert !ua.browser?
82
+ assert !ua.feed_reader?
83
+ assert !ua.other?
84
+ assert_equal nil, ua.render_engine
85
+ assert_equal nil, ua.render_engine_version
86
+ assert_equal :gigabot, ua.name
87
+ assert_equal "3.0", ua.version.full
88
+ assert_equal "3.0", ua.version.major
89
+ assert_equal [], ua.emails
90
+ assert_equal nil, ua.email
91
+ assert_equal ["http://www.gigablast.com/spider.html"], ua.urls
92
+ assert_equal "http://www.gigablast.com/spider.html", ua.url
93
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
94
+ assert_raise NotImplementedError do
95
+ ua.method(method).call
96
+ end
97
+ end
98
+ end
99
+
100
+ def test_gonzo_1
101
+ ua = UserAgent.new "gonzo1[P] +http://www.suchen.de/faq.html"
102
+ assert ua.known?
103
+ assert ua.bot?
104
+ assert !ua.browser?
105
+ assert !ua.feed_reader?
106
+ assert !ua.other?
107
+ assert_equal nil, ua.render_engine
108
+ assert_equal nil, ua.render_engine_version
109
+ assert_equal :gonzo, ua.name
110
+ assert_equal "1", ua.version.full
111
+ assert_equal "1", ua.version.major
112
+ assert_equal [], ua.emails
113
+ assert_equal nil, ua.email
114
+ assert_equal ["http://www.suchen.de/faq.html"], ua.urls
115
+ assert_equal "http://www.suchen.de/faq.html", ua.url
116
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
117
+ assert_raise NotImplementedError do
118
+ ua.method(method).call
119
+ end
120
+ end
121
+ end
122
+
123
+ def test_gonzo_2
124
+ ua = UserAgent.new "gonzo2[P] +http://www.suchen.de/faq.html"
125
+ assert ua.known?
126
+ assert ua.bot?
127
+ assert !ua.browser?
128
+ assert !ua.feed_reader?
129
+ assert !ua.other?
130
+ assert_equal nil, ua.render_engine
131
+ assert_equal nil, ua.render_engine_version
132
+ assert_equal :gonzo, ua.name
133
+ assert_equal "2", ua.version.full
134
+ assert_equal "2", ua.version.major
135
+ assert_equal [], ua.emails
136
+ assert_equal nil, ua.email
137
+ assert_equal ["http://www.suchen.de/faq.html"], ua.urls
138
+ assert_equal "http://www.suchen.de/faq.html", ua.url
139
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
140
+ assert_raise NotImplementedError do
141
+ ua.method(method).call
142
+ end
143
+ end
144
+ end
145
+
146
+ def test_googlebot_2_1
147
+ ua = UserAgent.new "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
148
+ assert ua.known?
149
+ assert ua.bot?
150
+ assert !ua.browser?
151
+ assert !ua.feed_reader?
152
+ assert !ua.other?
153
+ assert_equal nil, ua.render_engine
154
+ assert_equal nil, ua.render_engine_version
155
+ assert_equal :googlebot, ua.name
156
+ assert_equal "2.1", ua.version.full
157
+ assert_equal "2.1", ua.version.major
158
+ assert_equal [], ua.emails
159
+ assert_equal nil, ua.email
160
+ assert_equal ["http://www.google.com/bot.html"], ua.urls
161
+ assert_equal "http://www.google.com/bot.html", ua.url
162
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
163
+ assert_raise NotImplementedError do
164
+ ua.method(method).call
165
+ end
166
+ end
167
+ end
168
+
169
+ def test_googlebot_image_1_0
170
+ ua = UserAgent.new "Googlebot-Image/1.0"
171
+ assert ua.known?
172
+ assert ua.bot?
173
+ assert !ua.browser?
174
+ assert !ua.feed_reader?
175
+ assert !ua.other?
176
+ assert_equal nil, ua.render_engine
177
+ assert_equal nil, ua.render_engine_version
178
+ assert_equal :"googlebot-image", ua.name
179
+ assert_equal "1.0", ua.version.full
180
+ assert_equal "1.0", ua.version.major
181
+ assert_equal [], ua.emails
182
+ assert_equal nil, ua.email
183
+ assert_equal [], ua.urls
184
+ assert_equal nil, ua.url
185
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
186
+ assert_raise NotImplementedError do
187
+ ua.method(method).call
188
+ end
189
+ end
190
+ end
191
+
192
+ def test_mediapartners_google
193
+ ua = UserAgent.new "Mediapartners-Google"
194
+ assert ua.known?
195
+ assert ua.bot?
196
+ assert !ua.browser?
197
+ assert !ua.feed_reader?
198
+ assert !ua.other?
199
+ assert_equal nil, ua.render_engine
200
+ assert_equal nil, ua.render_engine_version
201
+ assert_equal :"mediapartners-google", ua.name
202
+ assert_equal nil, ua.version
203
+ assert_equal [], ua.emails
204
+ assert_equal nil, ua.email
205
+ assert_equal [], ua.urls
206
+ assert_equal nil, ua.url
207
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
208
+ assert_raise NotImplementedError do
209
+ ua.method(method).call
210
+ end
211
+ end
212
+ end
213
+
214
+ def test_mediapartners_google_21
215
+ ua = UserAgent.new "Mediapartners-Google/2.1"
216
+ assert ua.known?
217
+ assert ua.bot?
218
+ assert !ua.browser?
219
+ assert !ua.feed_reader?
220
+ assert !ua.other?
221
+ assert_equal nil, ua.render_engine
222
+ assert_equal nil, ua.render_engine_version
223
+ assert_equal :"mediapartners-google", ua.name
224
+ assert_equal "2.1", ua.version.full
225
+ assert_equal "2.1", ua.version.major
226
+ assert_equal [], ua.emails
227
+ assert_equal nil, ua.email
228
+ assert_equal [], ua.urls
229
+ assert_equal nil, ua.url
230
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
231
+ assert_raise NotImplementedError do
232
+ ua.method(method).call
233
+ end
234
+ end
235
+ end
236
+
237
+ def test_mj12bot_1_2_3
238
+ ua = UserAgent.new "Mozilla/5.0 (compatible; MJ12bot/v1.2.3; http://www.majestic12.co.uk/bot.php?+)"
239
+ assert ua.known?
240
+ assert ua.bot?
241
+ assert !ua.browser?
242
+ assert !ua.feed_reader?
243
+ assert !ua.other?
244
+ assert_equal nil, ua.render_engine
245
+ assert_equal nil, ua.render_engine_version
246
+ assert_equal :mj12bot, ua.name
247
+ assert_equal "1.2.3", ua.version.full
248
+ assert_equal "1.2", ua.version.major
249
+ assert_equal [], ua.emails
250
+ assert_equal nil, ua.email
251
+ assert_equal ["http://www.majestic12.co.uk/bot.php?+"], ua.urls
252
+ assert_equal "http://www.majestic12.co.uk/bot.php?+", ua.url
253
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
254
+ assert_raise NotImplementedError do
255
+ ua.method(method).call
256
+ end
257
+ end
258
+ end
259
+
260
+ def test_msnbot_10
261
+ ua = UserAgent.new "msnbot/1.0 (+http://search.msn.com/msnbot.htm)"
262
+ assert ua.known?
263
+ assert ua.bot?
264
+ assert !ua.browser?
265
+ assert !ua.feed_reader?
266
+ assert !ua.other?
267
+ assert_equal nil, ua.render_engine
268
+ assert_equal nil, ua.render_engine_version
269
+ assert_equal :msnbot, ua.name
270
+ assert_equal "1.0", ua.version.full
271
+ assert_equal "1.0", ua.version.major
272
+ assert_equal [], ua.emails
273
+ assert_equal nil, ua.email
274
+ assert_equal ["http://search.msn.com/msnbot.htm"], ua.urls
275
+ assert_equal "http://search.msn.com/msnbot.htm", ua.url
276
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
277
+ assert_raise NotImplementedError do
278
+ ua.method(method).call
279
+ end
280
+ end
281
+ end
282
+
283
+ def test_msnbot_11
284
+ ua = UserAgent.new "msnbot/1.1 (+http://search.msn.com/msnbot.htm)"
285
+ assert ua.known?
286
+ assert ua.bot?
287
+ assert !ua.browser?
288
+ assert !ua.feed_reader?
289
+ assert !ua.other?
290
+ assert_equal nil, ua.render_engine
291
+ assert_equal nil, ua.render_engine_version
292
+ assert_equal :msnbot, ua.name
293
+ assert_equal "1.1", ua.version.full
294
+ assert_equal "1.1", ua.version.major
295
+ assert_equal [], ua.emails
296
+ assert_equal nil, ua.email
297
+ assert_equal ["http://search.msn.com/msnbot.htm"], ua.urls
298
+ assert_equal "http://search.msn.com/msnbot.htm", ua.url
299
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
300
+ assert_raise NotImplementedError do
301
+ ua.method(method).call
302
+ end
303
+ end
304
+ end
305
+
306
+ def test_msnbot_media_10
307
+ ua = UserAgent.new "msnbot-media/1.0 (+http://search.msn.com/msnbot.htm)"
308
+ assert ua.known?
309
+ assert ua.bot?
310
+ assert !ua.browser?
311
+ assert !ua.feed_reader?
312
+ assert !ua.other?
313
+ assert_equal nil, ua.render_engine
314
+ assert_equal nil, ua.render_engine_version
315
+ assert_equal :"msnbot-media", ua.name
316
+ assert_equal "1.0", ua.version.full
317
+ assert_equal "1.0", ua.version.major
318
+ assert_equal [], ua.emails
319
+ assert_equal nil, ua.email
320
+ assert_equal ["http://search.msn.com/msnbot.htm"], ua.urls
321
+ assert_equal "http://search.msn.com/msnbot.htm", ua.url
322
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
323
+ assert_raise NotImplementedError do
324
+ ua.method(method).call
325
+ end
326
+ end
327
+ end
328
+
329
+ def test_msnbot_media_11
330
+ ua = UserAgent.new "msnbot-media/1.1 (+http://search.msn.com/msnbot.htm)"
331
+ assert ua.known?
332
+ assert ua.bot?
333
+ assert !ua.browser?
334
+ assert !ua.feed_reader?
335
+ assert !ua.other?
336
+ assert_equal nil, ua.render_engine
337
+ assert_equal nil, ua.render_engine_version
338
+ assert_equal :"msnbot-media", ua.name
339
+ assert_equal "1.1", ua.version.major
340
+ assert_equal "1.1", ua.version.full
341
+ assert_equal [], ua.emails
342
+ assert_equal nil, ua.email
343
+ assert_equal ["http://search.msn.com/msnbot.htm"], ua.urls
344
+ assert_equal "http://search.msn.com/msnbot.htm", ua.url
345
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
346
+ assert_raise NotImplementedError do
347
+ ua.method(method).call
348
+ end
349
+ end
350
+ end
351
+
352
+ def test_seekbot_1_0
353
+ ua = UserAgent.new "Seekbot/1.0 (http://www.seekbot.net/bot.html) HTTPFetcher/2.2"
354
+ assert ua.known?
355
+ assert ua.bot?
356
+ assert !ua.browser?
357
+ assert !ua.feed_reader?
358
+ assert !ua.other?
359
+ assert_equal nil, ua.render_engine
360
+ assert_equal nil, ua.render_engine_version
361
+ assert_equal :seekbot, ua.name
362
+ assert_equal "1.0", ua.version.major
363
+ assert_equal "1.0", ua.version.full
364
+ assert_equal [], ua.emails
365
+ assert_equal nil, ua.email
366
+ assert_equal ["http://www.seekbot.net/bot.html"], ua.urls
367
+ assert_equal "http://www.seekbot.net/bot.html", ua.url
368
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
369
+ assert_raise NotImplementedError do
370
+ ua.method(method).call
371
+ end
372
+ end
373
+ end
374
+
375
+ def test_speedy_spider
376
+ ua = UserAgent.new "Speedy Spider (http://www.entireweb.com/about/search_tech/speedy_spider/)"
377
+ assert ua.known?
378
+ assert ua.bot?
379
+ assert !ua.browser?
380
+ assert !ua.feed_reader?
381
+ assert !ua.other?
382
+ assert_equal nil, ua.render_engine
383
+ assert_equal nil, ua.render_engine_version
384
+ assert_equal :"speedy spider", ua.name
385
+ assert_equal nil, ua.version
386
+ assert_equal [], ua.emails
387
+ assert_equal nil, ua.email
388
+ assert_equal ["http://www.entireweb.com/about/search_tech/speedy_spider/"], ua.urls
389
+ assert_equal "http://www.entireweb.com/about/search_tech/speedy_spider/", ua.url
390
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
391
+ assert_raise NotImplementedError do
392
+ ua.method(method).call
393
+ end
394
+ end
395
+ end
396
+
397
+ def test_unknown_bot
398
+ ua = UserAgent.new "iGELbot"
399
+ assert !ua.known?
400
+ assert ua.bot?
401
+ assert !ua.browser?
402
+ assert !ua.feed_reader?
403
+ assert !ua.other?
404
+ assert_equal nil, ua.render_engine
405
+ assert_equal nil, ua.render_engine_version
406
+ assert_equal :unknown_bot, ua.name
407
+ assert_equal nil, ua.version
408
+ assert_equal [], ua.emails
409
+ assert_equal nil, ua.email
410
+ assert_equal [], ua.urls
411
+ assert_equal nil, ua.url
412
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
413
+ assert_raise NotImplementedError do
414
+ ua.method(method).call
415
+ end
416
+ end
417
+ end
418
+
419
+ def test_unknown_bot_with_emails
420
+ ua = UserAgent.new "iGELbot (a_sf-32@sub-dom3.x.de; +info@x.de"
421
+ assert !ua.known?
422
+ assert ua.bot?
423
+ assert !ua.browser?
424
+ assert !ua.feed_reader?
425
+ assert !ua.other?
426
+ assert_equal nil, ua.render_engine
427
+ assert_equal nil, ua.render_engine_version
428
+ assert_equal :unknown_bot, ua.name
429
+ assert_equal nil, ua.version
430
+ assert_equal ["a_sf-32@sub-dom3.x.de", "info@x.de"], ua.emails
431
+ assert_equal "a_sf-32@sub-dom3.x.de", ua.email
432
+ assert_equal [], ua.urls
433
+ assert_equal nil, ua.url
434
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
435
+ assert_raise NotImplementedError do
436
+ ua.method(method).call
437
+ end
438
+ end
439
+ end
440
+
441
+ def test_unknown_bot_with_urls
442
+ ua = UserAgent.new "iGELbot (+http://xa2.a-z.43x.com:93/afzde.php?if=asdf&rm=3;x=hello+r%C3%BCdiger; www.heise.de)"
443
+ assert !ua.known?
444
+ assert ua.bot?
445
+ assert !ua.browser?
446
+ assert !ua.feed_reader?
447
+ assert !ua.other?
448
+ assert_equal nil, ua.render_engine
449
+ assert_equal nil, ua.render_engine_version
450
+ assert_equal :unknown_bot, ua.name
451
+ assert_equal nil, ua.version
452
+ assert_equal [], ua.emails
453
+ assert_equal nil, ua.email
454
+ assert_equal ["http://xa2.a-z.43x.com:93/afzde.php?if=asdf&rm=3;x=hello+r%c3%bcdiger", "www.heise.de"], ua.urls
455
+ assert_equal "http://xa2.a-z.43x.com:93/afzde.php?if=asdf&rm=3;x=hello+r%c3%bcdiger", ua.url
456
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
457
+ assert_raise NotImplementedError do
458
+ ua.method(method).call
459
+ end
460
+ end
461
+ end
462
+
463
+ def test_unknown_crawler
464
+ ua = UserAgent.new "iGELcrawler"
465
+ assert !ua.known?
466
+ assert ua.bot?
467
+ assert !ua.browser?
468
+ assert !ua.feed_reader?
469
+ assert !ua.other?
470
+ assert_equal nil, ua.render_engine
471
+ assert_equal nil, ua.render_engine_version
472
+ assert_equal :unknown_bot, ua.name
473
+ assert_equal nil, ua.version
474
+ assert_equal [], ua.emails
475
+ assert_equal nil, ua.email
476
+ assert_equal [], ua.urls
477
+ assert_equal nil, ua.url
478
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
479
+ assert_raise NotImplementedError do
480
+ ua.method(method).call
481
+ end
482
+ end
483
+ end
484
+
485
+ def test_unknown_spider
486
+ ua = UserAgent.new "iGELspider"
487
+ assert !ua.known?
488
+ assert ua.bot?
489
+ assert !ua.browser?
490
+ assert !ua.feed_reader?
491
+ assert !ua.other?
492
+ assert_equal nil, ua.render_engine
493
+ assert_equal nil, ua.render_engine_version
494
+ assert_equal :unknown_bot, ua.name
495
+ assert_equal nil, ua.version
496
+ assert_equal [], ua.emails
497
+ assert_equal nil, ua.email
498
+ assert_equal [], ua.urls
499
+ assert_equal nil, ua.url
500
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
501
+ assert_raise NotImplementedError do
502
+ ua.method(method).call
503
+ end
504
+ end
505
+ end
506
+
507
+ def test_yahoo_slurp
508
+ ua = UserAgent.new "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)"
509
+ assert ua.known?
510
+ assert ua.bot?
511
+ assert !ua.browser?
512
+ assert !ua.feed_reader?
513
+ assert !ua.other?
514
+ assert_equal nil, ua.render_engine
515
+ assert_equal nil, ua.render_engine_version
516
+ assert_equal :"yahoo! slurp", ua.name
517
+ assert_equal nil, ua.version
518
+ assert_equal [], ua.emails
519
+ assert_equal nil, ua.email
520
+ assert_equal ["http://help.yahoo.com/help/us/ysearch/slurp"], ua.urls
521
+ assert_equal "http://help.yahoo.com/help/us/ysearch/slurp", ua.url
522
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
523
+ assert_raise NotImplementedError do
524
+ ua.method(method).call
525
+ end
526
+ end
527
+ end
528
+
529
+ def test_yahoo_slurp_3_0
530
+ ua = UserAgent.new "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)"
531
+ assert ua.known?
532
+ assert ua.bot?
533
+ assert !ua.browser?
534
+ assert !ua.feed_reader?
535
+ assert !ua.other?
536
+ assert_equal nil, ua.render_engine
537
+ assert_equal nil, ua.render_engine_version
538
+ assert_equal :"yahoo! slurp", ua.name
539
+ assert_equal "3.0", ua.version.full
540
+ assert_equal "3.0", ua.version.major
541
+ assert_equal [], ua.emails
542
+ assert_equal nil, ua.email
543
+ assert_equal ["http://help.yahoo.com/help/us/ysearch/slurp"], ua.urls
544
+ assert_equal "http://help.yahoo.com/help/us/ysearch/slurp", ua.url
545
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
546
+ assert_raise NotImplementedError do
547
+ ua.method(method).call
548
+ end
549
+ end
550
+ end
551
+
552
+ def test_yeti_0_01
553
+ ua = UserAgent.new "Yeti/0.01 (nhn/1noon, yetibot@naver.com, check robots.txt daily and follow it)"
554
+ assert ua.known?
555
+ assert ua.bot?
556
+ assert !ua.browser?
557
+ assert !ua.feed_reader?
558
+ assert !ua.other?
559
+ assert_equal nil, ua.render_engine
560
+ assert_equal nil, ua.render_engine_version
561
+ assert_equal :yeti, ua.name
562
+ assert_equal "0.01", ua.version.full
563
+ assert_equal "0.0", ua.version.major
564
+ assert_equal ["yetibot@naver.com"], ua.emails
565
+ assert_equal "yetibot@naver.com", ua.email
566
+ assert_equal [], ua.urls
567
+ assert_equal nil, ua.url
568
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
569
+ assert_raise NotImplementedError do
570
+ ua.method(method).call
571
+ end
572
+ end
573
+ end
574
+
575
+ def test_yeti_1_0
576
+ ua = UserAgent.new "Yeti/1.0 (+http://help.naver.com/robots/)"
577
+ assert ua.known?
578
+ assert ua.bot?
579
+ assert !ua.browser?
580
+ assert !ua.feed_reader?
581
+ assert !ua.other?
582
+ assert_equal nil, ua.render_engine
583
+ assert_equal nil, ua.render_engine_version
584
+ assert_equal :yeti, ua.name
585
+ assert_equal "1.0", ua.version.full
586
+ assert_equal "1.0", ua.version.major
587
+ assert_equal [], ua.emails
588
+ assert_equal nil, ua.email
589
+ assert_equal ["http://help.naver.com/robots/"], ua.urls
590
+ assert_equal "http://help.naver.com/robots/", ua.url
591
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
592
+ assert_raise NotImplementedError do
593
+ ua.method(method).call
594
+ end
595
+ end
596
+ end
597
+
598
+ def test_yeti_1_0_with_company
599
+ ua = UserAgent.new "Yeti/1.0 (NHN Corp.; http://help.naver.com/robots/)"
600
+ assert ua.known?
601
+ assert ua.bot?
602
+ assert !ua.browser?
603
+ assert !ua.feed_reader?
604
+ assert !ua.other?
605
+ assert_equal nil, ua.render_engine
606
+ assert_equal nil, ua.render_engine_version
607
+ assert_equal :yeti, ua.name
608
+ assert_equal "1.0", ua.version.full
609
+ assert_equal "1.0", ua.version.major
610
+ assert_equal [], ua.emails
611
+ assert_equal nil, ua.email
612
+ assert_equal ["http://help.naver.com/robots/"], ua.urls
613
+ assert_equal "http://help.naver.com/robots/", ua.url
614
+ [:architecture, :dotnet_versions, :os, :os_type, :os_version, :ui_lang, :ui_lang_country, :vendor].each do |method|
615
+ assert_raise NotImplementedError do
616
+ ua.method(method).call
617
+ end
618
+ end
619
+ end
620
+ end