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,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