rss-nokogiri 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. data/.gemtest +0 -0
  2. data/.gitignore +19 -0
  3. data/.gitmodules +3 -0
  4. data/BSDL +22 -0
  5. data/COPYING +56 -0
  6. data/COPYING.ja +51 -0
  7. data/Gemfile +4 -0
  8. data/LEGAL +8 -0
  9. data/README.markdown +51 -0
  10. data/Rakefile +12 -0
  11. data/lib/rss/nokogiri.rb +92 -0
  12. data/rss-nokogiri.gemspec +24 -0
  13. data/test/regression/dot.png +0 -0
  14. data/test/regression/rss-assertions.rb +2090 -0
  15. data/test/regression/rss-testcase.rb +478 -0
  16. data/test/regression/test_1.0.rb +295 -0
  17. data/test/regression/test_2.0.rb +409 -0
  18. data/test/regression/test_accessor.rb +103 -0
  19. data/test/regression/test_atom.rb +681 -0
  20. data/test/regression/test_content.rb +104 -0
  21. data/test/regression/test_dublincore.rb +279 -0
  22. data/test/regression/test_image.rb +214 -0
  23. data/test/regression/test_inherit.rb +40 -0
  24. data/test/regression/test_itunes.rb +347 -0
  25. data/test/regression/test_maker_0.9.rb +474 -0
  26. data/test/regression/test_maker_1.0.rb +516 -0
  27. data/test/regression/test_maker_2.0.rb +757 -0
  28. data/test/regression/test_maker_atom_entry.rb +393 -0
  29. data/test/regression/test_maker_atom_feed.rb +454 -0
  30. data/test/regression/test_maker_content.rb +47 -0
  31. data/test/regression/test_maker_dc.rb +149 -0
  32. data/test/regression/test_maker_image.rb +62 -0
  33. data/test/regression/test_maker_itunes.rb +471 -0
  34. data/test/regression/test_maker_slash.rb +37 -0
  35. data/test/regression/test_maker_sy.rb +44 -0
  36. data/test/regression/test_maker_taxo.rb +81 -0
  37. data/test/regression/test_maker_trackback.rb +41 -0
  38. data/test/regression/test_maker_xml-stylesheet.rb +83 -0
  39. data/test/regression/test_parser.rb +62 -0
  40. data/test/regression/test_parser_1.0.rb +528 -0
  41. data/test/regression/test_parser_2.0.rb +122 -0
  42. data/test/regression/test_parser_atom_entry.rb +163 -0
  43. data/test/regression/test_parser_atom_feed.rb +276 -0
  44. data/test/regression/test_setup_maker_0.9.rb +246 -0
  45. data/test/regression/test_setup_maker_1.0.rb +550 -0
  46. data/test/regression/test_setup_maker_2.0.rb +308 -0
  47. data/test/regression/test_setup_maker_atom_entry.rb +409 -0
  48. data/test/regression/test_setup_maker_atom_feed.rb +445 -0
  49. data/test/regression/test_setup_maker_itunes.rb +144 -0
  50. data/test/regression/test_setup_maker_slash.rb +38 -0
  51. data/test/regression/test_slash.rb +64 -0
  52. data/test/regression/test_syndication.rb +125 -0
  53. data/test/regression/test_taxonomy.rb +172 -0
  54. data/test/regression/test_to_s.rb +670 -0
  55. data/test/regression/test_trackback.rb +135 -0
  56. data/test/regression/test_version.rb +9 -0
  57. data/test/regression/test_xml-stylesheet.rb +108 -0
  58. metadata +220 -0
