rss 0.2.8 → 0.2.9

Sign up to get free protection for your applications and to get access to all the features.
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