rss 0.2.8 → 0.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS.md +16 -0
  3. data/Rakefile +8 -1
  4. data/lib/rss/itunes.rb +49 -1
  5. data/lib/rss/maker/itunes.rb +13 -0
  6. data/lib/rss/parser.rb +1 -1
  7. data/lib/rss/version.rb +1 -1
  8. data/rss.gemspec +6 -56
  9. data/test/dot.png +0 -0
  10. data/test/rss-assertions.rb +2116 -0
  11. data/test/rss-testcase.rb +479 -0
  12. data/test/run-test.rb +15 -0
  13. data/test/test_1.0.rb +308 -0
  14. data/test/test_2.0.rb +412 -0
  15. data/test/test_accessor.rb +104 -0
  16. data/test/test_atom.rb +684 -0
  17. data/test/test_content.rb +105 -0
  18. data/test/test_dublincore.rb +270 -0
  19. data/test/test_image.rb +215 -0
  20. data/test/test_inherit.rb +41 -0
  21. data/test/test_itunes.rb +360 -0
  22. data/test/test_maker_0.9.rb +477 -0
  23. data/test/test_maker_1.0.rb +519 -0
  24. data/test/test_maker_2.0.rb +758 -0
  25. data/test/test_maker_atom_entry.rb +394 -0
  26. data/test/test_maker_atom_feed.rb +455 -0
  27. data/test/test_maker_content.rb +48 -0
  28. data/test/test_maker_dc.rb +150 -0
  29. data/test/test_maker_image.rb +63 -0
  30. data/test/test_maker_itunes.rb +488 -0
  31. data/test/test_maker_slash.rb +38 -0
  32. data/test/test_maker_sy.rb +45 -0
  33. data/test/test_maker_taxo.rb +82 -0
  34. data/test/test_maker_trackback.rb +42 -0
  35. data/test/test_maker_xml-stylesheet.rb +84 -0
  36. data/test/test_parser.rb +122 -0
  37. data/test/test_parser_1.0.rb +529 -0
  38. data/test/test_parser_2.0.rb +123 -0
  39. data/test/test_parser_atom_entry.rb +164 -0
  40. data/test/test_parser_atom_feed.rb +277 -0
  41. data/test/test_setup_maker_0.9.rb +247 -0
  42. data/test/test_setup_maker_1.0.rb +551 -0
  43. data/test/test_setup_maker_2.0.rb +309 -0
  44. data/test/test_setup_maker_atom_entry.rb +410 -0
  45. data/test/test_setup_maker_atom_feed.rb +446 -0
  46. data/test/test_setup_maker_itunes.rb +146 -0
  47. data/test/test_setup_maker_slash.rb +39 -0
  48. data/test/test_slash.rb +65 -0
  49. data/test/test_syndication.rb +126 -0
  50. data/test/test_taxonomy.rb +173 -0
  51. data/test/test_to_s.rb +701 -0
  52. data/test/test_trackback.rb +136 -0
  53. data/test/test_xml-stylesheet.rb +109 -0
  54. metadata +109 -7
  55. data/.gitignore +0 -9
  56. data/.travis.yml +0 -26