@@ -0,0 +1,47 @@
1
+ require "rss-testcase"
2
+
3
+ require "rss/maker"
4
+
5
+ module RSS
6
+ class TestMakerContent < TestCase
7
+
8
+ def setup
9
+ @uri = "http://purl.org/rss/1.0/modules/content/"
10
+
11
+ @elements = {
12
+ :encoded => "<em>ATTENTION</em>",
13
+ }
14
+ end
15
+
16
+ def test_rss10
17
+ rss = RSS::Maker.make("1.0") do |maker|
18
+ setup_dummy_channel(maker)
19
+
20
+ setup_dummy_item(maker)
21
+ item = maker.items.last
22
+ @elements.each do |name, value|
23
+ item.__send__("#{accessor_name(name)}=", value)
24
+ end
25
+ end
26
+ assert_content(@elements, rss.items.last)
27
+ end
28
+
29
+ def test_rss20
30
+ rss = RSS::Maker.make("2.0") do |maker|
31
+ setup_dummy_channel(maker)
32
+
33
+ setup_dummy_item(maker)
34
+ item = maker.items.last
35
+ @elements.each do |name, value|
36
+ item.__send__("#{accessor_name(name)}=", value)
37
+ end
38
+ end
39
+ assert_content(@elements, rss.items.last)
40
+ end
41
+
42
+ private
43
+ def accessor_name(name)
44
+ "content_#{name}"
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,149 @@
1
+ require "rss-testcase"
2
+
3
+ require "rss/maker"
4
+
5
+ module RSS
6
+ class TestMakerDublinCore < TestCase
7
+
8
+ def setup
9
+ @uri = "http://purl.org/dc/elements/1.1/"
10
+
11
+ t = Time.iso8601("2000-01-01T12:00:05+00:00")
12
+ class << t
13
+ alias_method(:to_s, :iso8601)
14
+ end
15
+
16
+ @elements = {
17
+ :title => "hoge",
18
+ :description =>
19
+ " XML is placing increasingly heavy loads on
20
+ the existing technical infrastructure of the Internet.",
21
+ :creator => "Rael Dornfest (mailto:rael@oreilly.com)",
22
+ :subject => "XML",
23
+ :publisher => "The O'Reilly Network",
24
+ :contributor => "hogehoge",
25
+ :type => "fugafuga",
26
+ :format => "hohoho",
27
+ :identifier => "fufufu",
28
+ :source => "barbar",
29
+ :language => "ja",
30
+ :relation => "cococo",
31
+ :rights => "Copyright (c) 2000 O'Reilly &amp; Associates, Inc.",
32
+ :date => t,
33
+ }
34
+ end
35
+
36
+ def test_rss10
37
+ rss = RSS::Maker.make("1.0") do |maker|
38
+ setup_dummy_channel(maker)
39
+ set_elements(maker.channel)
40
+
41
+ setup_dummy_image(maker)
42
+ set_elements(maker.image)
43
+
44
+ setup_dummy_item(maker)
45
+ item = maker.items.last
46
+ @elements.each do |name, value|
47
+ item.__send__("#{accessor_name(name)}=", value)
48
+ end
49
+
50
+ setup_dummy_textinput(maker)
51
+ set_elements(maker.textinput)
52
+ end
53
+ assert_dublin_core(@elements, rss.channel)
54
+ assert_dublin_core(@elements, rss.image)
55
+ assert_dublin_core(@elements, rss.items.last)
56
+ assert_dublin_core(@elements, rss.textinput)
57
+ end
58
+
59
+ def test_rss10_multiple
60
+ assert_multiple_dublin_core_rss10("_list")
61
+ assert_multiple_dublin_core_rss10("es")
62
+ end
63
+
64
+ def assert_multiple_dublin_core_rss10(multiple_rights_suffix)
65
+ elems = []
66
+ @elements.each do |name, value|
67
+ plural = name.to_s + (name == :rights ? multiple_rights_suffix : "s")
68
+ values = [value]
69
+ if name == :date
70
+ values << value + 60
71
+ else
72
+ values << value * 2
73
+ end
74
+ elems << [name, values, plural]
75
+ end
76
+
77
+ rss = RSS::Maker.make("1.0") do |maker|
78
+ setup_dummy_channel(maker)
79
+ set_multiple_elements(maker.channel, elems)
80
+
81
+ setup_dummy_image(maker)
82
+ set_multiple_elements(maker.image, elems)
83
+
84
+ setup_dummy_item(maker)
85
+ item = maker.items.last
86
+ elems.each do |name, values, plural|
87
+ dc_elems = item.__send__("dc_#{plural}")
88
+ values.each do |value|
89
+ elem = dc_elems.__send__("new_#{name}")
90
+ elem.value = value
91
+ end
92
+ end
93
+
94
+ setup_dummy_textinput(maker)
95
+ set_multiple_elements(maker.textinput, elems)
96
+ end
97
+ assert_multiple_dublin_core(elems, rss.channel)
98
+ assert_multiple_dublin_core(elems, rss.image)
99
+ assert_multiple_dublin_core(elems, rss.items.last)
100
+ assert_multiple_dublin_core(elems, rss.textinput)
101
+ end
102
+
103
+ def test_date
104
+ t1 = Time.iso8601("2000-01-01T12:00:05+00:00")
105
+ t2 = Time.iso8601("2005-01-01T12:00:05+00:00")
106
+
107
+ rss = RSS::Maker.make("1.0") do |maker|
108
+ setup_dummy_channel(maker)
109
+ maker.channel.date = t1
110
+ maker.channel.dc_dates.new_date do |date|
111
+ date.value = t2
112
+ end
113
+
114
+ setup_dummy_item(maker)
115
+ item = maker.items.last
116
+ item.date = t2
117
+ item.dc_dates.new_date do |date|
118
+ date.value = t1
119
+ end
120
+ end
121
+ assert_equal([t1, t2], rss.channel.dc_dates.collect{|x| x.value})
122
+ assert_equal([t2, t1], rss.items.last.dc_dates.collect{|x| x.value})
123
+ end
124
+
125
+ private
126
+ def accessor_name(name)
127
+ "dc_#{name}"
128
+ end
129
+
130
+ def set_elements(target, elems=@elements)
131
+ elems.each do |name, value|
132
+ target.__send__("#{accessor_name(name)}=", value)
133
+ end
134
+ end
135
+
136
+ def set_multiple_elements(target, elems)
137
+ elems.each do |name, values, plural|
138
+ plural ||= "#{name}s"
139
+ dc_elems = target.__send__("dc_#{plural}")
140
+ values.each do |value|
141
+ dc_elems.__send__("new_#{name}") do |new_dc_elem|
142
+ new_dc_elem.value = value
143
+ end
144
+ end
145
+ end
146
+ end
147
+
148
+ end
149
+ end
@@ -0,0 +1,62 @@
1
+ require "rss-testcase"
2
+
3
+ require "rss/maker"
4
+
5
+ module RSS
6
+ class TestMakerImage < TestCase
7
+
8
+ def setup
9
+ @uri = "http://web.resource.org/rss/1.0/modules/image/"
10
+
11
+ @favicon_infos = {
12
+ "about" => "http://www.kuro5hin.org/favicon.ico",
13
+ "image_size" => "small",
14
+ "dc_title" => "example",
15
+ }
16
+ @item_infos = {
17
+ "about" => "http://www.example.org/item.png",
18
+ "resource" => "http://www.example.org/item",
19
+ "dc_title" => "Example Image",
20
+ "image_width" => "100",
21
+ "image_height" => "65",
22
+ }
23
+ end
24
+
25
+ def test_rss10
26
+ rss = RSS::Maker.make("1.0") do |maker|
27
+ setup_dummy_channel(maker)
28
+ @favicon_infos.each do |name, value|
29
+ maker.channel.image_favicon.__send__("#{name}=", value)
30
+ end
31
+
32
+ setup_dummy_image(maker)
33
+
34
+ setup_dummy_item(maker)
35
+ item = maker.items.last
36
+ @item_infos.each do |name, value|
37
+ item.image_item.__send__("#{name}=", value)
38
+ end
39
+
40
+ setup_dummy_textinput(maker)
41
+ end
42
+
43
+ setup_rss = RSS::Maker.make("1.0") do |maker|
44
+ rss.setup_maker(maker)
45
+ end
46
+
47
+ [rss, setup_rss].each_with_index do |target, i|
48
+ favicon = target.channel.image_favicon
49
+ assert_equal(@favicon_infos["about"], favicon.about)
50
+ assert_equal(@favicon_infos["image_size"], favicon.image_size)
51
+ assert_equal(@favicon_infos["dc_title"], favicon.dc_title)
52
+
53
+ item = target.items.last.image_item
54
+ assert_equal(@item_infos["about"], item.about)
55
+ assert_equal(@item_infos["resource"], item.resource)
56
+ assert_equal(@item_infos["image_width"].to_i, item.image_width)
57
+ assert_equal(@item_infos["image_height"].to_i, item.image_height)
58
+ assert_equal(@item_infos["dc_title"], item.dc_title)
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,471 @@
1
+ require "rss-testcase"
2
+
3
+ require "rss/maker"
4
+
5
+ module RSS
6
+ class TestMakerITunes < TestCase
7
+ def test_author
8
+ assert_maker_itunes_author(%w(channel))
9
+ assert_maker_itunes_author(%w(items last))
10
+ end
11
+
12
+ def test_block
13
+ assert_maker_itunes_block(%w(channel))
14
+ assert_maker_itunes_block(%w(items last))
15
+ end
16
+
17
+ def test_category
18
+ assert_maker_itunes_category(%w(channel))
19
+ end
20
+
21
+ def test_image
22
+ assert_maker_itunes_image(%w(channel))
23
+ end
24
+
25
+ def test_duration
26
+ assert_maker_itunes_duration(%w(items last))
27
+ end
28
+
29
+ def test_explicit
30
+ assert_maker_itunes_explicit(%w(channel))
31
+ assert_maker_itunes_explicit(%w(items last))
32
+ end
33
+
34
+ def test_keywords
35
+ assert_maker_itunes_keywords(%w(channel))
36
+ assert_maker_itunes_keywords(%w(items last))
37
+ end
38
+
39
+ def test_new_feed_url
40
+ assert_maker_itunes_new_feed_url(%w(channel))
41
+ end
42
+
43
+ def test_owner
44
+ assert_maker_itunes_owner(%w(channel))
45
+ end
46
+
47
+ def test_subtitle
48
+ assert_maker_itunes_subtitle(%w(channel))
49
+ assert_maker_itunes_subtitle(%w(items last))
50
+ end
51
+
52
+ def test_summary
53
+ assert_maker_itunes_summary(%w(channel))
54
+ assert_maker_itunes_summary(%w(items last))
55
+ end
56
+
57
+ private
58
+
59
+ def assert_maker_itunes_author(maker_readers, feed_readers=nil)
60
+ _wrap_assertion do
61
+ feed_readers ||= maker_readers
62
+ author = "John Doe"
63
+ rss20 = ::RSS::Maker.make("rss2.0") do |maker|
64
+ setup_dummy_channel(maker)
65
+ setup_dummy_item(maker)
66
+
67
+ target = chain_reader(maker, maker_readers)
68
+ target.itunes_author = author
69
+ end
70
+ target = chain_reader(rss20, feed_readers)
71
+ assert_equal(author, target.itunes_author)
72
+ end
73
+ end
74
+
75
+ def _assert_maker_itunes_block(value, boolean_value, maker_readers,
76
+ feed_readers)
77
+ rss20 = ::RSS::Maker.make("rss2.0") do |maker|
78
+ setup_dummy_channel(maker)
79
+ setup_dummy_item(maker)
80
+
81
+ target = chain_reader(maker, maker_readers)
82
+ target.itunes_block = value
83
+ assert_equal(value, target.itunes_block)
84
+ assert_equal(boolean_value, target.itunes_block?)
85
+ end
86
+ target = chain_reader(rss20, feed_readers)
87
+ if [true, false].include?(value)
88
+ feed_expected_value = value = value ? "yes" : "no"
89
+ else
90
+ feed_expected_value = value
91
+ end
92
+ assert_equal(value, target.itunes_block)
93
+ assert_equal(boolean_value, target.itunes_block?)
94
+ end
95
+
96
+ def assert_maker_itunes_block(maker_readers, feed_readers=nil)
97
+ _wrap_assertion do
98
+ feed_readers ||= maker_readers
99
+ _assert_maker_itunes_block("yes", true, maker_readers, feed_readers)
100
+ _assert_maker_itunes_block("Yes", true, maker_readers, feed_readers)
101
+ _assert_maker_itunes_block("no", false, maker_readers, feed_readers)
102
+ _assert_maker_itunes_block("", false, maker_readers, feed_readers)
103
+ _assert_maker_itunes_block(true, true, maker_readers, feed_readers)
104
+ _assert_maker_itunes_block(false, false, maker_readers, feed_readers)
105
+ _assert_maker_itunes_block(nil, false, maker_readers, feed_readers)
106
+ end
107
+ end
108
+
109
+ def _assert_maker_itunes_category(categories, maker_readers, feed_readers)
110
+ rss20 = ::RSS::Maker.make("rss2.0") do |maker|
111
+ setup_dummy_channel(maker)
112
+ setup_dummy_item(maker)
113
+
114
+ target = chain_reader(maker, maker_readers)
115
+ categories.each do |category|
116
+ sub_target = target.itunes_categories
117
+ if category.is_a?(Array)
118
+ category.each do |sub_category|
119
+ sub_target = sub_target.new_category
120
+ sub_target.text = sub_category
121
+ end
122
+ else
123
+ sub_target.new_category.text = category
124
+ end
125
+ end
126
+ end
127
+
128
+ target = chain_reader(rss20, feed_readers)
129
+ actual_categories = target.itunes_categories.collect do |category|
130
+ cat = category.text
131
+ if category.itunes_categories.empty?
132
+ cat
133
+ else
134
+ [cat, *category.itunes_categories.collect {|c| c.text}]
135
+ end
136
+ end
137
+ assert_equal(categories, actual_categories)
138
+ end
139
+
140
+ def assert_maker_itunes_category(maker_readers, feed_readers=nil)
141
+ _wrap_assertion do
142
+ feed_readers ||= maker_readers
143
+ _assert_maker_itunes_category(["Audio Blogs"],
144
+ maker_readers, feed_readers)
145
+ _assert_maker_itunes_category([["Arts & Entertainment", "Games"]],
146
+ maker_readers, feed_readers)
147
+ _assert_maker_itunes_category([["Arts & Entertainment", "Games"],
148
+ ["Technology", "Computers"],
149
+ "Audio Blogs"],
150
+ maker_readers, feed_readers)
151
+ end
152
+ end
153
+
154
+ def assert_maker_itunes_image(maker_readers, feed_readers=nil)
155
+ _wrap_assertion do
156
+ feed_readers ||= maker_readers
157
+ url = "http://example.com/podcasts/everything/AllAboutEverything.jpg"
158
+
159
+ rss20 = ::RSS::Maker.make("rss2.0") do |maker|
160
+ setup_dummy_channel(maker)
161
+ setup_dummy_item(maker)
162
+
163
+ target = chain_reader(maker, maker_readers)
164
+ target.itunes_image = url
165
+ end
166
+
167
+ target = chain_reader(rss20, feed_readers)
168
+ assert_not_nil(target.itunes_image)
169
+ assert_equal(url, target.itunes_image.href)
170
+ end
171
+ end
172
+
173
+ def _assert_maker_itunes_duration(hour, minute, second, value,
174
+ maker_readers, feed_readers)
175
+ _assert_maker_itunes_duration_by_value(hour, minute, second, value,
176
+ maker_readers, feed_readers)
177
+ _assert_maker_itunes_duration_by_hour_minute_second(hour, minute, second,
178
+ value,
179
+ maker_readers,
180
+ feed_readers)
181
+ end
182
+
183
+ def _assert_maker_itunes_duration_by(hour, minute, second, value,
184
+ maker_readers, feed_readers)
185
+ expected_value = nil
186
+ rss20 = ::RSS::Maker.make("rss2.0") do |maker|
187
+ setup_dummy_channel(maker)
188
+ setup_dummy_item(maker)
189
+
190
+ target = chain_reader(maker, maker_readers)
191
+ expected_value = yield(target)
192
+ assert_equal(expected_value, target.itunes_duration)
193
+ target.itunes_duration do |duration|
194
+ assert_equal([hour, minute, second, expected_value],
195
+ [duration.hour, duration.minute,
196
+ duration.second, duration.content])
197
+ end
198
+ end
199
+ target = chain_reader(rss20, feed_readers)
200
+ duration = target.itunes_duration
201
+ assert_not_nil(duration)
202
+ assert_equal([hour, minute, second, expected_value],
203
+ [duration.hour, duration.minute,
204
+ duration.second, duration.content])
205
+ end
206
+
207
+ def _assert_maker_itunes_duration_by_value(hour, minute, second, value,
208
+ maker_readers, feed_readers)
209
+ _assert_maker_itunes_duration_by(hour, minute, second, value,
210
+ maker_readers, feed_readers) do |target|
211
+ target.itunes_duration = value
212
+ value
213
+ end
214
+ end
215
+
216
+ def _assert_maker_itunes_duration_by_hour_minute_second(hour, minute, second,
217
+ value,
218
+ maker_readers,
219
+ feed_readers)
220
+ _assert_maker_itunes_duration_by(hour, minute, second, value,
221
+ maker_readers, feed_readers) do |target|
222
+ target.itunes_duration do |duration|
223
+ duration.hour = hour
224
+ duration.minute = minute
225
+ duration.second = second
226
+ end
227
+ value.split(":").collect {|v| "%02d" % v.to_i}.join(":")
228
+ end
229
+ end
230
+
231
+ def _assert_maker_itunes_duration_invalid_value(value, maker_readers)
232
+ assert_raise(ArgumentError) do
233
+ ::RSS::Maker.make("rss2.0") do |maker|
234
+ setup_dummy_channel(maker)
235
+ setup_dummy_item(maker)
236
+
237
+ target = chain_reader(maker, maker_readers)
238
+ target.itunes_duration = value
239
+ end
240
+ end
241
+ end
242
+
243
+ def assert_maker_itunes_duration(maker_readers, feed_readers=nil)
244
+ _wrap_assertion do
245
+ feed_readers ||= maker_readers
246
+ _assert_maker_itunes_duration(7, 14, 5, "07:14:05", maker_readers,
247
+ feed_readers)
248
+ _assert_maker_itunes_duration(7, 14, 5, "7:14:05", maker_readers,
249
+ feed_readers)
250
+ _assert_maker_itunes_duration(0, 4, 55, "04:55", maker_readers,
251
+ feed_readers)
252
+ _assert_maker_itunes_duration(0, 4, 5, "4:05", maker_readers,
253
+ feed_readers)
254
+
255
+ _assert_maker_itunes_duration_invalid_value("5", maker_readers)
256
+ _assert_maker_itunes_duration_invalid_value("09:07:14:05", maker_readers)
257
+ _assert_maker_itunes_duration_invalid_value("10:5", maker_readers)
258
+ _assert_maker_itunes_duration_invalid_value("10:03:5", maker_readers)
259
+ _assert_maker_itunes_duration_invalid_value("10:3:05", maker_readers)
260
+
261
+ _assert_maker_itunes_duration_invalid_value("xx:xx:xx", maker_readers)
262
+ end
263
+ end
264
+
265
+ def _assert_maker_itunes_explicit(explicit, value,
266
+ maker_readers, feed_readers)
267
+ rss20 = ::RSS::Maker.make("rss2.0") do |maker|
268
+ setup_dummy_channel(maker)
269
+ setup_dummy_item(maker)
270
+
271
+ target = chain_reader(maker, maker_readers)
272
+ target.itunes_explicit = value
273
+ assert_equal(explicit, target.itunes_explicit?)
274
+ end
275
+ target = chain_reader(rss20, feed_readers)
276
+ assert_equal(value, target.itunes_explicit)
277
+ assert_equal(explicit, target.itunes_explicit?)
278
+ end
279
+
280
+ def assert_maker_itunes_explicit(maker_readers, feed_readers=nil)
281
+ _wrap_assertion do
282
+ feed_readers ||= maker_readers
283
+ _assert_maker_itunes_explicit(true, "yes", maker_readers, feed_readers)
284
+ _assert_maker_itunes_explicit(false, "clean",
285
+ maker_readers, feed_readers)
286
+ _assert_maker_itunes_explicit(nil, "no", maker_readers, feed_readers)
287
+ end
288
+ end
289
+
290
+ def _assert_maker_itunes_keywords(keywords, value,
291
+ maker_readers, feed_readers)
292
+ _assert_maker_itunes_keywords_by_value(keywords, value,
293
+ maker_readers, feed_readers)
294
+ _assert_maker_itunes_keywords_by_keywords(keywords, maker_readers,
295
+ feed_readers)
296
+ end
297
+
298
+ def _assert_maker_itunes_keywords_by(keywords, maker_readers, feed_readers)
299
+ rss20 = ::RSS::Maker.make("rss2.0") do |maker|
300
+ setup_dummy_channel(maker)
301
+ setup_dummy_item(maker)
302
+
303
+ target = chain_reader(maker, maker_readers)
304
+ yield(target)
305
+ end
306
+ assert_nothing_raised do
307
+ rss20 = ::RSS::Parser.parse(rss20.to_s)
308
+ end
309
+ target = chain_reader(rss20, feed_readers)
310
+ assert_equal(keywords, target.itunes_keywords)
311
+ end
312
+
313
+ def _assert_maker_itunes_keywords_by_value(keywords, value,
314
+ maker_readers, feed_readers)
315
+ _assert_maker_itunes_keywords_by(keywords, maker_readers,
316
+ feed_readers) do |target|
317
+ target.itunes_keywords = value
318
+ end
319
+ end
320
+
321
+ def _assert_maker_itunes_keywords_by_keywords(keywords,
322
+ maker_readers, feed_readers)
323
+ _assert_maker_itunes_keywords_by(keywords, maker_readers,
324
+ feed_readers) do |target|
325
+ target.itunes_keywords = keywords
326
+ end
327
+ end
328
+
329
+ def assert_maker_itunes_keywords(maker_readers, feed_readers=nil)
330
+ _wrap_assertion do
331
+ feed_readers ||= maker_readers
332
+ _assert_maker_itunes_keywords(["salt"], "salt",
333
+ maker_readers, feed_readers)
334
+ _assert_maker_itunes_keywords(["salt"], " salt ",
335
+ maker_readers, feed_readers)
336
+ _assert_maker_itunes_keywords(["salt", "pepper", "shaker", "exciting"],
337
+ "salt, pepper, shaker, exciting",
338
+ maker_readers, feed_readers)
339
+ _assert_maker_itunes_keywords(["metric", "socket", "wrenches",
340
+ "toolsalt"],
341
+ "metric, socket, wrenches, toolsalt",
342
+ maker_readers, feed_readers)
343
+ _assert_maker_itunes_keywords(["olitics", "red", "blue", "state"],
344
+ "olitics, red, blue, state",
345
+ maker_readers, feed_readers)
346
+ end
347
+ end
348
+
349
+ def assert_maker_itunes_new_feed_url(maker_readers, feed_readers=nil)
350
+ feed_readers ||= maker_readers
351
+ url = "http://newlocation.com/example.rss"
352
+
353
+ rss20 = ::RSS::Maker.make("rss2.0") do |maker|
354
+ setup_dummy_channel(maker)
355
+ setup_dummy_item(maker)
356
+
357
+ target = chain_reader(maker, maker_readers)
358
+ target.itunes_new_feed_url = url
359
+ end
360
+ target = chain_reader(rss20, feed_readers)
361
+ assert_equal(url, target.itunes_new_feed_url)
362
+ end
363
+
364
+ def _assert_maker_itunes_owner(name, email, maker_readers, feed_readers)
365
+ rss20 = ::RSS::Maker.make("rss2.0") do |maker|
366
+ setup_dummy_channel(maker)
367
+ setup_dummy_item(maker)
368
+
369
+ target = chain_reader(maker, maker_readers)
370
+ owner = target.itunes_owner
371
+ owner.itunes_name = name
372
+ owner.itunes_email = email
373
+ end
374
+ owner = chain_reader(rss20, feed_readers).itunes_owner
375
+ if name.nil? and email.nil?
376
+ assert_nil(owner)
377
+ else
378
+ assert_not_nil(owner)
379
+ assert_equal(name, owner.itunes_name)
380
+ assert_equal(email, owner.itunes_email)
381
+ end
382
+ end
383
+
384
+ def assert_maker_itunes_owner(maker_readers, feed_readers=nil)
385
+ _wrap_assertion do
386
+ feed_readers ||= maker_readers
387
+ _assert_maker_itunes_owner("John Doe", "john.doe@example.com",
388
+ maker_readers, feed_readers)
389
+
390
+ not_set_name = (["maker"] + maker_readers + ["itunes_owner"]).join(".")
391
+ assert_not_set_error(not_set_name, ["itunes_name"]) do
392
+ _assert_maker_itunes_owner(nil, "john.doe@example.com",
393
+ maker_readers, feed_readers)
394
+ end
395
+ assert_not_set_error(not_set_name, ["itunes_email"]) do
396
+ _assert_maker_itunes_owner("John Doe", nil,
397
+ maker_readers, feed_readers)
398
+ end
399
+
400
+ _assert_maker_itunes_owner(nil, nil, maker_readers, feed_readers)
401
+ end
402
+ end
403
+
404
+ def _assert_maker_itunes_subtitle(subtitle, maker_readers, feed_readers)
405
+ rss20 = ::RSS::Maker.make("rss2.0") do |maker|
406
+ setup_dummy_channel(maker)
407
+ setup_dummy_item(maker)
408
+
409
+ target = chain_reader(maker, maker_readers)
410
+ target.itunes_subtitle = subtitle
411
+ end
412
+
413
+ target = chain_reader(rss20, feed_readers)
414
+ assert_equal(subtitle, target.itunes_subtitle)
415
+ end
416
+
417
+ def assert_maker_itunes_subtitle(maker_readers, feed_readers=nil)
418
+ _wrap_assertion do
419
+ feed_readers ||= maker_readers
420
+ _assert_maker_itunes_subtitle("A show about everything",
421
+ maker_readers, feed_readers)
422
+ _assert_maker_itunes_subtitle("A short primer on table spices",
423
+ maker_readers, feed_readers)
424
+ _assert_maker_itunes_subtitle("Comparing socket wrenches is fun!",
425
+ maker_readers, feed_readers)
426
+ _assert_maker_itunes_subtitle("Red + Blue != Purple",
427
+ maker_readers, feed_readers)
428
+ end
429
+ end
430
+
431
+ def _assert_maker_itunes_summary(summary, maker_readers, feed_readers)
432
+ rss20 = ::RSS::Maker.make("rss2.0") do |maker|
433
+ setup_dummy_channel(maker)
434
+ setup_dummy_item(maker)
435
+
436
+ target = chain_reader(maker, maker_readers)
437
+ target.itunes_summary = summary
438
+ end
439
+
440
+ target = chain_reader(rss20, feed_readers)
441
+ assert_equal(summary, target.itunes_summary)
442
+ end
443
+
444
+ def assert_maker_itunes_summary(maker_readers, feed_readers=nil)
445
+ _wrap_assertion do
446
+ feed_readers ||= maker_readers
447
+ _assert_maker_itunes_summary("All About Everything is a show about " +
448
+ "everything. Each week we dive into any " +
449
+ "subject known to man and talk about it " +
450
+ "as much as we can. Look for our Podcast " +
451
+ "in the iTunes Music Store",
452
+ maker_readers, feed_readers)
453
+ _assert_maker_itunes_summary("This week we talk about salt and pepper " +
454
+ "shakers, comparing and contrasting pour " +
455
+ "rates, construction materials, and " +
456
+ "overall aesthetics. Come and join the " +
457
+ "party!",
458
+ maker_readers, feed_readers)
459
+ _assert_maker_itunes_summary("This week we talk about metric vs. old " +
460
+ "english socket wrenches. Which one is " +
461
+ "better? Do you really need both? Get " +
462
+ "all of your answers here.",
463
+ maker_readers, feed_readers)
464
+ _assert_maker_itunes_summary("This week we talk about surviving in a " +
465
+ "Red state if you're a Blue person. Or " +
466
+ "vice versa.",
467
+ maker_readers, feed_readers)
468
+ end
469
+ end
470
+ end
471
+ end