iGEL-ua_parser 0.0.1

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.
@@ -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