@@ -0,0 +1,123 @@
1
+ # frozen_string_literal: false
2
+ require_relative "rss-testcase"
3
+
4
+ require "rss/2.0"
5
+
6
+ module RSS
7
+ class TestParser20 < TestCase
8
+ def test_rss20
9
+ assert_parse(make_rss20(<<-EOR), :missing_tag, "channel", "rss")
10
+ EOR
11
+
12
+ assert_parse(make_rss20(<<-EOR), :nothing_raised)
13
+ #{make_channel20("")}
14
+ EOR
15
+ end
16
+
17
+ def test_cloud20
18
+ attrs = [
19
+ ["domain", CLOUD_DOMAIN],
20
+ ["port", CLOUD_PORT],
21
+ ["path", CLOUD_PATH],
22
+ ["registerProcedure", CLOUD_REGISTER_PROCEDURE],
23
+ ["protocol", CLOUD_PROTOCOL],
24
+ ]
25
+
26
+ (attrs.size + 1).times do |i|
27
+ missing_attr = attrs[i]
28
+ if missing_attr
29
+ meth = :missing_attribute
30
+ args = ["cloud", missing_attr[0]]
31
+ else
32
+ meth = :nothing_raised
33
+ args = []
34
+ end
35
+
36
+ cloud_attrs = []
37
+ attrs.each_with_index do |attr, j|
38
+ unless i == j
39
+ cloud_attrs << %Q[#{attr[0]}="#{attr[1]}"]
40
+ end
41
+ end
42
+
43
+ assert_parse(make_rss20(<<-EOR), meth, *args)
44
+ #{make_channel20(%Q[<cloud #{cloud_attrs.join("\n")}/>])}
45
+ EOR
46
+ end
47
+ end
48
+
49
+ def test_source20
50
+ assert_parse(make_rss20(<<-EOR), :missing_attribute, "source", "url")
51
+ #{make_channel20(make_item20(%Q[<source>Example</source>]))}
52
+ EOR
53
+
54
+ assert_parse(make_rss20(<<-EOR), :nothing_raised)
55
+ #{make_channel20(make_item20(%Q[<source url="http://example.com/" />]))}
56
+ EOR
57
+
58
+ assert_parse(make_rss20(<<-EOR), :nothing_raised)
59
+ #{make_channel20(make_item20(%Q[<source url="http://example.com/">Example</source>]))}
60
+ EOR
61
+ end
62
+
63
+ def test_enclosure20
64
+ attrs = [
65
+ ["url", ENCLOSURE_URL],
66
+ ["length", ENCLOSURE_LENGTH],
67
+ ["type", ENCLOSURE_TYPE],
68
+ ]
69
+
70
+ (attrs.size + 1).times do |i|
71
+ missing_attr = attrs[i]
72
+ if missing_attr
73
+ meth = :missing_attribute
74
+ args = ["enclosure", missing_attr[0]]
75
+ else
76
+ meth = :nothing_raised
77
+ args = []
78
+ end
79
+
80
+ enclosure_attrs = []
81
+ attrs.each_with_index do |attr, j|
82
+ unless i == j
83
+ enclosure_attrs << %Q[#{attr[0]}="#{attr[1]}"]
84
+ end
85
+ end
86
+
87
+ assert_parse(make_rss20(<<-EOR), meth, *args)
88
+ #{make_channel20(%Q[
89
+ #{make_item20(%Q[
90
+ <enclosure
91
+ #{enclosure_attrs.join("\n")} />
92
+ ])}
93
+ ])}
94
+ EOR
95
+ end
96
+ end
97
+
98
+ def test_category20
99
+ values = [nil, CATEGORY_DOMAIN]
100
+ values.each do |value|
101
+ domain = ""
102
+ domain << %Q[domain="#{value}"] if value
103
+
104
+ ["", "Example Text"].each do |text|
105
+ rss_src = make_rss20(<<-EOR)
106
+ #{make_channel20(%Q[
107
+ #{make_item20(%Q[
108
+ <category #{domain}>#{text}</category>
109
+ ])}
110
+ ])}
111
+ EOR
112
+ assert_parse(rss_src, :nothing_raised)
113
+
114
+ rss = RSS::Parser.parse(rss_src)
115
+ category = rss.items.last.categories.first
116
+ assert_equal(value, category.domain)
117
+ assert_equal(text, category.content)
118
+ end
119
+ end
120
+ end
121
+ end
122
+ end
123
+
@@ -0,0 +1,164 @@
1
+ # frozen_string_literal: false
2
+ require_relative "rss-testcase"
3
+
4
+ require "rss/atom"
5
+
6
+ module RSS
7
+ class TestParserAtom < TestCase
8
+ def test_entry_validation
9
+ assert_ns("", Atom::URI) do
10
+ Parser.parse(<<-EOA)
11
+ <entry/>
12
+ EOA
13
+ end
14
+
15
+ assert_ns("", Atom::URI) do
16
+ Parser.parse(<<-EOA)
17
+ <entry xmlns="hoge"/>
18
+ EOA
19
+ end
20
+
21
+ assert_parse(<<-EOA, :missing_tag, "id", "entry") do
22
+ <entry xmlns="#{Atom::URI}"/>
23
+ EOA
24
+ end
25
+
26
+ assert_parse(<<-EOA, :missing_tag, "title", "entry") do
27
+ <entry xmlns="#{Atom::URI}">
28
+ <id>urn:uuid:506e336c-a26e-4457-917b-b89dca7ae746</id>
29
+ </entry>
30
+ EOA
31
+ end
32
+
33
+ assert_parse(<<-EOA, :missing_tag, "updated", "entry") do
34
+ <entry xmlns="#{Atom::URI}">
35
+ <id>urn:uuid:506e336c-a26e-4457-917b-b89dca7ae746</id>
36
+ <title>Example Entry</title>
37
+ </entry>
38
+ EOA
39
+ end
40
+
41
+ assert_parse(<<-EOA, :missing_tag, "author", "entry") do
42
+ <entry xmlns="#{Atom::URI}">
43
+ <id>urn:uuid:506e336c-a26e-4457-917b-b89dca7ae746</id>
44
+ <title>Example Entry</title>
45
+ <updated>2003-10-10T18:30:02Z</updated>
46
+ </entry>
47
+ EOA
48
+ end
49
+
50
+ assert_parse(<<-EOA, :nothing_raised) do
51
+ <entry xmlns="#{Atom::URI}">
52
+ <id>urn:uuid:506e336c-a26e-4457-917b-b89dca7ae746</id>
53
+ <title>Example Entry</title>
54
+ <updated>2003-10-10T18:30:02Z</updated>
55
+ <author>
56
+ <name>A person</name>
57
+ </author>
58
+ </entry>
59
+ EOA
60
+ end
61
+ end
62
+
63
+ def test_entry
64
+ entry = RSS::Parser.parse(<<-EOA)
65
+ <?xml version="1.0" encoding="utf-8"?>
66
+ <entry xmlns="http://www.w3.org/2005/Atom">
67
+ <author>
68
+ <name>A person</name>
69
+ </author>
70
+ <title>Atom-Powered Robots Run Amok</title>
71
+ <link href="http://example.org/2003/12/13/atom03"/>
72
+ <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
73
+ <updated>2003-12-13T18:30:02Z</updated>
74
+ <summary>Some text.</summary>
75
+ </entry>
76
+ EOA
77
+ assert_not_nil(entry)
78
+ assert_equal("Atom-Powered Robots Run Amok", entry.title.content)
79
+ assert_equal("http://example.org/2003/12/13/atom03", entry.link.href)
80
+ assert_equal("urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a",
81
+ entry.id.content)
82
+ assert_equal(Time.parse("2003-12-13T18:30:02Z"), entry.updated.content)
83
+ assert_equal("Some text.", entry.summary.content)
84
+ end
85
+
86
+ def test_entry_author
87
+ assert_atom_person("author", method(:make_entry_document)) do |entry|
88
+ assert_equal(2, entry.authors.size)
89
+ entry.authors.last
90
+ end
91
+ end
92
+
93
+ def test_entry_category
94
+ assert_atom_category(method(:make_entry_document)) do |entry|
95
+ assert_equal(1, entry.categories.size)
96
+ entry.category
97
+ end
98
+ end
99
+
100
+ def test_entry_content_text
101
+ assert_atom_content(method(:make_entry_document)) do |entry|
102
+ entry.content
103
+ end
104
+ end
105
+
106
+ def test_entry_contributor
107
+ assert_atom_person("contributor", method(:make_entry_document)) do |entry|
108
+ assert_equal(1, entry.contributors.size)
109
+ entry.contributor
110
+ end
111
+ end
112
+
113
+ def test_entry_id
114
+ entry = RSS::Parser.parse(make_entry_document)
115
+ assert_equal(ENTRY_ID, entry.id.content)
116
+ end
117
+
118
+ def test_entry_link
119
+ assert_atom_link(method(:make_entry_document)) do |entry|
120
+ assert_equal(1, entry.links.size)
121
+ entry.link
122
+ end
123
+ end
124
+
125
+ def test_published
126
+ generator = method(:make_entry_document)
127
+ assert_atom_date_construct("published", generator) do |entry|
128
+ entry.published
129
+ end
130
+ end
131
+
132
+ def test_entry_rights
133
+ generator = method(:make_entry_document)
134
+ assert_atom_text_construct("rights", generator) do |entry|
135
+ entry.rights
136
+ end
137
+ end
138
+
139
+ def test_entry_source
140
+ generator = method(:make_entry_document_with_open_source)
141
+ assert_atom_source(generator) do |entry|
142
+ assert_not_nil(entry.source)
143
+ entry.source
144
+ end
145
+ end
146
+
147
+ def test_entry_summary
148
+ generator = method(:make_entry_document)
149
+ assert_atom_text_construct("summary", generator) do |entry|
150
+ entry.summary
151
+ end
152
+ end
153
+
154
+ def test_entry_title
155
+ entry = RSS::Parser.parse(make_entry_document)
156
+ assert_equal(ENTRY_TITLE, entry.title.content)
157
+ end
158
+
159
+ def test_entry_updated
160
+ entry = RSS::Parser.parse(make_entry_document)
161
+ assert_equal(Time.parse(ENTRY_UPDATED), entry.updated.content)
162
+ end
163
+ end
164
+ end
@@ -0,0 +1,277 @@
1
+ # frozen_string_literal: false
2
+ require_relative "rss-testcase"
3
+
4
+ require "rss/atom"
5
+
6
+ module RSS
7
+ class TestParserAtomFeed < TestCase
8
+ def test_feed_validation
9
+ assert_ns("", Atom::URI) do
10
+ Parser.parse(<<-EOA)
11
+ <feed/>
12
+ EOA
13
+ end
14
+
15
+ assert_ns("", Atom::URI) do
16
+ Parser.parse(<<-EOA)
17
+ <feed xmlns="hoge"/>
18
+ EOA
19
+ end
20
+
21
+ assert_parse(<<-EOA, :missing_tag, "id", "feed") do
22
+ <feed xmlns="#{Atom::URI}"/>
23
+ EOA
24
+ end
25
+
26
+ assert_parse(<<-EOA, :missing_tag, "title", "feed") do
27
+ <feed xmlns="#{Atom::URI}">
28
+ <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>
29
+ </feed>
30
+ EOA
31
+ end
32
+
33
+ assert_parse(<<-EOA, :missing_tag, "updated", "feed") do
34
+ <feed xmlns="#{Atom::URI}">
35
+ <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>
36
+ <title>Example Feed</title>
37
+ </feed>
38
+ EOA
39
+ end
40
+
41
+ assert_parse(<<-EOA, :missing_tag, "author", "feed") do
42
+ <feed xmlns="#{Atom::URI}">
43
+ <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>
44
+ <title>Example Feed</title>
45
+ <updated>2003-12-13T18:30:02Z</updated>
46
+ </feed>
47
+ EOA
48
+ end
49
+
50
+ assert_parse(<<-EOA, :nothing_raised) do
51
+ <feed xmlns="#{Atom::URI}">
52
+ <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>
53
+ <title>Example Feed</title>
54
+ <updated>2003-12-13T18:30:02Z</updated>
55
+ <author>
56
+ <name>A person</name>
57
+ </author>
58
+ </feed>
59
+ EOA
60
+ end
61
+ end
62
+
63
+ def test_lang
64
+ feed = RSS::Parser.parse(<<-EOA)
65
+ <feed xmlns="#{Atom::URI}" xml:lang="ja">
66
+ <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>
67
+ <title xml:lang="en">Example Feed</title>
68
+ <updated>2003-12-13T18:30:02Z</updated>
69
+ <author xml:lang="en">
70
+ <name>A person</name>
71
+ </author>
72
+ </feed>
73
+ EOA
74
+
75
+ assert_equal("ja", feed.lang)
76
+ assert_equal("ja", feed.id.lang)
77
+ assert_equal("en", feed.title.lang)
78
+ assert_equal("ja", feed.updated.lang)
79
+ assert_equal("en", feed.author.lang)
80
+ assert_equal("en", feed.author.name.lang)
81
+ end
82
+
83
+ def test_base
84
+ feed = RSS::Parser.parse(<<-EOA)
85
+ <feed xmlns="#{Atom::URI}" xml:base="http://example.com/">
86
+ <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>
87
+ <title xml:lang="en">Example Feed</title>
88
+ <updated>2003-12-13T18:30:02Z</updated>
89
+ <generator uri="generator">Generator</generator>
90
+ <link hreflang="ja" href="http://example.org/link1"/>
91
+ <link hreflang="en" href="link2"/>
92
+ <link hreflang="fr" xml:base="http://example.net/" href="link3"/>
93
+ <author>
94
+ <name>A person</name>
95
+ <uri>person</uri>
96
+ </author>
97
+ </feed>
98
+ EOA
99
+
100
+ assert_equal("http://example.com/", feed.base)
101
+ assert_equal("http://example.com/", feed.id.base)
102
+ assert_equal("http://example.com/", feed.title.base)
103
+ assert_equal("http://example.com/", feed.updated.base)
104
+ assert_equal("http://example.com/", feed.generator.base)
105
+ assert_equal("http://example.com/generator", feed.generator.uri)
106
+
107
+ assert_equal("http://example.com/", feed.links[0].base)
108
+ assert_equal("http://example.org/link1", feed.links[0].href)
109
+ assert_equal("http://example.com/", feed.links[1].base)
110
+ assert_equal("http://example.com/link2", feed.links[1].href)
111
+ assert_equal("http://example.net/", feed.links[2].base)
112
+ assert_equal("http://example.net/link3", feed.links[2].href)
113
+ assert_equal("http://example.com/person", feed.author.uri.content)
114
+ end
115
+
116
+ def test_feed_author
117
+ assert_atom_person("author", method(:make_feed)) do |feed|
118
+ assert_equal(2, feed.authors.size)
119
+ feed.authors[1]
120
+ end
121
+ end
122
+
123
+ def test_entry_author
124
+ generator = method(:make_feed_with_open_entry)
125
+ assert_atom_person("author", generator) do |feed|
126
+ assert_equal(1, feed.entries.size)
127
+ assert_equal(1, feed.entry.authors.size)
128
+ feed.entry.author
129
+ end
130
+ end
131
+
132
+ def test_feed_category
133
+ assert_atom_category(method(:make_feed)) do |feed|
134
+ assert_equal(1, feed.categories.size)
135
+ feed.category
136
+ end
137
+ end
138
+
139
+ def test_entry_category
140
+ assert_atom_category(method(:make_feed_with_open_entry)) do |feed|
141
+ assert_equal(1, feed.entries.size)
142
+ assert_equal(1, feed.entry.categories.size)
143
+ feed.entry.category
144
+ end
145
+ end
146
+
147
+ def test_entry_content
148
+ assert_atom_content(method(:make_feed_with_open_entry)) do |feed|
149
+ assert_equal(1, feed.entries.size)
150
+ feed.entry.content
151
+ end
152
+ end
153
+
154
+ def test_feed_contributor
155
+ assert_atom_person("contributor", method(:make_feed)) do |feed|
156
+ assert_equal(1, feed.contributors.size)
157
+ feed.contributor
158
+ end
159
+ end
160
+
161
+ def test_entry_contributor
162
+ generator = method(:make_feed_with_open_entry)
163
+ assert_atom_person("contributor", generator) do |feed|
164
+ assert_equal(1, feed.entries.size)
165
+ assert_equal(1, feed.entry.contributors.size)
166
+ feed.entry.contributor
167
+ end
168
+ end
169
+
170
+ def test_feed_generator
171
+ assert_atom_generator(method(:make_feed)) do |feed|
172
+ feed.generator
173
+ end
174
+ end
175
+
176
+ def test_feed_icon
177
+ assert_atom_icon(method(:make_feed)) do |feed|
178
+ feed.icon
179
+ end
180
+ end
181
+
182
+ def test_feed_id
183
+ feed = RSS::Parser.parse(make_feed(''))
184
+ assert_equal(FEED_ID, feed.id.content)
185
+ end
186
+
187
+ def test_entry_id
188
+ feed = RSS::Parser.parse(make_feed(''))
189
+ assert_equal(ENTRY_ID, feed.entry.id.content)
190
+ end
191
+
192
+ def test_feed_link
193
+ assert_atom_link(method(:make_feed)) do |feed|
194
+ assert_equal(1, feed.links.size)
195
+ feed.link
196
+ end
197
+ end
198
+
199
+ def test_entry_link
200
+ assert_atom_link(method(:make_feed_with_open_entry)) do |feed|
201
+ assert_equal(1, feed.entries.size)
202
+ assert_equal(1, feed.entry.links.size)
203
+ feed.entry.link
204
+ end
205
+ end
206
+
207
+ def test_feed_logo
208
+ assert_atom_logo(method(:make_feed)) do |feed|
209
+ feed.logo
210
+ end
211
+ end
212
+
213
+ def test_feed_rights
214
+ assert_atom_text_construct("rights", method(:make_feed)) do |feed|
215
+ feed.rights
216
+ end
217
+ end
218
+
219
+ def test_entry_rights
220
+ generator = method(:make_feed_with_open_entry)
221
+ assert_atom_text_construct("rights", generator) do |feed|
222
+ assert_equal(1, feed.entries.size)
223
+ feed.entry.rights
224
+ end
225
+ end
226
+
227
+ def test_entry_source
228
+ assert_atom_source(method(:make_feed_with_open_entry_source)) do |feed|
229
+ assert_equal(1, feed.entries.size)
230
+ assert_not_nil(feed.entry.source)
231
+ feed.entry.source
232
+ end
233
+ end
234
+
235
+ def test_feed_subtitle
236
+ assert_atom_text_construct("subtitle", method(:make_feed)) do |feed|
237
+ feed.subtitle
238
+ end
239
+ end
240
+
241
+ def test_feed_title
242
+ feed = RSS::Parser.parse(make_feed(''))
243
+ assert_equal(FEED_TITLE, feed.title.content)
244
+ end
245
+
246
+ def test_entry_title
247
+ feed = RSS::Parser.parse(make_feed(''))
248
+ assert_equal(ENTRY_TITLE, feed.entry.title.content)
249
+ end
250
+
251
+ def test_feed_updated
252
+ feed = RSS::Parser.parse(make_feed(''))
253
+ assert_equal(Time.parse(FEED_UPDATED), feed.updated.content)
254
+ end
255
+
256
+ def test_entry_updated
257
+ feed = RSS::Parser.parse(make_feed(''))
258
+ assert_equal(Time.parse(ENTRY_UPDATED), feed.entry.updated.content)
259
+ end
260
+
261
+ def test_entry_published
262
+ generator = method(:make_feed_with_open_entry)
263
+ assert_atom_date_construct("published", generator) do |feed|
264
+ assert_equal(1, feed.entries.size)
265
+ feed.entry.published
266
+ end
267
+ end
268
+
269
+ def test_entry_summary
270
+ generator = method(:make_feed_with_open_entry)
271
+ assert_atom_text_construct("summary", generator) do |feed|
272
+ assert_equal(1, feed.entries.size)
273
+ feed.entry.summary
274
+ end
275
+ end
276
+ end
277
+ end