rss 0.2.9 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS.md +38 -0
  3. data/README.md +11 -11
  4. data/lib/rss/itunes.rb +10 -1
  5. data/lib/rss/maker/itunes.rb +2 -0
  6. data/lib/rss/rss.rb +43 -15
  7. data/lib/rss/utils.rb +0 -18
  8. data/lib/rss/version.rb +1 -1
  9. data/lib/rss/xml-stylesheet.rb +3 -4
  10. data/lib/rss/xml.rb +3 -2
  11. data/lib/rss.rb +11 -11
  12. metadata +7 -101
  13. data/Gemfile +0 -6
  14. data/Rakefile +0 -15
  15. data/rss.gemspec +0 -30
  16. data/test/dot.png +0 -0
  17. data/test/rss-assertions.rb +0 -2116
  18. data/test/rss-testcase.rb +0 -479
  19. data/test/run-test.rb +0 -15
  20. data/test/test_1.0.rb +0 -308
  21. data/test/test_2.0.rb +0 -412
  22. data/test/test_accessor.rb +0 -104
  23. data/test/test_atom.rb +0 -684
  24. data/test/test_content.rb +0 -105
  25. data/test/test_dublincore.rb +0 -270
  26. data/test/test_image.rb +0 -215
  27. data/test/test_inherit.rb +0 -41
  28. data/test/test_itunes.rb +0 -360
  29. data/test/test_maker_0.9.rb +0 -477
  30. data/test/test_maker_1.0.rb +0 -519
  31. data/test/test_maker_2.0.rb +0 -758
  32. data/test/test_maker_atom_entry.rb +0 -394
  33. data/test/test_maker_atom_feed.rb +0 -455
  34. data/test/test_maker_content.rb +0 -48
  35. data/test/test_maker_dc.rb +0 -150
  36. data/test/test_maker_image.rb +0 -63
  37. data/test/test_maker_itunes.rb +0 -488
  38. data/test/test_maker_slash.rb +0 -38
  39. data/test/test_maker_sy.rb +0 -45
  40. data/test/test_maker_taxo.rb +0 -82
  41. data/test/test_maker_trackback.rb +0 -42
  42. data/test/test_maker_xml-stylesheet.rb +0 -84
  43. data/test/test_parser.rb +0 -122
  44. data/test/test_parser_1.0.rb +0 -529
  45. data/test/test_parser_2.0.rb +0 -123
  46. data/test/test_parser_atom_entry.rb +0 -164
  47. data/test/test_parser_atom_feed.rb +0 -277
  48. data/test/test_setup_maker_0.9.rb +0 -247
  49. data/test/test_setup_maker_1.0.rb +0 -551
  50. data/test/test_setup_maker_2.0.rb +0 -309
  51. data/test/test_setup_maker_atom_entry.rb +0 -410
  52. data/test/test_setup_maker_atom_feed.rb +0 -446
  53. data/test/test_setup_maker_itunes.rb +0 -146
  54. data/test/test_setup_maker_slash.rb +0 -39
  55. data/test/test_slash.rb +0 -65
  56. data/test/test_syndication.rb +0 -126
  57. data/test/test_taxonomy.rb +0 -173
  58. data/test/test_to_s.rb +0 -701
  59. data/test/test_trackback.rb +0 -136
  60. data/test/test_xml-stylesheet.rb +0 -109
