rss-nokogiri 0.0.1

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