@@ -1,2116 +0,0 @@
1
- # frozen_string_literal: false
2
- require 'erb'
3
-
4
- module RSS
5
- module Assertions
6
- def assert_parse(rss, assert_method, *args)
7
- __send__("assert_#{assert_method}", *args) do
8
- ::RSS::Parser.parse(rss)
9
- end
10
- __send__("assert_#{assert_method}", *args) do
11
- ::RSS::Parser.parse(rss, false).validate
12
- end
13
- end
14
-
15
- def assert_ns(prefix, uri)
16
- _wrap_assertion do
17
- begin
18
- yield
19
- flunk("Not raise NSError")
20
- rescue ::RSS::NSError => e
21
- assert_equal(prefix, e.prefix)
22
- assert_equal(uri, e.uri)
23
- end
24
- end
25
- end
26
-
27
- def assert_missing_tag(tag, parent)
28
- _wrap_assertion do
29
- begin
30
- yield
31
- flunk("Not raise MissingTagError")
32
- rescue ::RSS::MissingTagError => e
33
- assert_equal(tag, e.tag)
34
- assert_equal(parent, e.parent)
35
- end
36
- end
37
- end
38
-
39
- def assert_too_much_tag(tag, parent)
40
- _wrap_assertion do
41
- begin
42
- yield
43
- flunk("Not raise TooMuchTagError")
44
- rescue ::RSS::TooMuchTagError => e
45
- assert_equal(tag, e.tag)
46
- assert_equal(parent, e.parent)
47
- end
48
- end
49
- end
50
-
51
- def assert_missing_attribute(tag, attrname)
52
- _wrap_assertion do
53
- begin
54
- yield
55
- flunk("Not raise MissingAttributeError")
56
- rescue ::RSS::MissingAttributeError => e
57
- assert_equal(tag, e.tag)
58
- assert_equal(attrname, e.attribute)
59
- end
60
- end
61
- end
62
-
63
- def assert_not_expected_tag(tag, uri, parent)
64
- _wrap_assertion do
65
- begin
66
- yield
67
- flunk("Not raise NotExpectedTagError")
68
- rescue ::RSS::NotExpectedTagError => e
69
- assert_equal(tag, e.tag)
70
- assert_equal(uri, e.uri)
71
- assert_equal(parent, e.parent)
72
- end
73
- end
74
- end
75
-
76
- def assert_not_available_value(tag, value, attribute=nil)
77
- _wrap_assertion do
78
- begin
79
- yield
80
- flunk("Not raise NotAvailableValueError")
81
- rescue ::RSS::NotAvailableValueError => e
82
- assert_equal(tag, e.tag)
83
- assert_equal(value, e.value)
84
- assert_equal(attribute, e.attribute)
85
- end
86
- end
87
- end
88
-
89
- def assert_not_set_error(name, variables)
90
- _wrap_assertion do
91
- begin
92
- yield
93
- flunk("Not raise NotSetError")
94
- rescue ::RSS::NotSetError => e
95
- assert_equal(name, e.name)
96
- assert_kind_of(Array, variables)
97
- assert_equal(variables.sort, e.variables.sort)
98
- end
99
- end
100
- end
101
-
102
- def assert_xml_declaration(version, encoding, standalone, rss)
103
- _wrap_assertion do
104
- assert_equal(version, rss.version)
105
- assert_equal(encoding, rss.encoding)
106
- assert_equal(standalone, rss.standalone)
107
- end
108
- end
109
-
110
- def assert_xml_stylesheet_attrs(attrs, xsl)
111
- _wrap_assertion do
112
- n_attrs = normalized_attrs(attrs)
113
- ::RSS::XMLStyleSheet::ATTRIBUTES.each do |name|
114
- assert_equal(n_attrs[name], xsl.__send__(name))
115
- end
116
- end
117
- end
118
-
119
- def assert_xml_stylesheet(target, attrs, xsl)
120
- _wrap_assertion do
121
- if attrs.has_key?(:href)
122
- if !attrs.has_key?(:type) and attrs.has_key?(:guess_type)
123
- attrs[:type] = attrs[:guess_type]
124
- end
125
- assert_equal("xml-stylesheet", target)
126
- assert_xml_stylesheet_attrs(attrs, xsl)
127
- else
128
- assert_nil(target)
129
- assert_equal("", xsl.to_s)
130
- end
131
- end
132
- end
133
-
134
- def assert_xml_stylesheet_pis(attrs_ary, rss=nil)
135
- _wrap_assertion do
136
- if rss.nil?
137
- rss = ::RSS::RDF.new
138
- setup_rss10(rss)
139
- end
140
- xss_strs = []
141
- attrs_ary.each do |attrs|
142
- xss = ::RSS::XMLStyleSheet.new(attrs)
143
- xss_strs.push(xss.to_s)
144
- rss.xml_stylesheets.push(xss)
145
- end
146
- pi_str = rss.to_s.gsub(/<\?xml .*\n/, "").gsub(/\s*<[^\?].*\z/m, "")
147
- assert_equal(xss_strs.join("\n"), pi_str)
148
- end
149
- end
150
-
151
- def assert_xml_stylesheets(attrs, xss)
152
- _wrap_assertion do
153
- xss.each_with_index do |xs, i|
154
- assert_xml_stylesheet_attrs(attrs[i], xs)
155
- end
156
- end
157
- end
158
-
159
-
160
- def assert_atom_person(tag_name, generator)
161
- _wrap_assertion do
162
- name = "Mark Pilgrim"
163
- uri = "http://example.org/"
164
- email = "f8dy@example.com"
165
-
166
- assert_parse(generator.call(<<-EOA), :missing_tag, "name", tag_name)
167
- <#{tag_name}/>
168
- EOA
169
-
170
- assert_parse(generator.call(<<-EOA), :missing_tag, "name", tag_name)
171
- <#{tag_name}>
172
- <uri>#{uri}</uri>
173
- <email>#{email}</email>
174
- </#{tag_name}>
175
- EOA
176
-
177
- assert_parse(generator.call(<<-EOA), :nothing_raised)
178
- <#{tag_name}>
179
- <name>#{name}</name>
180
- </#{tag_name}>
181
- EOA
182
-
183
- feed = RSS::Parser.parse(generator.call(<<-EOA))
184
- <#{tag_name}>
185
- <name>#{name}</name>
186
- <uri>#{uri}</uri>
187
- <email>#{email}</email>
188
- </#{tag_name}>
189
- EOA
190
-
191
- person = yield(feed)
192
- assert_not_nil(person)
193
- assert_equal(name, person.name.content)
194
- assert_equal(uri, person.uri.content)
195
- assert_equal(email, person.email.content)
196
- end
197
- end
198
-
199
- def assert_atom_category(generator)
200
- _wrap_assertion do
201
- term = "Music"
202
- scheme = "http://xmlns.com/wordnet/1.6/"
203
- label = "music"
204
-
205
- missing_args = [:missing_attribute, "category", "term"]
206
- assert_parse(generator.call(<<-EOA), *missing_args)
207
- <category/>
208
- EOA
209
-
210
- assert_parse(generator.call(<<-EOA), *missing_args)
211
- <category scheme="#{scheme}" label="#{label}"/>
212
- EOA
213
-
214
- assert_parse(generator.call(<<-EOA), :nothing_raised)
215
- <category term="#{term}"/>
216
- EOA
217
-
218
- feed = RSS::Parser.parse(generator.call(<<-EOA))
219
- <category term="#{term}" scheme="#{scheme}" label="#{label}"/>
220
- EOA
221
-
222
- category = yield(feed)
223
- assert_not_nil(category)
224
- assert_equal(term, category.term)
225
- assert_equal(scheme, category.scheme)
226
- assert_equal(label, category.label)
227
- end
228
- end
229
-
230
- def assert_atom_link(generator)
231
- _wrap_assertion do
232
- href = "http://example.org/feed.atom"
233
- rel = "self"
234
- type = "application/atom+xml"
235
- hreflang = "en"
236
- title = "Atom"
237
- length = "1024"
238
-
239
- assert_parse(generator.call(<<-EOA), :missing_attribute, "link", "href")
240
- <link/>
241
- EOA
242
-
243
- assert_parse(generator.call(<<-EOA), :missing_attribute, "link", "href")
244
- <link rel="#{rel}" type="#{type}" hreflang="#{hreflang}"
245
- title="#{title}" length="#{length}"/>
246
- EOA
247
-
248
- assert_parse(generator.call(<<-EOA), :nothing_raised)
249
- <link href="#{href}"/>
250
- EOA
251
-
252
- feed = RSS::Parser.parse(generator.call(<<-EOA))
253
- <link href="#{href}" rel="#{rel}" type="#{type}" hreflang="#{hreflang}"
254
- title="#{title}" length="#{length}"/>
255
- EOA
256
-
257
- link = yield(feed)
258
- assert_not_nil(link)
259
- assert_equal(href, link.href)
260
- assert_equal(rel, link.rel)
261
- assert_equal(type, link.type)
262
- assert_equal(hreflang, link.hreflang)
263
- assert_equal(title, link.title)
264
- assert_equal(length, link.length)
265
-
266
-
267
- href = "http://example.org/index.html.ja"
268
- parent = link.parent.tag_name
269
- return if parent == "source"
270
-
271
- optional_attributes = %w(hreflang="ja" type="text/html")
272
- 0.upto(optional_attributes.size) do |i|
273
- combination(optional_attributes, i).each do |attributes|
274
- attrs = attributes.join(" ")
275
- assert_parse(generator.call(<<-EOA), :too_much_tag, "link", parent)
276
- <link rel="alternate" #{attrs} href="#{href}"/>
277
- <link rel="alternate" #{attrs} href="#{href}"/>
278
- EOA
279
- end
280
- end
281
- end
282
- end
283
-
284
- def assert_atom_generator(generator)
285
- _wrap_assertion do
286
- uri = "http://www.example.com/"
287
- version = "1.0"
288
- content = "Example Toolkit"
289
-
290
- assert_parse(generator.call(<<-EOA), :nothing_raised)
291
- <generator/>
292
- EOA
293
-
294
- assert_parse(generator.call(<<-EOA), :nothing_raised)
295
- <generator uri="#{uri}" version="#{version}"/>
296
- EOA
297
-
298
- feed = RSS::Parser.parse(generator.call(<<-EOA))
299
- <generator uri="#{uri}" version="#{version}">#{content}</generator>
300
- EOA
301
-
302
- gen = yield(feed)
303
- assert_not_nil(gen)
304
- assert_equal(uri, gen.uri)
305
- assert_equal(version, gen.version)
306
- assert_equal(content, gen.content)
307
- end
308
- end
309
-
310
- def assert_atom_icon(generator)
311
- _wrap_assertion do
312
- content = "http://www.example.com/example.png"
313
-
314
- assert_parse(generator.call(<<-EOA), :nothing_raised)
315
- <icon/>
316
- EOA
317
-
318
- feed = RSS::Parser.parse(generator.call(<<-EOA))
319
- <icon>#{content}</icon>
320
- EOA
321
-
322
- icon = yield(feed)
323
- assert_not_nil(icon)
324
- assert_equal(content, icon.content)
325
- end
326
- end
327
-
328
- def assert_atom_text_construct(tag_name, generator)
329
- _wrap_assertion do
330
- [nil, "text", "html"].each do |type|
331
- attr = ""
332
- attr = " type=\"#{type}\"" if type
333
- assert_parse(generator.call(<<-EOA), :nothing_raised)
334
- <#{tag_name}#{attr}/>
335
- EOA
336
- end
337
-
338
- assert_parse(generator.call(<<-EOA), :missing_tag, "div", tag_name)
339
- <#{tag_name} type="xhtml"/>
340
- EOA
341
-
342
- args = ["x", Atom::URI, tag_name]
343
- assert_parse(generator.call(<<-EOA), :not_expected_tag, *args)
344
- <#{tag_name} type="xhtml"><x/></#{tag_name}>
345
- EOA
346
-
347
- invalid_value = "invalid"
348
- args = ["type", invalid_value]
349
- assert_parse(generator.call(<<-EOA), :not_available_value, *args)
350
- <#{tag_name} type="#{invalid_value}"/>
351
- EOA
352
-
353
- [
354
- [nil, "A lot of effort went into making this effortless"],
355
- ["text", "A lot of effort went into making this effortless"],
356
- ["html", "A <em>lot</em> of effort went into making this effortless"],
357
- ].each do |type, content|
358
- attr = ""
359
- attr = " type=\"#{type}\"" if type
360
- feed = RSS::Parser.parse(generator.call(<<-EOA))
361
- <#{tag_name}#{attr}>#{h content}</#{tag_name}>
362
- EOA
363
-
364
- element = yield(feed)
365
- assert_not_nil(element)
366
- assert_equal(type, element.type)
367
- assert_equal(content, element.content)
368
- end
369
-
370
- [false, true].each do |with_space|
371
- xhtml_uri = "http://www.w3.org/1999/xhtml"
372
- xhtml_content = "<div xmlns=\"#{xhtml_uri}\">abc</div>"
373
- xhtml_element = RSS::XML::Element.new("div", nil, xhtml_uri,
374
- {"xmlns" => xhtml_uri},
375
- ["abc"])
376
- content = xhtml_content
377
- content = " #{content} " if with_space
378
- feed = RSS::Parser.parse(generator.call(<<-EOA))
379
- <#{tag_name} type="xhtml">#{content}</#{tag_name}>
380
- EOA
381
-
382
- element = yield(feed)
383
- assert_not_nil(element)
384
- assert_equal("xhtml", element.type)
385
- assert_equal(xhtml_content, element.content)
386
- assert_equal(xhtml_element, element.xhtml)
387
- end
388
- end
389
- end
390
-
391
- def assert_atom_date_construct(tag_name, generator)
392
- _wrap_assertion do
393
- args = [tag_name, ""]
394
- assert_parse(generator.call(<<-EOR), :not_available_value, *args)
395
- <#{tag_name}/>
396
- EOR
397
-
398
- [
399
- ["xxx", false],
400
- ["2007", false],
401
- ["2007/02/09", true],
402
- ].each do |invalid_value, can_parse|
403
- assert_not_available_value(tag_name, invalid_value) do
404
- RSS::Parser.parse(generator.call(<<-EOR))
405
- <#{tag_name}>#{invalid_value}</#{tag_name}>
406
- EOR
407
- end
408
-
409
- feed = RSS::Parser.parse(generator.call(<<-EOR), false)
410
- <#{tag_name}>#{invalid_value}</#{tag_name}>
411
- EOR
412
- value = yield(feed).content
413
- if can_parse
414
- assert_equal(Time.parse(invalid_value), value)
415
- else
416
- assert_nil(value)
417
- end
418
- end
419
-
420
- [
421
- "2003-12-13T18:30:02Z",
422
- "2003-12-13T18:30:02.25Z",
423
- "2003-12-13T18:30:02+01:00",
424
- "2003-12-13T18:30:02.25+01:00",
425
- ].each do |valid_value|
426
- assert_parse(generator.call(<<-EOR), :nothing_raised)
427
- <#{tag_name}>#{valid_value}</#{tag_name}>
428
- EOR
429
-
430
- feed = RSS::Parser.parse(generator.call(<<-EOR))
431
- <#{tag_name}>#{valid_value}</#{tag_name}>
432
- EOR
433
- assert_equal(Time.parse(valid_value), yield(feed).content)
434
- end
435
- end
436
- end
437
-
438
- def assert_atom_logo(generator)
439
- _wrap_assertion do
440
- content = "http://www.example.com/example.png"
441
-
442
- assert_parse(generator.call(<<-EOA), :nothing_raised)
443
- <logo/>
444
- EOA
445
-
446
- feed = RSS::Parser.parse(generator.call(<<-EOA))
447
- <logo>#{content}</logo>
448
- EOA
449
-
450
- logo = yield(feed)
451
- assert_not_nil(logo)
452
- assert_equal(content, logo.content)
453
- end
454
- end
455
-
456
- def assert_atom_content(generator, &getter)
457
- _wrap_assertion do
458
- assert_atom_content_inline_text(generator, &getter)
459
- assert_atom_content_inline_xhtml(generator, &getter)
460
- assert_atom_content_inline_other(generator, &getter)
461
- assert_atom_content_out_of_line(generator, &getter)
462
- end
463
- end
464
-
465
- def assert_atom_content_inline_text(generator)
466
- _wrap_assertion do
467
- [nil, "text", "html"].each do |type|
468
- content = "<content"
469
- content << " type='#{type}'" if type
470
-
471
- suffix = "/>"
472
- assert_parse(generator.call(content + suffix), :nothing_raised)
473
- suffix = ">xxx</content>"
474
- assert_parse(generator.call(content + suffix), :nothing_raised)
475
- end
476
-
477
- [
478
- ["text", "sample content"],
479
- ["text/plain", "sample content"],
480
- ["html", "<em>sample</em> content"]
481
- ].each do |type, content_content|
482
- feed = RSS::Parser.parse(generator.call(<<-EOA))
483
- <content type="#{type}">#{h content_content}</content>
484
- EOA
485
- content = yield(feed)
486
- assert_equal(type, content.type)
487
- if %w(text html).include?(type)
488
- assert(content.inline_text?)
489
- else
490
- assert(!content.inline_text?)
491
- end
492
- if type == "html"
493
- assert(content.inline_html?)
494
- else
495
- assert(!content.inline_html?)
496
- end
497
- assert(!content.inline_xhtml?)
498
- if type == "text/plain"
499
- assert(content.inline_other?)
500
- assert(content.inline_other_text?)
501
- else
502
- assert(!content.inline_other?)
503
- assert(!content.inline_other_text?)
504
- end
505
- assert(!content.inline_other_xml?)
506
- assert(!content.inline_other_base64?)
507
- assert(!content.out_of_line?)
508
- assert(!content.have_xml_content?)
509
- assert_equal(content_content, content.content)
510
- end
511
- end
512
- end
513
-
514
- def assert_atom_content_inline_xhtml(generator)
515
- _wrap_assertion do
516
- args = ["div", "content"]
517
- assert_parse(generator.call(<<-EOA), :missing_tag, *args)
518
- <content type="xhtml"/>
519
- EOA
520
-
521
- args = ["x", Atom::URI, "content"]
522
- assert_parse(generator.call(<<-EOA), :not_expected_tag, *args)
523
- <content type="xhtml"><x/></content>
524
- EOA
525
-
526
- xhtml_uri = "http://www.w3.org/1999/xhtml"
527
- xhtml_content = "<div xmlns=\"#{xhtml_uri}\">abc</div>"
528
- xhtml_element = RSS::XML::Element.new("div", nil, xhtml_uri,
529
- {"xmlns" => xhtml_uri},
530
- ["abc"])
531
- feed = RSS::Parser.parse(generator.call(<<-EOA))
532
- <content type="xhtml">#{xhtml_content}</content>
533
- EOA
534
-
535
- content = yield(feed)
536
- assert_not_nil(content)
537
- assert_equal("xhtml", content.type)
538
- assert(!content.inline_text?)
539
- assert(!content.inline_html?)
540
- assert(content.inline_xhtml?)
541
- assert(!content.inline_other?)
542
- assert(!content.inline_other_text?)
543
- assert(!content.inline_other_xml?)
544
- assert(!content.inline_other_base64?)
545
- assert(!content.out_of_line?)
546
- assert(content.have_xml_content?)
547
- assert_equal(xhtml_content, content.content)
548
- assert_equal(xhtml_element, content.xhtml)
549
- end
550
- end
551
-
552
- def assert_atom_content_inline_other(generator, &getter)
553
- _wrap_assertion do
554
- assert_atom_content_inline_other_text(generator, &getter)
555
- assert_atom_content_inline_other_xml(generator, &getter)
556
- end
557
- end
558
-
559
- def assert_atom_content_inline_other_text(generator)
560
- _wrap_assertion do
561
- type = "image/png"
562
- assert_parse(generator.call(<<-EOA), :nothing_raised)
563
- <content type="#{type}"/>
564
- EOA
565
-
566
- png_file = File.join(File.dirname(__FILE__), "dot.png")
567
- png = File.open(png_file, "rb") do |file|
568
- file.read.force_encoding("binary")
569
- end
570
- base64_content = [png].pack("m").delete("\n")
571
-
572
- [false, true].each do |with_space|
573
- xml_content = base64_content
574
- xml_content = " #{base64_content}" if with_space
575
- feed = RSS::Parser.parse(generator.call(<<-EOA))
576
- <content type="#{type}">#{xml_content}</content>
577
- EOA
578
-
579
- content = yield(feed)
580
- assert_not_nil(content)
581
- assert_equal(type, content.type)
582
- assert(!content.inline_text?)
583
- assert(!content.inline_html?)
584
- assert(!content.inline_xhtml?)
585
- assert(content.inline_other?)
586
- assert(!content.inline_other_text?)
587
- assert(!content.inline_other_xml?)
588
- assert(content.inline_other_base64?)
589
- assert(!content.out_of_line?)
590
- assert(!content.have_xml_content?)
591
- assert_equal(png, content.content)
592
-
593
- xml = REXML::Document.new(content.to_s).root
594
- assert_rexml_element([], {"type" => type}, base64_content, xml)
595
- end
596
- end
597
- end
598
-
599
- def assert_atom_content_inline_other_xml(generator)
600
- _wrap_assertion do
601
- type = "image/svg+xml"
602
-
603
- assert_parse(generator.call(<<-EOA), :nothing_raised)
604
- <content type="#{type}"/>
605
- EOA
606
-
607
- svg_uri = "http://www.w3.org/2000/svg"
608
- svg_width = "50pt"
609
- svg_height = "20pt"
610
- svg_version = "1.0"
611
- text_x = "15"
612
- text_y = "15"
613
- text = "text"
614
- svg_content = <<-EOS
615
- <svg
616
- xmlns="#{svg_uri}"
617
- width="#{svg_width}"
618
- height="#{svg_height}"
619
- version="#{svg_version}"
620
- ><text x="#{text_x}" y="#{text_y}">#{text}</text
621
- ></svg>
622
- EOS
623
-
624
- text_element = RSS::XML::Element.new("text", nil, svg_uri,
625
- {
626
- "x" => text_x,
627
- "y" => text_y,
628
- },
629
- [text])
630
- svg_element = RSS::XML::Element.new("svg", nil, svg_uri,
631
- {
632
- "xmlns" => svg_uri,
633
- "width" => svg_width,
634
- "height" => svg_height,
635
- "version" => svg_version,
636
- },
637
- [text_element])
638
- feed = RSS::Parser.parse(generator.call(<<-EOA))
639
- <content type="#{type}">#{svg_content}</content>
640
- EOA
641
-
642
- content = yield(feed)
643
- assert_not_nil(content)
644
- assert_equal(type, content.type)
645
- assert(!content.inline_text?)
646
- assert(!content.inline_html?)
647
- assert(!content.inline_xhtml?)
648
- assert(content.inline_other?)
649
- assert(!content.inline_other_text?)
650
- assert(content.inline_other_xml?)
651
- assert(!content.inline_other_base64?)
652
- assert(!content.out_of_line?)
653
- assert(content.have_xml_content?)
654
- assert_equal(REXML::Document.new(svg_content).to_s.chomp,
655
- REXML::Document.new(content.content).to_s.chomp)
656
- assert_equal(svg_element, content.xml)
657
- assert_nil(content.xhtml)
658
- end
659
- end
660
-
661
- def assert_atom_content_out_of_line(generator)
662
- _wrap_assertion do
663
- text_type = "text/plain"
664
- text_src = "http://example.com/README.txt"
665
-
666
- missing_args = [:missing_attribute, "content", "type"]
667
- # RSS Parser raises error even if this is "should" not "must".
668
- assert_parse(generator.call(<<-EOA), *missing_args)
669
- <content src="#{text_src}"/>
670
- EOA
671
-
672
- content_content = "xxx"
673
- not_available_value_args = [:not_available_value,
674
- "content", content_content]
675
- assert_parse(generator.call(<<-EOA), *not_available_value_args)
676
- <content type="#{text_type}" src="#{text_src}">#{content_content}</content>
677
- EOA
678
-
679
- feed = RSS::Parser.parse(generator.call(<<-EOA))
680
- <content type="#{text_type}" src="#{text_src}"/>
681
- EOA
682
- content = yield(feed)
683
- assert_not_nil(content)
684
- assert_equal(text_type, content.type)
685
- assert_equal(text_src, content.src)
686
- assert(!content.inline_text?)
687
- assert(!content.inline_html?)
688
- assert(!content.inline_xhtml?)
689
- assert(!content.inline_other?)
690
- assert(!content.inline_other_text?)
691
- assert(!content.inline_other_xml?)
692
- assert(!content.inline_other_base64?)
693
- assert(content.out_of_line?)
694
- assert(!content.have_xml_content?)
695
- assert_nil(content.xml)
696
- assert_nil(content.xhtml)
697
- assert_equal("", content.content)
698
- end
699
- end
700
-
701
- def assert_atom_source(generator, &getter)
702
- _wrap_assertion do
703
- assert_atom_source_author(generator, &getter)
704
- assert_atom_source_category(generator, &getter)
705
- assert_atom_source_contributor(generator, &getter)
706
- assert_atom_source_generator(generator, &getter)
707
- assert_atom_source_icon(generator, &getter)
708
- assert_atom_source_id(generator, &getter)
709
- assert_atom_source_link(generator, &getter)
710
- assert_atom_source_logo(generator, &getter)
711
- assert_atom_source_rights(generator, &getter)
712
- assert_atom_source_subtitle(generator, &getter)
713
- assert_atom_source_title(generator, &getter)
714
- assert_atom_source_updated(generator, &getter)
715
- end
716
- end
717
-
718
- def assert_atom_source_author(generator)
719
- assert_atom_person("author", generator) do |feed|
720
- source = yield(feed)
721
- assert_equal(1, source.authors.size)
722
- source.author
723
- end
724
- end
725
-
726
- def assert_atom_source_category(generator)
727
- assert_atom_category(generator) do |feed|
728
- source = yield(feed)
729
- assert_equal(1, source.categories.size)
730
- source.category
731
- end
732
- end
733
-
734
- def assert_atom_source_contributor(generator)
735
- assert_atom_person("contributor", generator) do |feed|
736
- source = yield(feed)
737
- assert_equal(1, source.contributors.size)
738
- source.contributor
739
- end
740
- end
741
-
742
- def assert_atom_source_generator(generator)
743
- assert_atom_generator(generator) do |feed|
744
- yield(feed).generator
745
- end
746
- end
747
-
748
- def assert_atom_source_icon(generator)
749
- assert_atom_icon(generator) do |feed|
750
- yield(feed).icon
751
- end
752
- end
753
-
754
- def assert_atom_source_id(generator)
755
- id_content = "urn:uuid:a2fb588b-5674-4898-b420-265a734fea69"
756
- id = "<id>#{id_content}</id>"
757
- feed = RSS::Parser.parse(generator.call(id))
758
- assert_equal(id_content, yield(feed).id.content)
759
- end
760
-
761
- def assert_atom_source_link(generator)
762
- assert_atom_link(generator) do |feed|
763
- source = yield(feed)
764
- assert_equal(1, source.links.size)
765
- source.link
766
- end
767
- end
768
-
769
- def assert_atom_source_logo(generator)
770
- assert_atom_logo(generator) do |feed|
771
- yield(feed).logo
772
- end
773
- end
774
-
775
- def assert_atom_source_rights(generator)
776
- assert_atom_text_construct("rights", generator) do |feed|
777
- yield(feed).rights
778
- end
779
- end
780
-
781
- def assert_atom_source_subtitle(generator)
782
- assert_atom_text_construct("subtitle", generator) do |feed|
783
- yield(feed).subtitle
784
- end
785
- end
786
-
787
- def assert_atom_source_title(generator)
788
- assert_atom_text_construct("title", generator) do |feed|
789
- yield(feed).title
790
- end
791
- end
792
-
793
- def assert_atom_source_updated(generator)
794
- assert_atom_date_construct("updated", generator) do |feed|
795
- yield(feed).updated
796
- end
797
- end
798
-
799
- def assert_dublin_core(elems, target)
800
- _wrap_assertion do
801
- elems.each do |name, value|
802
- assert_equal(value, target.__send__("dc_#{name}"))
803
- end
804
- end
805
- end
806
-
807
- def assert_multiple_dublin_core(elems, target)
808
- _wrap_assertion do
809
- elems.each do |name, values, plural|
810
- plural ||= "#{name}s"
811
- actual = target.__send__("dc_#{plural}").collect{|x| x.value}
812
- assert_equal(values, actual)
813
- end
814
- end
815
- end
816
-
817
- def assert_syndication(elems, target)
818
- _wrap_assertion do
819
- elems.each do |name, value|
820
- meth = "sy_#{name}"
821
- value = value.to_i if meth == "sy_updateFrequency"
822
- assert_equal(value, target.__send__(meth ))
823
- end
824
- end
825
- end
826
-
827
- def assert_content(elems, target)
828
- _wrap_assertion do
829
- elems.each do |name, value|
830
- assert_equal(value, target.__send__("content_#{name}"))
831
- end
832
- end
833
- end
834
-
835
- def assert_trackback(attrs, target)
836
- _wrap_assertion do
837
- n_attrs = normalized_attrs(attrs)
838
- if n_attrs["ping"]
839
- assert_equal(n_attrs["ping"], target.trackback_ping)
840
- end
841
- if n_attrs["abouts"]
842
- n_attrs["abouts"].each_with_index do |about, i|
843
- assert_equal(about, target.trackback_abouts[i].value)
844
- end
845
- end
846
- end
847
- end
848
-
849
- def assert_taxo_topic(topics, target)
850
- _wrap_assertion do
851
- topics.each_with_index do |topic, i|
852
- taxo_topic = target.taxo_topics[i]
853
- topic.each do |name, value|
854
- case name
855
- when :link
856
- assert_equal(value, taxo_topic.about)
857
- assert_equal(value, taxo_topic.taxo_link)
858
- when :topics
859
- assert_equal(value, taxo_topic.taxo_topics.resources)
860
- else
861
- assert_equal(value, taxo_topic.__send__("dc_#{name}"))
862
- end
863
- end
864
- end
865
- end
866
- end
867
-
868
-
869
- def assert_attributes(attrs, names, target)
870
- _wrap_assertion do
871
- n_attrs = normalized_attrs(attrs)
872
- names.each do |info|
873
- if info.is_a?(String)
874
- name = info
875
- type = nil
876
- else
877
- name, type = info
878
- end
879
- value = n_attrs[name]
880
- if value.is_a?(Time)
881
- actual = target.__send__(name)
882
- assert_instance_of(Time, actual)
883
- assert_equal(value.to_i, actual.to_i)
884
- elsif value
885
- case type
886
- when :integer
887
- value = value.to_i
888
- when :boolean
889
- value = value == "true" if value.is_a?(String)
890
- end
891
- assert_equal(value, target.__send__(name))
892
- end
893
- end
894
- end
895
- end
896
-
897
- def assert_rexml_element(children, attrs, text, element, text_type=nil)
898
- _wrap_assertion do
899
- if children
900
- children_info = element.elements.collect {|e| [e.namespace, e.name]}
901
- assert_equal(children.collect {|uri, name| [uri, name]}.sort,
902
- children_info.sort)
903
- end
904
- if attrs
905
- assert_equal(attrs.collect {|k, v| [k, v]}.sort,
906
- element.attributes.collect {|k, v| [k, v]}.sort)
907
- end
908
- case text_type
909
- when :time
910
- assert_not_nil(element.text)
911
- assert_equal(Time.parse(text).to_s, Time.parse(element.text).to_s)
912
- else
913
- assert_equal(text, element.text)
914
- end
915
- end
916
- end
917
-
918
- def _assert_maker_atom_persons(feed_type, maker_readers, feed_readers)
919
- _wrap_assertion do
920
- persons = []
921
- feed = RSS::Maker.make("atom:#{feed_type}") do |maker|
922
- yield maker
923
- targets = chain_reader(maker, maker_readers)
924
- targets.each do |target|
925
- person = {
926
- :name => target.name,
927
- :uri => target.uri,
928
- :email => target.email,
929
- }
930
- persons << person if person[:name]
931
- end
932
- end
933
-
934
- actual_persons = chain_reader(feed, feed_readers) || []
935
- actual_persons = actual_persons.collect do |person|
936
- {
937
- :name => person.name ? person.name.content : nil,
938
- :uri => person.uri ? person.uri.content : nil,
939
- :email => person.email ? person.email.content : nil,
940
- }
941
- end
942
- assert_equal(persons, actual_persons)
943
- end
944
- end
945
-
946
- def assert_maker_atom_persons(feed_type, maker_readers, feed_readers,
947
- not_set_error_name=nil,
948
- parent_not_set_error_name=nil,
949
- parent_not_set_variable=nil)
950
- _wrap_assertion do
951
- not_set_error_name ||= "maker.#{maker_readers.join('.')}"
952
-
953
- args = [feed_type, maker_readers, feed_readers]
954
- if parent_not_set_error_name or parent_not_set_variable
955
- assert_not_set_error(parent_not_set_error_name,
956
- parent_not_set_variable) do
957
- _assert_maker_atom_persons(*args) do |maker|
958
- yield maker
959
- end
960
- end
961
- else
962
- _assert_maker_atom_persons(*args) do |maker|
963
- yield maker
964
- end
965
- end
966
-
967
- assert_not_set_error(not_set_error_name, %w(name)) do
968
- _assert_maker_atom_persons(feed_type, maker_readers,
969
- feed_readers) do |maker|
970
- yield maker
971
- targets = chain_reader(maker, maker_readers)
972
- targets.new_child
973
- end
974
- end
975
-
976
- assert_not_set_error(not_set_error_name, %w(name)) do
977
- _assert_maker_atom_persons(feed_type, maker_readers,
978
- feed_readers) do |maker|
979
- yield maker
980
- targets = chain_reader(maker, maker_readers)
981
- target = targets.new_child
982
- target.uri = "http://example.com/~me/"
983
- end
984
- end
985
-
986
- assert_not_set_error(not_set_error_name, %w(name)) do
987
- _assert_maker_atom_persons(feed_type, maker_readers,
988
- feed_readers) do |maker|
989
- yield maker
990
- targets = chain_reader(maker, maker_readers)
991
- target = targets.new_child
992
- target.email = "me@example.com"
993
- end
994
- end
995
-
996
- assert_not_set_error(not_set_error_name, %w(name)) do
997
- _assert_maker_atom_persons(feed_type, maker_readers,
998
- feed_readers) do |maker|
999
- yield maker
1000
- targets = chain_reader(maker, maker_readers)
1001
- target = targets.new_child
1002
- target.uri = "http://example.com/~me/"
1003
- target.email = "me@example.com"
1004
- end
1005
- end
1006
-
1007
- _assert_maker_atom_persons(feed_type, maker_readers,
1008
- feed_readers) do |maker|
1009
- yield maker
1010
- targets = chain_reader(maker, maker_readers)
1011
- target = targets.new_child
1012
- target.name = "me"
1013
- end
1014
-
1015
- _assert_maker_atom_persons(feed_type, maker_readers,
1016
- feed_readers) do |maker|
1017
- yield maker
1018
- targets = chain_reader(maker, maker_readers)
1019
- target = targets.new_child
1020
- target.name = "me"
1021
- target.uri = "http://example.com/~me/"
1022
- end
1023
-
1024
- _assert_maker_atom_persons(feed_type, maker_readers,
1025
- feed_readers) do |maker|
1026
- yield maker
1027
- targets = chain_reader(maker, maker_readers)
1028
- target = targets.new_child
1029
- target.name = "me"
1030
- target.email = "me@example.com"
1031
- end
1032
-
1033
- _assert_maker_atom_persons(feed_type, maker_readers,
1034
- feed_readers) do |maker|
1035
- yield maker
1036
- targets = chain_reader(maker, maker_readers)
1037
- target = targets.new_child
1038
- target.name = "me"
1039
- target.uri = "http://example.com/~me/"
1040
- target.email = "me@example.com"
1041
- end
1042
-
1043
- _assert_maker_atom_persons(feed_type, maker_readers,
1044
- feed_readers) do |maker|
1045
- yield maker
1046
- targets = chain_reader(maker, maker_readers)
1047
-
1048
- target = targets.new_child
1049
- target.name = "me"
1050
- target.uri = "http://example.com/~me/"
1051
- target.email = "me@example.com"
1052
-
1053
- target = targets.new_child
1054
- target.name = "you"
1055
- target.uri = "http://example.com/~you/"
1056
- target.email = "you@example.com"
1057
- end
1058
-
1059
- assert_not_set_error(not_set_error_name, %w(name)) do
1060
- _assert_maker_atom_persons(feed_type, maker_readers,
1061
- feed_readers) do |maker|
1062
- yield maker
1063
- targets = chain_reader(maker, maker_readers)
1064
-
1065
- target = targets.new_child
1066
- target.name = "me"
1067
- target.uri = "http://example.com/~me/"
1068
- target.email = "me@example.com"
1069
-
1070
- targets.new_child
1071
- end
1072
- end
1073
- end
1074
- end
1075
-
1076
- def _assert_maker_atom_text_construct(feed_type, maker_readers,
1077
- feed_readers, &block)
1078
- maker_extractor = Proc.new do |target|
1079
- text = {
1080
- :type => target.type,
1081
- :content => target.content,
1082
- :xml_content => target.xml_content,
1083
- }
1084
- if text[:type] == "xhtml"
1085
- if text[:xml_content]
1086
- xml_content = text[:xml_content]
1087
- xhtml_uri = "http://www.w3.org/1999/xhtml"
1088
- unless xml_content.is_a?(RSS::XML::Element) and
1089
- ["div", xhtml_uri] == [xml_content.name, xml_content.uri]
1090
- children = xml_content
1091
- children = [children] unless children.is_a?(Array)
1092
- xml_content = RSS::XML::Element.new("div", nil, xhtml_uri,
1093
- {"xmlns" => xhtml_uri},
1094
- children)
1095
- text[:xml_content] = xml_content
1096
- end
1097
- text
1098
- else
1099
- nil
1100
- end
1101
- else
1102
- text[:content] ? text : nil
1103
- end
1104
- end
1105
- feed_extractor = Proc.new do |target|
1106
- {
1107
- :type => target.type,
1108
- :content => target.content,
1109
- :xml_content => target.xhtml,
1110
- }
1111
- end
1112
- _assert_maker_atom_element(feed_type,
1113
- maker_readers, true,
1114
- feed_readers,
1115
- maker_extractor,
1116
- feed_extractor,
1117
- &block)
1118
- end
1119
-
1120
- def assert_maker_atom_text_construct(feed_type, maker_readers, feed_readers,
1121
- parent_not_set_error_name=nil,
1122
- parent_not_set_variable=nil,
1123
- not_set_error_name=nil)
1124
- _wrap_assertion do
1125
- not_set_error_name ||= "maker.#{maker_readers.join('.')}"
1126
-
1127
- args = [feed_type, maker_readers, feed_readers]
1128
- if parent_not_set_error_name or parent_not_set_variable
1129
- assert_not_set_error(parent_not_set_error_name,
1130
- parent_not_set_variable) do
1131
- _assert_maker_atom_text_construct(*args) do |maker|
1132
- yield maker
1133
- end
1134
- end
1135
- else
1136
- _assert_maker_atom_text_construct(*args) do |maker|
1137
- yield maker
1138
- end
1139
- end
1140
-
1141
- assert_not_set_error(not_set_error_name, %w(content)) do
1142
- _assert_maker_atom_text_construct(*args) do |maker|
1143
- yield maker
1144
- target = chain_reader(maker, maker_readers) {|x| x}
1145
- target.type = "text"
1146
- end
1147
- end
1148
-
1149
- assert_not_set_error(not_set_error_name, %w(content)) do
1150
- _assert_maker_atom_text_construct(*args) do |maker|
1151
- yield maker
1152
- target = chain_reader(maker, maker_readers) {|x| x}
1153
- target.type = "html"
1154
- end
1155
- end
1156
-
1157
- assert_not_set_error(not_set_error_name, %w(xml_content)) do
1158
- _assert_maker_atom_text_construct(*args) do |maker|
1159
- yield maker
1160
- target = chain_reader(maker, maker_readers) {|x| x}
1161
- target.type = "xhtml"
1162
- end
1163
- end
1164
-
1165
- assert_not_set_error(not_set_error_name, %w(xml_content)) do
1166
- _assert_maker_atom_text_construct(*args) do |maker|
1167
- yield maker
1168
- target = chain_reader(maker, maker_readers) {|x| x}
1169
- target.type = "xhtml"
1170
- target.content = "Content"
1171
- end
1172
- end
1173
-
1174
- _assert_maker_atom_text_construct(*args) do |maker|
1175
- yield maker
1176
- target = chain_reader(maker, maker_readers) {|x| x}
1177
- target.type = "text"
1178
- target.content = "Content"
1179
- end
1180
-
1181
- _assert_maker_atom_text_construct(*args) do |maker|
1182
- yield maker
1183
- target = chain_reader(maker, maker_readers) {|x| x}
1184
- target.type = "html"
1185
- target.content = "<em>Content</em>"
1186
- end
1187
-
1188
- _assert_maker_atom_text_construct(*args) do |maker|
1189
- yield maker
1190
- target = chain_reader(maker, maker_readers) {|x| x}
1191
- target.type = "xhtml"
1192
- target.xml_content = "text only"
1193
- end
1194
-
1195
- _assert_maker_atom_text_construct(*args) do |maker|
1196
- yield maker
1197
- target = chain_reader(maker, maker_readers) {|x| x}
1198
- target.type = "xhtml"
1199
- target.xml_content = RSS::XML::Element.new("unknown")
1200
- end
1201
- end
1202
- end
1203
-
1204
- def _assert_maker_atom_date_construct(feed_type, maker_readers,
1205
- feed_readers, &block)
1206
- maker_extractor = Proc.new do |target|
1207
- date = {
1208
- :content => target,
1209
- }
1210
- date[:content] ? date : nil
1211
- end
1212
- feed_extractor = Proc.new do |target|
1213
- {
1214
- :content => target.content,
1215
- }
1216
- end
1217
- _assert_maker_atom_element(feed_type,
1218
- maker_readers, false,
1219
- feed_readers,
1220
- maker_extractor,
1221
- feed_extractor,
1222
- &block)
1223
- end
1224
-
1225
- def assert_maker_atom_date_construct(feed_type, maker_readers, feed_readers,
1226
- parent_not_set_error_name=nil,
1227
- parent_not_set_variable=nil)
1228
- _wrap_assertion do
1229
- args = [feed_type, maker_readers, feed_readers]
1230
- if parent_not_set_error_name or parent_not_set_variable
1231
- assert_not_set_error(parent_not_set_error_name,
1232
- parent_not_set_variable) do
1233
- _assert_maker_atom_date_construct(*args) do |maker|
1234
- yield maker
1235
- end
1236
- end
1237
- else
1238
- _assert_maker_atom_date_construct(*args) do |maker|
1239
- yield maker
1240
- end
1241
- end
1242
-
1243
- maker_readers = maker_readers.dup
1244
- writer = "#{maker_readers.pop}="
1245
- _assert_maker_atom_date_construct(*args) do |maker|
1246
- yield maker
1247
- target = chain_reader(maker, maker_readers)
1248
- target.__send__(writer, Time.now)
1249
- end
1250
- end
1251
- end
1252
-
1253
- def _assert_maker_atom_element(feed_type,
1254
- maker_readers,
1255
- maker_readers_need_block,
1256
- feed_readers,
1257
- maker_extractor,
1258
- feed_extractor)
1259
- _wrap_assertion do
1260
- element = nil
1261
- feed = RSS::Maker.make("atom:#{feed_type}") do |maker|
1262
- yield maker
1263
- if maker_readers_need_block
1264
- target = chain_reader(maker, maker_readers) {|x| x}
1265
- else
1266
- target = chain_reader(maker, maker_readers)
1267
- end
1268
- element = maker_extractor.call(target)
1269
- end
1270
-
1271
- target = chain_reader(feed, feed_readers)
1272
- if target
1273
- actual_element = feed_extractor.call(target)
1274
- else
1275
- actual_element = nil
1276
- end
1277
- assert_equal(element, actual_element)
1278
- end
1279
- end
1280
-
1281
- def _assert_maker_atom_elements(feed_type, maker_readers, feed_readers,
1282
- maker_extractor, feed_extractor,
1283
- invalid_feed_checker=nil)
1284
- _wrap_assertion do
1285
- elements = []
1286
- invalid_feed_exception = nil
1287
- feed = nil
1288
- begin
1289
- feed = RSS::Maker.make("atom:#{feed_type}") do |maker|
1290
- yield maker
1291
- targets = chain_reader(maker, maker_readers)
1292
- targets.each do |target|
1293
- element = maker_extractor.call(target)
1294
- elements << element if element
1295
- end
1296
- if invalid_feed_checker
1297
- invalid_feed_exception = invalid_feed_checker.call(targets)
1298
- end
1299
- end
1300
- rescue RSS::Error
1301
- if invalid_feed_exception.is_a?(RSS::TooMuchTagError)
1302
- assert_too_much_tag(invalid_feed_exception.tag,
1303
- invalid_feed_exception.parent) do
1304
- raise
1305
- end
1306
- else
1307
- raise
1308
- end
1309
- end
1310
-
1311
- if invalid_feed_exception.nil?
1312
- actual_elements = chain_reader(feed, feed_readers) || []
1313
- actual_elements = actual_elements.collect do |target|
1314
- feed_extractor.call(target)
1315
- end
1316
- assert_equal(elements, actual_elements)
1317
- end
1318
- end
1319
- end
1320
-
1321
- def assert_maker_atom_element(feed_type, maker_readers, feed_readers,
1322
- setup_target, optional_variables,
1323
- required_variable, assert_method_name,
1324
- not_set_error_name=nil,
1325
- *additional_args)
1326
- _wrap_assertion do
1327
- not_set_error_name ||= "maker.#{maker_readers.join('.')}"
1328
-
1329
- 0.upto(optional_variables.size) do |i|
1330
- combination(optional_variables, i).each do |names|
1331
- have = {}
1332
- names.each do |name|
1333
- have[name.intern] = true
1334
- end
1335
- have_required_variable_too =
1336
- have.merge({required_variable.intern => true})
1337
-
1338
- assert_not_set_error(not_set_error_name, [required_variable]) do
1339
- __send__(assert_method_name, feed_type, maker_readers,
1340
- feed_readers, *additional_args) do |maker|
1341
- yield maker
1342
- target = chain_reader(maker, maker_readers) {|x| x}
1343
- setup_target.call(target, have)
1344
- end
1345
- end
1346
-
1347
- __send__(assert_method_name, feed_type, maker_readers, feed_readers,
1348
- *additional_args) do |maker|
1349
- yield maker
1350
- target = chain_reader(maker, maker_readers) {|x| x}
1351
- setup_target.call(target, have_required_variable_too)
1352
- end
1353
- end
1354
- end
1355
- end
1356
- end
1357
-
1358
- def assert_maker_atom_elements(feed_type, maker_readers, feed_readers,
1359
- setup_target, optional_variables,
1360
- required_variable, assert_method_name,
1361
- not_set_error_name=nil,
1362
- *additional_args)
1363
- _wrap_assertion do
1364
- not_set_error_name ||= "maker.#{maker_readers.join('.')}"
1365
-
1366
- 0.upto(optional_variables.size) do |i|
1367
- combination(optional_variables, i).each do |names|
1368
- have = {}
1369
- names.each do |name|
1370
- have[name.intern] = true
1371
- end
1372
- have_required_variable_too =
1373
- have.merge({required_variable.intern => true})
1374
-
1375
- assert_not_set_error(not_set_error_name, [required_variable]) do
1376
- __send__(assert_method_name, feed_type, maker_readers,
1377
- feed_readers, *additional_args) do |maker|
1378
- yield maker
1379
- targets = chain_reader(maker, maker_readers)
1380
- setup_target.call(targets, have)
1381
- end
1382
- end
1383
-
1384
- __send__(assert_method_name, feed_type, maker_readers, feed_readers,
1385
- *additional_args) do |maker|
1386
- yield maker
1387
- targets = chain_reader(maker, maker_readers)
1388
- setup_target.call(targets, have_required_variable_too)
1389
- end
1390
-
1391
- __send__(assert_method_name, feed_type, maker_readers, feed_readers,
1392
- *additional_args) do |maker|
1393
- yield maker
1394
- targets = chain_reader(maker, maker_readers)
1395
- setup_target.call(targets, have_required_variable_too)
1396
- setup_target.call(targets, have_required_variable_too)
1397
- end
1398
-
1399
- assert_not_set_error(not_set_error_name, [required_variable]) do
1400
- __send__(assert_method_name, feed_type, maker_readers, feed_readers,
1401
- *additional_args) do |maker|
1402
- yield maker
1403
- targets = chain_reader(maker, maker_readers)
1404
- setup_target.call(targets, have_required_variable_too)
1405
- setup_target.call(targets, have)
1406
- end
1407
- end
1408
- end
1409
- end
1410
- end
1411
- end
1412
-
1413
- def _assert_maker_atom_categories(feed_type, maker_readers,
1414
- feed_readers, &block)
1415
- maker_extractor = Proc.new do |target|
1416
- category = {
1417
- :term => target.term,
1418
- :scheme => target.scheme,
1419
- :label => target.label,
1420
- }
1421
- category[:term] ? category : nil
1422
- end
1423
- feed_extractor = Proc.new do |target|
1424
- {
1425
- :term => target.term,
1426
- :scheme => target.scheme,
1427
- :label => target.label,
1428
- }
1429
- end
1430
- _assert_maker_atom_elements(feed_type, maker_readers, feed_readers,
1431
- maker_extractor, feed_extractor, &block)
1432
- end
1433
-
1434
- def assert_maker_atom_categories(feed_type, maker_readers, feed_readers,
1435
- not_set_error_name=nil, &block)
1436
- _wrap_assertion do
1437
- _assert_maker_atom_categories(feed_type, maker_readers,
1438
- feed_readers) do |maker|
1439
- yield maker
1440
- end
1441
-
1442
- setup_target = Proc.new do |targets, have|
1443
- target = targets.new_child
1444
- target.term = "music" if have[:term]
1445
- target.scheme = "http://example.com/category/music" if have[:scheme]
1446
- target.label = "Music" if have[:label]
1447
- end
1448
-
1449
- optional_variables = %w(scheme label)
1450
-
1451
- assert_maker_atom_elements(feed_type, maker_readers, feed_readers,
1452
- setup_target, optional_variables,
1453
- "term", :_assert_maker_atom_categories,
1454
- not_set_error_name, &block)
1455
- end
1456
- end
1457
-
1458
- def _assert_maker_atom_generator(feed_type, maker_readers,
1459
- feed_readers, &block)
1460
- maker_extractor = Proc.new do |target|
1461
- generator = {
1462
- :uri => target.uri,
1463
- :version => target.version,
1464
- :content => target.content,
1465
- }
1466
- generator[:content] ? generator : nil
1467
- end
1468
- feed_extractor = Proc.new do |target|
1469
- {
1470
- :uri => target.uri,
1471
- :version => target.version,
1472
- :content => target.content,
1473
- }
1474
- end
1475
- _assert_maker_atom_element(feed_type,
1476
- maker_readers, true,
1477
- feed_readers,
1478
- maker_extractor,
1479
- feed_extractor,
1480
- &block)
1481
- end
1482
-
1483
- def assert_maker_atom_generator(feed_type, maker_readers, feed_readers,
1484
- not_set_error_name=nil, &block)
1485
- _wrap_assertion do
1486
- not_set_error_name ||= "maker.#{maker_readers.join('.')}"
1487
-
1488
- _assert_maker_atom_generator(feed_type, maker_readers,
1489
- feed_readers) do |maker|
1490
- yield maker
1491
- end
1492
-
1493
- setup_target = Proc.new do |target, have|
1494
- target.content = "RSS Maker" if have[:content]
1495
- target.uri = "http://example.com/rss/maker" if have[:uri]
1496
- target.version = "0.0.1" if have[:version]
1497
- end
1498
-
1499
- optional_variables = %w(uri version)
1500
-
1501
- assert_maker_atom_element(feed_type, maker_readers, feed_readers,
1502
- setup_target, optional_variables,
1503
- "content", :_assert_maker_atom_generator,
1504
- not_set_error_name, &block)
1505
- end
1506
- end
1507
-
1508
- def _assert_maker_atom_icon(feed_type, maker_readers, feed_readers,
1509
- accessor_base, &block)
1510
- maker_extractor = Proc.new do |target|
1511
- icon = {
1512
- :content => target.__send__(accessor_base),
1513
- }
1514
- icon[:content] ? icon : nil
1515
- end
1516
- feed_extractor = Proc.new do |target|
1517
- {
1518
- :content => target.content,
1519
- }
1520
- end
1521
- _assert_maker_atom_element(feed_type,
1522
- maker_readers, true,
1523
- feed_readers,
1524
- maker_extractor,
1525
- feed_extractor,
1526
- &block)
1527
- end
1528
-
1529
- def assert_maker_atom_icon(feed_type, maker_readers, feed_readers,
1530
- accessor_base=nil, not_set_error_name=nil)
1531
- _wrap_assertion do
1532
- accessor_base ||= "url"
1533
- not_set_error_name ||= "maker.#{maker_readers.join('.')}"
1534
-
1535
- _assert_maker_atom_icon(feed_type, maker_readers, feed_readers,
1536
- accessor_base) do |maker|
1537
- yield maker
1538
- end
1539
-
1540
- _assert_maker_atom_icon(feed_type, maker_readers, feed_readers,
1541
- accessor_base) do |maker|
1542
- yield maker
1543
- target = chain_reader(maker, maker_readers)
1544
- target.__send__("#{accessor_base}=", "http://example.com/icon.png")
1545
- end
1546
- end
1547
- end
1548
-
1549
- def _assert_maker_atom_links(feed_type, maker_readers, feed_readers,
1550
- allow_duplication=false, &block)
1551
- maker_extractor = Proc.new do |target|
1552
- link = {
1553
- :href => target.href,
1554
- :rel => target.rel,
1555
- :type => target.type,
1556
- :hreflang => target.hreflang,
1557
- :title => target.title,
1558
- :length => target.length,
1559
- }
1560
- link[:href] ? link : nil
1561
- end
1562
- feed_extractor = Proc.new do |target|
1563
- {
1564
- :href => target.href,
1565
- :rel => target.rel,
1566
- :type => target.type,
1567
- :hreflang => target.hreflang,
1568
- :title => target.title,
1569
- :length => target.length,
1570
- }
1571
- end
1572
-
1573
- if feed_readers.first == "entries"
1574
- parent = "entry"
1575
- else
1576
- parent = feed_type
1577
- end
1578
- invalid_feed_checker = Proc.new do |targets|
1579
- infos = {}
1580
- invalid_exception = nil
1581
- targets.each do |target|
1582
- key = [target.hreflang, target.type]
1583
- if infos.has_key?(key)
1584
- invalid_exception = RSS::TooMuchTagError.new("link", parent)
1585
- break
1586
- end
1587
- infos[key] = true if target.rel.nil? or target.rel == "alternate"
1588
- end
1589
- invalid_exception
1590
- end
1591
- invalid_feed_checker = nil if allow_duplication
1592
- _assert_maker_atom_elements(feed_type, maker_readers, feed_readers,
1593
- maker_extractor, feed_extractor,
1594
- invalid_feed_checker,
1595
- &block)
1596
- end
1597
-
1598
- def assert_maker_atom_links(feed_type, maker_readers, feed_readers,
1599
- not_set_error_name=nil, allow_duplication=false,
1600
- &block)
1601
- _wrap_assertion do
1602
- _assert_maker_atom_links(feed_type, maker_readers,
1603
- feed_readers) do |maker|
1604
- yield maker
1605
- end
1606
-
1607
- langs = %(ja en fr zh po)
1608
- setup_target = Proc.new do |targets, have|
1609
- target = targets.new_child
1610
- lang = langs[targets.size % langs.size]
1611
- target.href = "http://example.com/index.html.#{lang}" if have[:href]
1612
- target.rel = "alternate" if have[:rel]
1613
- target.type = "text/xhtml" if have[:type]
1614
- target.hreflang = lang if have[:hreflang]
1615
- target.title = "FrontPage(#{lang})" if have[:title]
1616
- target.length = 1024 if have[:length]
1617
- end
1618
-
1619
- optional_variables = %w(rel type hreflang title length)
1620
-
1621
- assert_maker_atom_elements(feed_type, maker_readers, feed_readers,
1622
- setup_target, optional_variables,
1623
- "href", :_assert_maker_atom_links,
1624
- not_set_error_name, allow_duplication,
1625
- &block)
1626
- end
1627
- end
1628
-
1629
- def _assert_maker_atom_logo(feed_type, maker_readers, feed_readers,
1630
- accessor_base, &block)
1631
- maker_extractor = Proc.new do |target|
1632
- logo = {
1633
- :uri => target.__send__(accessor_base),
1634
- }
1635
- logo[:uri] ? logo : nil
1636
- end
1637
- feed_extractor = Proc.new do |target|
1638
- {
1639
- :uri => target.content,
1640
- }
1641
- end
1642
- _assert_maker_atom_element(feed_type,
1643
- maker_readers, true,
1644
- feed_readers,
1645
- maker_extractor,
1646
- feed_extractor,
1647
- &block)
1648
- end
1649
-
1650
- def assert_maker_atom_logo(feed_type, maker_readers, feed_readers,
1651
- accessor_base=nil, not_set_error_name=nil)
1652
- _wrap_assertion do
1653
- accessor_base ||= "uri"
1654
- not_set_error_name ||= "maker.#{maker_readers.join('.')}"
1655
-
1656
- _assert_maker_atom_logo(feed_type, maker_readers, feed_readers,
1657
- accessor_base) do |maker|
1658
- yield maker
1659
- end
1660
-
1661
- _assert_maker_atom_logo(feed_type, maker_readers, feed_readers,
1662
- accessor_base) do |maker|
1663
- yield maker
1664
- target = chain_reader(maker, maker_readers)
1665
- target.__send__("#{accessor_base}=", "http://example.com/logo.png")
1666
- end
1667
- end
1668
- end
1669
-
1670
- def _assert_maker_atom_id(feed_type, maker_readers, feed_readers, &block)
1671
- maker_extractor = Proc.new do |target|
1672
- id = {
1673
- :uri => target.id,
1674
- }
1675
- id[:uri] ? id : nil
1676
- end
1677
- feed_extractor = Proc.new do |target|
1678
- if target.id
1679
- {
1680
- :uri => target.id.content,
1681
- }
1682
- else
1683
- nil
1684
- end
1685
- end
1686
- _assert_maker_atom_element(feed_type,
1687
- maker_readers, true,
1688
- feed_readers,
1689
- maker_extractor,
1690
- feed_extractor,
1691
- &block)
1692
- end
1693
-
1694
- def assert_maker_atom_id(feed_type, maker_readers, feed_readers,
1695
- not_set_error_name=nil)
1696
- _wrap_assertion do
1697
- not_set_error_name ||= "maker.#{maker_readers.join('.')}"
1698
-
1699
- args = [feed_type, maker_readers, feed_readers]
1700
- _assert_maker_atom_id(*args) do |maker|
1701
- yield maker
1702
- end
1703
-
1704
- _assert_maker_atom_id(*args) do |maker|
1705
- yield maker
1706
- target = chain_reader(maker, maker_readers)
1707
- target.id = "http://example.com/id/1"
1708
- end
1709
- end
1710
- end
1711
-
1712
- def _assert_maker_atom_content(feed_type, maker_readers,
1713
- feed_readers, &block)
1714
- maker_extractor = Proc.new do |target|
1715
- content = {
1716
- :type => target.type,
1717
- :src => target.src,
1718
- :content => target.content,
1719
- :xml => target.xml,
1720
- :inline_text => target.inline_text?,
1721
- :inline_html => target.inline_html?,
1722
- :inline_xhtml => target.inline_xhtml?,
1723
- :inline_other => target.inline_other?,
1724
- :inline_other_text => target.inline_other_text?,
1725
- :inline_other_xml => target.inline_other_xml?,
1726
- :inline_other_base64 => target.inline_other_base64?,
1727
- :out_of_line => target.out_of_line?,
1728
- }
1729
- content[:src] = nil if content[:src] and content[:content]
1730
- if content[:type] or content[:content]
1731
- content
1732
- else
1733
- nil
1734
- end
1735
- end
1736
- feed_extractor = Proc.new do |target|
1737
- {
1738
- :type => target.type,
1739
- :src => target.src,
1740
- :content => target.content,
1741
- :xml => target.xml,
1742
- :inline_text => target.inline_text?,
1743
- :inline_html => target.inline_html?,
1744
- :inline_xhtml => target.inline_xhtml?,
1745
- :inline_other => target.inline_other?,
1746
- :inline_other_text => target.inline_other_text?,
1747
- :inline_other_xml => target.inline_other_xml?,
1748
- :inline_other_base64 => target.inline_other_base64?,
1749
- :out_of_line => target.out_of_line?,
1750
- }
1751
- end
1752
- _assert_maker_atom_element(feed_type,
1753
- maker_readers, true,
1754
- feed_readers,
1755
- maker_extractor,
1756
- feed_extractor,
1757
- &block)
1758
- end
1759
-
1760
- def assert_maker_atom_content(feed_type, maker_readers, feed_readers,
1761
- not_set_error_name=nil, &block)
1762
- _wrap_assertion do
1763
- not_set_error_name ||= "maker.#{maker_readers.join('.')}"
1764
- args = [feed_type, maker_readers, feed_readers, not_set_error_name]
1765
- assert_maker_atom_content_inline_text(*args, &block)
1766
- assert_maker_atom_content_inline_xhtml(*args, &block)
1767
- assert_maker_atom_content_inline_other(*args, &block)
1768
- assert_maker_atom_content_out_of_line(*args, &block)
1769
- end
1770
- end
1771
-
1772
- def assert_maker_atom_content_inline_text(feed_type, maker_readers,
1773
- feed_readers, not_set_error_name)
1774
- _wrap_assertion do
1775
- args = [feed_type, maker_readers, feed_readers]
1776
- _assert_maker_atom_content(*args) do |maker|
1777
- yield maker
1778
- end
1779
-
1780
- assert_not_set_error(not_set_error_name, %w(content)) do
1781
- RSS::Maker.make("atom:#{feed_type}") do |maker|
1782
- yield maker
1783
- target = chain_reader(maker, maker_readers)
1784
- target.type = "text"
1785
- end
1786
- end
1787
-
1788
- assert_not_set_error(not_set_error_name, %w(content)) do
1789
- RSS::Maker.make("atom:#{feed_type}") do |maker|
1790
- yield maker
1791
- target = chain_reader(maker, maker_readers)
1792
- target.type = "html"
1793
- end
1794
- end
1795
-
1796
- _assert_maker_atom_content(*args) do |maker|
1797
- yield maker
1798
- target = chain_reader(maker, maker_readers)
1799
- target.content = ""
1800
- end
1801
-
1802
- _assert_maker_atom_content(*args) do |maker|
1803
- yield maker
1804
- target = chain_reader(maker, maker_readers)
1805
- target.type = "text"
1806
- target.content = "example content"
1807
- end
1808
-
1809
- _assert_maker_atom_content(*args) do |maker|
1810
- yield maker
1811
- target = chain_reader(maker, maker_readers)
1812
- target.type = "html"
1813
- target.content = "<em>text</em>"
1814
- end
1815
- end
1816
- end
1817
-
1818
- def assert_maker_atom_content_inline_xhtml(feed_type, maker_readers,
1819
- feed_readers, not_set_error_name)
1820
- _wrap_assertion do
1821
- args = [feed_type, maker_readers, feed_readers]
1822
- assert_not_set_error(not_set_error_name, %w(xml_content)) do
1823
- RSS::Maker.make("atom:#{feed_type}") do |maker|
1824
- yield maker
1825
- target = chain_reader(maker, maker_readers)
1826
- target.type = "xhtml"
1827
- end
1828
- end
1829
-
1830
- assert_not_set_error(not_set_error_name, %w(xml_content)) do
1831
- RSS::Maker.make("atom:#{feed_type}") do |maker|
1832
- yield maker
1833
- target = chain_reader(maker, maker_readers)
1834
- target.type = "xhtml"
1835
- target.content = "dummy"
1836
- end
1837
- end
1838
-
1839
- _assert_maker_atom_content(*args) do |maker|
1840
- yield maker
1841
- target = chain_reader(maker, maker_readers)
1842
- target.type = "xhtml"
1843
- target.xml_content = "text"
1844
- end
1845
-
1846
- _assert_maker_atom_content(*args) do |maker|
1847
- yield maker
1848
- target = chain_reader(maker, maker_readers)
1849
- target.type = "xhtml"
1850
- target.xml = "text"
1851
- end
1852
-
1853
- _assert_maker_atom_content(*args) do |maker|
1854
- yield maker
1855
- target = chain_reader(maker, maker_readers)
1856
- target.type = "xhtml"
1857
- target.xml_content =
1858
- RSS::XML::Element.new("em", nil, nil, {}, ["text"])
1859
- end
1860
-
1861
- _assert_maker_atom_content(*args) do |maker|
1862
- yield maker
1863
- target = chain_reader(maker, maker_readers)
1864
- target.type = "xhtml"
1865
- target.xml = RSS::XML::Element.new("em", nil, nil, {}, ["text"])
1866
- end
1867
-
1868
-
1869
- xhtml_uri = "http://www.w3.org/1999/xhtml"
1870
- em = RSS::XML::Element.new("em", nil, nil, {}, ["text"])
1871
- em_with_xhtml_uri =
1872
- RSS::XML::Element.new("em", nil, xhtml_uri, {}, ["text"])
1873
- feed = RSS::Maker.make("atom:#{feed_type}") do |maker|
1874
- yield maker
1875
- target = chain_reader(maker, maker_readers)
1876
- target.type = "xhtml"
1877
- target.xml = em
1878
- end
1879
- assert_equal(RSS::XML::Element.new("div", nil, xhtml_uri,
1880
- {"xmlns" => xhtml_uri},
1881
- [em_with_xhtml_uri]),
1882
- chain_reader(feed, feed_readers).xml)
1883
-
1884
- div = RSS::XML::Element.new("div", nil, xhtml_uri,
1885
- {"xmlns" => xhtml_uri,
1886
- "class" => "sample"},
1887
- ["text"])
1888
- feed = RSS::Maker.make("atom:#{feed_type}") do |maker|
1889
- yield maker
1890
- target = chain_reader(maker, maker_readers)
1891
- target.type = "xhtml"
1892
- target.xml = div
1893
- end
1894
- assert_equal(div, chain_reader(feed, feed_readers).xml)
1895
- end
1896
- end
1897
-
1898
- def assert_maker_atom_content_inline_other(*args, &block)
1899
- _wrap_assertion do
1900
- assert_maker_atom_content_inline_other_xml(*args, &block)
1901
- assert_maker_atom_content_inline_other_text(*args, &block)
1902
- assert_maker_atom_content_inline_other_base64(*args, &block)
1903
- end
1904
- end
1905
-
1906
- def assert_maker_atom_content_inline_other_xml(feed_type, maker_readers,
1907
- feed_readers,
1908
- not_set_error_name)
1909
- _wrap_assertion do
1910
- args = [feed_type, maker_readers, feed_readers]
1911
- assert_not_set_error(not_set_error_name, %w(xml_content)) do
1912
- RSS::Maker.make("atom:#{feed_type}") do |maker|
1913
- yield maker
1914
- target = chain_reader(maker, maker_readers)
1915
- target.type = "application/xml"
1916
- end
1917
- end
1918
-
1919
- assert_not_set_error(not_set_error_name, %w(xml_content)) do
1920
- RSS::Maker.make("atom:#{feed_type}") do |maker|
1921
- yield maker
1922
- target = chain_reader(maker, maker_readers)
1923
- target.type = "svg/image+xml"
1924
- end
1925
- end
1926
-
1927
- svg_uri = "http://www.w3.org/2000/svg"
1928
- rect = RSS::XML::Element.new("rect", nil, svg_uri,
1929
- {"x" => "0.5cm",
1930
- "y" => "0.5cm",
1931
- "width" => "2cm",
1932
- "height" => "1cm"})
1933
- svg = RSS::XML::Element.new("svg", nil, svg_uri,
1934
- {"xmlns" => svg_uri,
1935
- "version" => "1.1",
1936
- "width" => "5cm",
1937
- "height" => "4cm"},
1938
- [rect])
1939
- _assert_maker_atom_content(*args) do |maker|
1940
- yield maker
1941
- target = chain_reader(maker, maker_readers)
1942
- target.type = "image/svg+xml"
1943
- target.xml = svg
1944
- end
1945
-
1946
- feed = RSS::Maker.make("atom:#{feed_type}") do |maker|
1947
- yield maker
1948
- target = chain_reader(maker, maker_readers)
1949
- target.type = "image/svg+xml"
1950
- target.xml = svg
1951
- end
1952
- assert_equal(svg, chain_reader(feed, feed_readers).xml)
1953
- end
1954
- end
1955
-
1956
- def assert_maker_atom_content_inline_other_text(feed_type, maker_readers,
1957
- feed_readers,
1958
- not_set_error_name)
1959
- _wrap_assertion do
1960
- args = [feed_type, maker_readers, feed_readers]
1961
- assert_not_set_error(not_set_error_name, %w(content)) do
1962
- RSS::Maker.make("atom:#{feed_type}") do |maker|
1963
- yield maker
1964
- target = chain_reader(maker, maker_readers)
1965
- target.type = "text/plain"
1966
- end
1967
- end
1968
-
1969
- _assert_maker_atom_content(*args) do |maker|
1970
- yield maker
1971
- target = chain_reader(maker, maker_readers)
1972
- target.type = "text/plain"
1973
- target.content = "text"
1974
- end
1975
- end
1976
- end
1977
-
1978
- def assert_maker_atom_content_inline_other_base64(feed_type, maker_readers,
1979
- feed_readers,
1980
- not_set_error_name)
1981
- _wrap_assertion do
1982
- args = [feed_type, maker_readers, feed_readers]
1983
- content = "\211PNG\r\n\032\n"
1984
- _assert_maker_atom_content(*args) do |maker|
1985
- yield maker
1986
- target = chain_reader(maker, maker_readers)
1987
- target.type = "image/png"
1988
- target.content = content
1989
- end
1990
-
1991
- _assert_maker_atom_content(*args) do |maker|
1992
- yield maker
1993
- target = chain_reader(maker, maker_readers)
1994
- target.type = "image/png"
1995
- target.src = "http://example.com/logo.png"
1996
- target.content = content
1997
- end
1998
-
1999
- feed = RSS::Maker.make("atom:#{feed_type}") do |maker|
2000
- yield maker
2001
- target = chain_reader(maker, maker_readers)
2002
- target.type = "image/png"
2003
- target.src = "http://example.com/logo.png"
2004
- target.content = content
2005
- end
2006
- target = chain_reader(feed, feed_readers)
2007
- assert_nil(target.src)
2008
- assert_equal(content, target.content)
2009
- end
2010
- end
2011
-
2012
- def assert_maker_atom_content_out_of_line(feed_type, maker_readers,
2013
- feed_readers, not_set_error_name)
2014
- _wrap_assertion do
2015
- args = [feed_type, maker_readers, feed_readers]
2016
- assert_not_set_error(not_set_error_name, %w(content)) do
2017
- RSS::Maker.make("atom:#{feed_type}") do |maker|
2018
- yield maker
2019
- target = chain_reader(maker, maker_readers)
2020
- target.type = "image/png"
2021
- end
2022
- end
2023
-
2024
- assert_not_set_error(not_set_error_name, %w(type)) do
2025
- RSS::Maker.make("atom:#{feed_type}") do |maker|
2026
- yield maker
2027
- target = chain_reader(maker, maker_readers)
2028
- target.src = "http://example.com/logo.png"
2029
- end
2030
- end
2031
-
2032
- _assert_maker_atom_content(*args) do |maker|
2033
- yield maker
2034
- target = chain_reader(maker, maker_readers)
2035
- target.type = "image/png"
2036
- target.src = "http://example.com/logo.png"
2037
- end
2038
-
2039
- _assert_maker_atom_content(*args) do |maker|
2040
- yield maker
2041
- target = chain_reader(maker, maker_readers)
2042
- target.type = "image/png"
2043
- target.content = "\211PNG\r\n\032\n"
2044
- end
2045
-
2046
- _assert_maker_atom_content(*args) do |maker|
2047
- yield maker
2048
- target = chain_reader(maker, maker_readers)
2049
- target.type = "application/xml"
2050
- target.src = "http://example.com/sample.xml"
2051
- end
2052
-
2053
-
2054
- _assert_maker_atom_content(*args) do |maker|
2055
- yield maker
2056
- target = chain_reader(maker, maker_readers)
2057
- target.type = "text/plain"
2058
- target.src = "http://example.com/README.txt"
2059
- end
2060
- end
2061
- end
2062
-
2063
- def assert_slash_elements(expected, target)
2064
- assert_equal(expected,
2065
- {
2066
- "section" => target.slash_section,
2067
- "department" => target.slash_department,
2068
- "comments" => target.slash_comments,
2069
- "hit_parades" => target.slash_hit_parades,
2070
- })
2071
- assert_equal(expected["hit_parades"].join(","),
2072
- target.slash_hit_parade)
2073
- end
2074
-
2075
- def chain_reader(target, readers, &block)
2076
- readers.inject(target) do |result, reader|
2077
- return nil if result.nil?
2078
- result.__send__(reader, &block)
2079
- end
2080
- end
2081
-
2082
- def normalized_attrs(attrs)
2083
- n_attrs = {}
2084
- attrs.each do |name, value|
2085
- n_attrs[name.to_s] = value
2086
- end
2087
- n_attrs
2088
- end
2089
-
2090
- def combination(elements, n)
2091
- if n <= 0 or elements.size < n
2092
- []
2093
- elsif n == 1
2094
- elements.collect {|element| [element]}
2095
- else
2096
- first, *rest = elements
2097
- combination(rest, n - 1).collect do |sub_elements|
2098
- [first, *sub_elements]
2099
- end + combination(rest, n)
2100
- end
2101
- end
2102
-
2103
- def tag(name, content=nil, attributes={})
2104
- attributes = attributes.collect do |key, value|
2105
- "#{ERB::Util.h(key)}=\"#{ERB::Util.h(value)}\""
2106
- end.join(" ")
2107
- begin_tag = "<#{name}"
2108
- begin_tag << " #{attributes}" unless attributes.empty?
2109
- if content
2110
- "#{begin_tag}>#{content}</#{name}>\n"
2111
- else
2112
- "#{begin_tag}/>\n"
2113
- end
2114
- end
2115
- end
2116
- end