mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* test/rss/test_parser.rb: split parser tests into ...
* test/rss/test_parser_1.0.rb: ... RSS 1.0 parsing tests and ... * test/rss/test_parser_2.0.rb: ... RSS 2.0 parsing tests. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@10344 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
7625cd5cfb
commit
b205dba48f
4 changed files with 631 additions and 631 deletions
|
|
@ -1,3 +1,9 @@
|
|||
Tue Jun 20 22:08:36 2006 Kouhei Sutou <kou@cozmixng.org>
|
||||
|
||||
* test/rss/test_parser.rb: split parser tests into ...
|
||||
* test/rss/test_parser_1.0.rb: ... RSS 1.0 parsing tests and ...
|
||||
* test/rss/test_parser_2.0.rb: ... RSS 2.0 parsing tests.
|
||||
|
||||
Tue Jun 20 21:19:06 2006 Kouhei Sutou <kou@cozmixng.org>
|
||||
|
||||
* lib/rss/rss.rb: provided default RSS::Element#children.
|
||||
|
|
|
|||
|
|
@ -13,12 +13,10 @@ end
|
|||
require "rss-testcase"
|
||||
|
||||
require "rss/1.0"
|
||||
require "rss/2.0"
|
||||
require "rss/dublincore"
|
||||
|
||||
module RSS
|
||||
class TestParser < TestCase
|
||||
|
||||
def setup
|
||||
@_default_parser = Parser.default_parser
|
||||
@rss10 = make_RDF(<<-EOR)
|
||||
|
|
@ -35,633 +33,6 @@ EOR
|
|||
Parser.default_parser = @_default_parser
|
||||
FileUtils.rm_f(@rss_file)
|
||||
end
|
||||
|
||||
def test_RDF
|
||||
assert_ns("", RDF::URI) do
|
||||
Parser.parse(<<-EOR)
|
||||
#{make_xmldecl}
|
||||
<RDF/>
|
||||
EOR
|
||||
end
|
||||
|
||||
assert_ns("", RDF::URI) do
|
||||
Parser.parse(<<-EOR)
|
||||
#{make_xmldecl}
|
||||
<RDF xmlns="hoge"/>
|
||||
EOR
|
||||
end
|
||||
|
||||
assert_ns("rdf", RDF::URI) do
|
||||
Parser.parse(<<-EOR)
|
||||
#{make_xmldecl}
|
||||
<rdf:RDF xmlns:rdf="hoge"/>
|
||||
EOR
|
||||
end
|
||||
|
||||
assert_parse(<<-EOR, :missing_tag, "channel", "RDF")
|
||||
#{make_xmldecl}
|
||||
<rdf:RDF xmlns:rdf="#{RSS::RDF::URI}"/>
|
||||
EOR
|
||||
|
||||
assert_parse(<<-EOR, :missing_tag, "channel", "RDF")
|
||||
#{make_xmldecl}
|
||||
<RDF xmlns="#{RSS::RDF::URI}"/>
|
||||
EOR
|
||||
|
||||
assert_parse(<<-EOR, :missing_tag, "channel", "RDF")
|
||||
#{make_xmldecl}
|
||||
<RDF xmlns="#{RSS::RDF::URI}"/>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "item", "RDF")
|
||||
#{make_channel}
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "item", "RDF")
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "item", "RDF")
|
||||
#{make_channel}
|
||||
#{make_textinput}
|
||||
EOR
|
||||
|
||||
assert_too_much_tag("image", "RDF") do
|
||||
Parser.parse(make_RDF(<<-EOR))
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
#{make_image}
|
||||
#{make_item}
|
||||
#{make_textinput}
|
||||
EOR
|
||||
end
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :nothing_raised)
|
||||
#{make_channel}
|
||||
#{make_item}
|
||||
#{make_image}
|
||||
#{make_textinput}
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :nothing_raised)
|
||||
#{make_channel}
|
||||
#{make_item}
|
||||
#{make_textinput}
|
||||
#{make_image}
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :nothing_raised)
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
#{make_item}
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :nothing_raised)
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
#{make_item}
|
||||
#{make_textinput}
|
||||
EOR
|
||||
|
||||
1.step(15, 3) do |i|
|
||||
rss = make_RDF() do
|
||||
res = make_channel
|
||||
i.times { res << make_item }
|
||||
res
|
||||
end
|
||||
assert_parse(rss, :nothing_raised)
|
||||
end
|
||||
end
|
||||
|
||||
def test_undefined_entity
|
||||
return unless RSS::Parser.default_parser.raise_for_undefined_entity?
|
||||
assert_parse(make_RDF(<<-EOR), :raises, RSS::NotWellFormedError)
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
<item rdf:about="#{RDF_ABOUT}">
|
||||
<title>#{TITLE_VALUE} &UNKNOWN_ENTITY;</title>
|
||||
<link>#{LINK_VALUE}</link>
|
||||
<description>#{DESCRIPTION_VALUE}</description>
|
||||
</item>
|
||||
#{make_textinput}
|
||||
EOR
|
||||
end
|
||||
|
||||
def test_channel
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_attribute, "channel", "rdf:about")
|
||||
<channel />
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "title", "channel")
|
||||
<channel rdf:about="http://example.com/"/>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "link", "channel")
|
||||
<channel rdf:about="http://example.com/">
|
||||
<title>hoge</title>
|
||||
</channel>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<EOR), :missing_tag, "description", "channel")
|
||||
<channel rdf:about="http://example.com/">
|
||||
<title>hoge</title>
|
||||
<link>http://example.com/</link>
|
||||
</channel>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "items", "channel")
|
||||
<channel rdf:about="http://example.com/">
|
||||
<title>hoge</title>
|
||||
<link>http://example.com/</link>
|
||||
<description>hogehoge</description>
|
||||
</channel>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_attribute, "image", "rdf:resource")
|
||||
<channel rdf:about="http://example.com/">
|
||||
<title>hoge</title>
|
||||
<link>http://example.com/</link>
|
||||
<description>hogehoge</description>
|
||||
<image/>
|
||||
</channel>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "items", "channel")
|
||||
<channel rdf:about="http://example.com/">
|
||||
<title>hoge</title>
|
||||
<link>http://example.com/</link>
|
||||
<description>hogehoge</description>
|
||||
<image rdf:resource="http://example.com/hoge.png" />
|
||||
</channel>
|
||||
EOR
|
||||
|
||||
rss = make_RDF(<<-EOR)
|
||||
<channel rdf:about="http://example.com/">
|
||||
<title>hoge</title>
|
||||
<link>http://example.com/</link>
|
||||
<description>hogehoge</description>
|
||||
<image rdf:resource="http://example.com/hoge.png" />
|
||||
<items/>
|
||||
</channel>
|
||||
EOR
|
||||
|
||||
assert_missing_tag("Seq", "items") do
|
||||
Parser.parse(rss)
|
||||
end
|
||||
|
||||
assert_missing_tag("item", "RDF") do
|
||||
Parser.parse(rss, false).validate
|
||||
end
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "item", "RDF")
|
||||
<channel rdf:about="http://example.com/">
|
||||
<title>hoge</title>
|
||||
<link>http://example.com/</link>
|
||||
<description>hogehoge</description>
|
||||
<image rdf:resource="http://example.com/hoge.png" />
|
||||
<items>
|
||||
<rdf:Seq>
|
||||
</rdf:Seq>
|
||||
</items>
|
||||
</channel>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_attribute, "textinput", "rdf:resource")
|
||||
<channel rdf:about="http://example.com/">
|
||||
<title>hoge</title>
|
||||
<link>http://example.com/</link>
|
||||
<description>hogehoge</description>
|
||||
<image rdf:resource="http://example.com/hoge.png" />
|
||||
<items>
|
||||
<rdf:Seq>
|
||||
</rdf:Seq>
|
||||
</items>
|
||||
<textinput/>
|
||||
</channel>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "item", "RDF")
|
||||
<channel rdf:about="http://example.com/">
|
||||
<title>hoge</title>
|
||||
<link>http://example.com/</link>
|
||||
<description>hogehoge</description>
|
||||
<image rdf:resource="http://example.com/hoge.png" />
|
||||
<items>
|
||||
<rdf:Seq>
|
||||
</rdf:Seq>
|
||||
</items>
|
||||
<textinput rdf:resource="http://example.com/search" />
|
||||
</channel>
|
||||
EOR
|
||||
|
||||
end
|
||||
|
||||
def test_rdf_li
|
||||
|
||||
rss = make_RDF(<<-EOR)
|
||||
<channel rdf:about="http://example.com/">
|
||||
<title>hoge</title>
|
||||
<link>http://example.com/</link>
|
||||
<description>hogehoge</description>
|
||||
<image rdf:resource="http://example.com/hoge.png" />
|
||||
<items>
|
||||
<rdf:Seq>
|
||||
<rdf:li \#{rdf_li_attr}/>
|
||||
</rdf:Seq>
|
||||
</items>
|
||||
<textinput rdf:resource="http://example.com/search" />
|
||||
</channel>
|
||||
#{make_item}
|
||||
EOR
|
||||
|
||||
source = Proc.new do |rdf_li_attr|
|
||||
eval(%Q[%Q[#{rss}]], binding)
|
||||
end
|
||||
|
||||
attr = %q[resource="http://example.com/hoge"]
|
||||
assert_parse(source.call(attr), :nothing_raised)
|
||||
|
||||
attr = %q[rdf:resource="http://example.com/hoge"]
|
||||
assert_parse(source.call(attr), :nothing_raised)
|
||||
|
||||
assert_parse(source.call(""), :missing_attribute, "li", "resource")
|
||||
end
|
||||
|
||||
def test_image
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_attribute, "image", "rdf:about")
|
||||
#{make_channel}
|
||||
<image>
|
||||
</image>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "title", "image")
|
||||
#{make_channel}
|
||||
<image rdf:about="http://example.com/hoge.png">
|
||||
</image>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "url", "image")
|
||||
#{make_channel}
|
||||
<image rdf:about="http://example.com/hoge.png">
|
||||
<title>hoge</title>
|
||||
</image>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "link", "image")
|
||||
#{make_channel}
|
||||
<image rdf:about="http://example.com/hoge.png">
|
||||
<title>hoge</title>
|
||||
<url>http://example.com/hoge.png</url>
|
||||
</image>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "item", "RDF")
|
||||
#{make_channel}
|
||||
<image rdf:about="http://example.com/hoge.png">
|
||||
<title>hoge</title>
|
||||
<url>http://example.com/hoge.png</url>
|
||||
<link>http://example.com/</link>
|
||||
</image>
|
||||
EOR
|
||||
|
||||
rss = make_RDF(<<-EOR)
|
||||
#{make_channel}
|
||||
<image rdf:about="http://example.com/hoge.png">
|
||||
<link>http://example.com/</link>
|
||||
<url>http://example.com/hoge.png</url>
|
||||
<title>hoge</title>
|
||||
</image>
|
||||
EOR
|
||||
|
||||
assert_missing_tag("item", "RDF") do
|
||||
Parser.parse(rss)
|
||||
end
|
||||
|
||||
assert_missing_tag("item", "RDF") do
|
||||
Parser.parse(rss, false).validate
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
def test_item
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_attribute, "item", "rdf:about")
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
<item>
|
||||
</item>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "title", "item")
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
<item rdf:about="http://example.com/hoge.html">
|
||||
</item>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "link", "item")
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
<item rdf:about="http://example.com/hoge.html">
|
||||
<title>hoge</title>
|
||||
</item>
|
||||
EOR
|
||||
|
||||
assert_too_much_tag("title", "item") do
|
||||
Parser.parse(make_RDF(<<-EOR))
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
<item rdf:about="http://example.com/hoge.html">
|
||||
<title>hoge</title>
|
||||
<title>hoge</title>
|
||||
<link>http://example.com/hoge.html</link>
|
||||
</item>
|
||||
EOR
|
||||
end
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :nothing_raised)
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
<item rdf:about="http://example.com/hoge.html">
|
||||
<title>hoge</title>
|
||||
<link>http://example.com/hoge.html</link>
|
||||
</item>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :nothing_raised)
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
<item rdf:about="http://example.com/hoge.html">
|
||||
<title>hoge</title>
|
||||
<link>http://example.com/hoge.html</link>
|
||||
<description>hogehoge</description>
|
||||
</item>
|
||||
EOR
|
||||
|
||||
end
|
||||
|
||||
def test_textinput
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_attribute, "textinput", "rdf:about")
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
#{make_item}
|
||||
<textinput>
|
||||
</textinput>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "title", "textinput")
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
#{make_item}
|
||||
<textinput rdf:about="http://example.com/search.html">
|
||||
</textinput>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "description", "textinput")
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
#{make_item}
|
||||
<textinput rdf:about="http://example.com/search.html">
|
||||
<title>hoge</title>
|
||||
</textinput>
|
||||
EOR
|
||||
|
||||
assert_too_much_tag("title", "textinput") do
|
||||
Parser.parse(make_RDF(<<-EOR))
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
#{make_item}
|
||||
<textinput rdf:about="http://example.com/search.html">
|
||||
<title>hoge</title>
|
||||
<title>hoge</title>
|
||||
<description>hogehoge</description>
|
||||
</textinput>
|
||||
EOR
|
||||
end
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "name", "textinput")
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
#{make_item}
|
||||
<textinput rdf:about="http://example.com/search.html">
|
||||
<title>hoge</title>
|
||||
<description>hogehoge</description>
|
||||
</textinput>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "link", "textinput")
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
#{make_item}
|
||||
<textinput rdf:about="http://example.com/search.html">
|
||||
<title>hoge</title>
|
||||
<description>hogehoge</description>
|
||||
<name>key</name>
|
||||
</textinput>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :nothing_raised)
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
#{make_item}
|
||||
<textinput rdf:about="http://example.com/search.html">
|
||||
<title>hoge</title>
|
||||
<description>hogehoge</description>
|
||||
<name>key</name>
|
||||
<link>http://example.com/search.html</link>
|
||||
</textinput>
|
||||
EOR
|
||||
|
||||
end
|
||||
|
||||
def test_rss20
|
||||
|
||||
assert_parse(make_rss20(<<-EOR), :missing_tag, "channel", "rss")
|
||||
EOR
|
||||
|
||||
assert_parse(make_rss20(<<-EOR), :nothing_raised)
|
||||
#{make_channel20("")}
|
||||
EOR
|
||||
|
||||
end
|
||||
|
||||
def test_cloud20
|
||||
|
||||
attrs = [
|
||||
["domain", CLOUD_DOMAIN],
|
||||
["port", CLOUD_PORT],
|
||||
["path", CLOUD_PATH],
|
||||
["registerProcedure", CLOUD_REGISTER_PROCEDURE],
|
||||
["protocol", CLOUD_PROTOCOL],
|
||||
]
|
||||
|
||||
(attrs.size + 1).times do |i|
|
||||
missing_attr = attrs[i]
|
||||
if missing_attr
|
||||
meth = :missing_attribute
|
||||
args = ["cloud", missing_attr[0]]
|
||||
else
|
||||
meth = :nothing_raised
|
||||
args = []
|
||||
end
|
||||
|
||||
cloud_attrs = []
|
||||
attrs.each_with_index do |attr, j|
|
||||
unless i == j
|
||||
cloud_attrs << %Q[#{attr[0]}="#{attr[1]}"]
|
||||
end
|
||||
end
|
||||
|
||||
assert_parse(make_rss20(<<-EOR), meth, *args)
|
||||
#{make_channel20(%Q[<cloud #{cloud_attrs.join("\n")}/>])}
|
||||
EOR
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
def test_source20
|
||||
|
||||
assert_parse(make_rss20(<<-EOR), :missing_attribute, "source", "url")
|
||||
#{make_channel20(make_item20(%Q[<source>Example</source>]))}
|
||||
EOR
|
||||
|
||||
assert_parse(make_rss20(<<-EOR), :nothing_raised)
|
||||
#{make_channel20(make_item20(%Q[<source url="http://example.com/" />]))}
|
||||
EOR
|
||||
|
||||
assert_parse(make_rss20(<<-EOR), :nothing_raised)
|
||||
#{make_channel20(make_item20(%Q[<source url="http://example.com/">Example</source>]))}
|
||||
EOR
|
||||
end
|
||||
|
||||
def test_enclosure20
|
||||
|
||||
attrs = [
|
||||
["url", ENCLOSURE_URL],
|
||||
["length", ENCLOSURE_LENGTH],
|
||||
["type", ENCLOSURE_TYPE],
|
||||
]
|
||||
|
||||
(attrs.size + 1).times do |i|
|
||||
missing_attr = attrs[i]
|
||||
if missing_attr
|
||||
meth = :missing_attribute
|
||||
args = ["enclosure", missing_attr[0]]
|
||||
else
|
||||
meth = :nothing_raised
|
||||
args = []
|
||||
end
|
||||
|
||||
enclosure_attrs = []
|
||||
attrs.each_with_index do |attr, j|
|
||||
unless i == j
|
||||
enclosure_attrs << %Q[#{attr[0]}="#{attr[1]}"]
|
||||
end
|
||||
end
|
||||
|
||||
assert_parse(make_rss20(<<-EOR), meth, *args)
|
||||
#{make_channel20(%Q[
|
||||
#{make_item20(%Q[
|
||||
<enclosure
|
||||
#{enclosure_attrs.join("\n")} />
|
||||
])}
|
||||
])}
|
||||
EOR
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
def test_category20
|
||||
values = [nil, CATEGORY_DOMAIN]
|
||||
|
||||
values.each do |value|
|
||||
domain = ""
|
||||
domain << %Q[domain="#{value}"] if value
|
||||
|
||||
["", "Example Text"].each do |text|
|
||||
rss_src = make_rss20(<<-EOR)
|
||||
#{make_channel20(%Q[
|
||||
#{make_item20(%Q[
|
||||
<category #{domain}>#{text}</category>
|
||||
])}
|
||||
])}
|
||||
EOR
|
||||
assert_parse(rss_src, :nothing_raised)
|
||||
|
||||
rss = RSS::Parser.parse(rss_src)
|
||||
category = rss.items.last.categories.first
|
||||
assert_equal(value, category.domain)
|
||||
assert_equal(text, category.content)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_ignore
|
||||
name = "a"
|
||||
rss = make_RDF(<<-EOR)
|
||||
#{make_channel}
|
||||
#{make_item}
|
||||
<#{name}/>
|
||||
EOR
|
||||
assert_not_expected_tag(name, ::RSS::URI, "RDF") do
|
||||
Parser.parse(rss, true, false)
|
||||
end
|
||||
|
||||
uri = ""
|
||||
name = "a"
|
||||
rss = make_RDF(<<-EOR)
|
||||
#{make_channel}
|
||||
#{make_item}
|
||||
<#{name} xmlns=""/>
|
||||
EOR
|
||||
assert_parse(rss, :nothing_raised)
|
||||
assert_not_expected_tag(name, uri, "RDF") do
|
||||
Parser.parse(rss, true, false)
|
||||
end
|
||||
|
||||
uri = "http://example.com/"
|
||||
name = "a"
|
||||
rss = make_RDF(<<-EOR)
|
||||
#{make_channel}
|
||||
#{make_item}
|
||||
<x:#{name} xmlns:x="#{uri}"/>
|
||||
EOR
|
||||
assert_parse(rss, :nothing_raised)
|
||||
assert_not_expected_tag(name, uri, "RDF") do
|
||||
Parser.parse(rss, true, false)
|
||||
end
|
||||
|
||||
uri = ::RSS::URI
|
||||
name = "a"
|
||||
rss = make_RDF(<<-EOR)
|
||||
#{make_channel}
|
||||
#{make_item}
|
||||
#{make_image("<#{name}/>")}
|
||||
EOR
|
||||
assert_parse(rss, :nothing_raised)
|
||||
assert_not_expected_tag(name, uri, "image") do
|
||||
Parser.parse(rss, true, false)
|
||||
end
|
||||
|
||||
uri = CONTENT_URI
|
||||
name = "encoded"
|
||||
elem = "<#{name} xmlns='#{uri}'/>"
|
||||
rss = make_RDF(<<-EOR)
|
||||
#{make_channel}
|
||||
#{make_item}
|
||||
#{make_image(elem)}
|
||||
EOR
|
||||
assert_parse(rss, :nothing_raised)
|
||||
assert_not_expected_tag(name, uri, "image") do
|
||||
Parser.parse(rss, true, false)
|
||||
end
|
||||
end
|
||||
|
||||
def test_default_parser
|
||||
assert_nothing_raised do
|
||||
|
|
@ -685,7 +56,5 @@ EOR
|
|||
assert_nil(RSS::Parser.parse(garbage_rss_file))
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
503
test/rss/test_parser_1.0.rb
Normal file
503
test/rss/test_parser_1.0.rb
Normal file
|
|
@ -0,0 +1,503 @@
|
|||
require "rss-testcase"
|
||||
|
||||
require "rss/1.0"
|
||||
require "rss/dublincore"
|
||||
|
||||
module RSS
|
||||
class TestParser10 < TestCase
|
||||
def test_RDF
|
||||
assert_ns("", RDF::URI) do
|
||||
Parser.parse(<<-EOR)
|
||||
#{make_xmldecl}
|
||||
<RDF/>
|
||||
EOR
|
||||
end
|
||||
|
||||
assert_ns("", RDF::URI) do
|
||||
Parser.parse(<<-EOR)
|
||||
#{make_xmldecl}
|
||||
<RDF xmlns="hoge"/>
|
||||
EOR
|
||||
end
|
||||
|
||||
assert_ns("rdf", RDF::URI) do
|
||||
Parser.parse(<<-EOR)
|
||||
#{make_xmldecl}
|
||||
<rdf:RDF xmlns:rdf="hoge"/>
|
||||
EOR
|
||||
end
|
||||
|
||||
assert_parse(<<-EOR, :missing_tag, "channel", "RDF")
|
||||
#{make_xmldecl}
|
||||
<rdf:RDF xmlns:rdf="#{RSS::RDF::URI}"/>
|
||||
EOR
|
||||
|
||||
assert_parse(<<-EOR, :missing_tag, "channel", "RDF")
|
||||
#{make_xmldecl}
|
||||
<RDF xmlns="#{RSS::RDF::URI}"/>
|
||||
EOR
|
||||
|
||||
assert_parse(<<-EOR, :missing_tag, "channel", "RDF")
|
||||
#{make_xmldecl}
|
||||
<RDF xmlns="#{RSS::RDF::URI}"/>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "item", "RDF")
|
||||
#{make_channel}
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "item", "RDF")
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "item", "RDF")
|
||||
#{make_channel}
|
||||
#{make_textinput}
|
||||
EOR
|
||||
|
||||
assert_too_much_tag("image", "RDF") do
|
||||
Parser.parse(make_RDF(<<-EOR))
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
#{make_image}
|
||||
#{make_item}
|
||||
#{make_textinput}
|
||||
EOR
|
||||
end
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :nothing_raised)
|
||||
#{make_channel}
|
||||
#{make_item}
|
||||
#{make_image}
|
||||
#{make_textinput}
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :nothing_raised)
|
||||
#{make_channel}
|
||||
#{make_item}
|
||||
#{make_textinput}
|
||||
#{make_image}
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :nothing_raised)
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
#{make_item}
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :nothing_raised)
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
#{make_item}
|
||||
#{make_textinput}
|
||||
EOR
|
||||
|
||||
1.step(15, 3) do |i|
|
||||
rss = make_RDF() do
|
||||
res = make_channel
|
||||
i.times { res << make_item }
|
||||
res
|
||||
end
|
||||
assert_parse(rss, :nothing_raised)
|
||||
end
|
||||
end
|
||||
|
||||
def test_undefined_entity
|
||||
return unless RSS::Parser.default_parser.raise_for_undefined_entity?
|
||||
assert_parse(make_RDF(<<-EOR), :raises, RSS::NotWellFormedError)
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
<item rdf:about="#{RDF_ABOUT}">
|
||||
<title>#{TITLE_VALUE} &UNKNOWN_ENTITY;</title>
|
||||
<link>#{LINK_VALUE}</link>
|
||||
<description>#{DESCRIPTION_VALUE}</description>
|
||||
</item>
|
||||
#{make_textinput}
|
||||
EOR
|
||||
end
|
||||
|
||||
def test_channel
|
||||
assert_parse(make_RDF(<<-EOR), :missing_attribute, "channel", "rdf:about")
|
||||
<channel />
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "title", "channel")
|
||||
<channel rdf:about="http://example.com/"/>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "link", "channel")
|
||||
<channel rdf:about="http://example.com/">
|
||||
<title>hoge</title>
|
||||
</channel>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<EOR), :missing_tag, "description", "channel")
|
||||
<channel rdf:about="http://example.com/">
|
||||
<title>hoge</title>
|
||||
<link>http://example.com/</link>
|
||||
</channel>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "items", "channel")
|
||||
<channel rdf:about="http://example.com/">
|
||||
<title>hoge</title>
|
||||
<link>http://example.com/</link>
|
||||
<description>hogehoge</description>
|
||||
</channel>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_attribute, "image", "rdf:resource")
|
||||
<channel rdf:about="http://example.com/">
|
||||
<title>hoge</title>
|
||||
<link>http://example.com/</link>
|
||||
<description>hogehoge</description>
|
||||
<image/>
|
||||
</channel>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "items", "channel")
|
||||
<channel rdf:about="http://example.com/">
|
||||
<title>hoge</title>
|
||||
<link>http://example.com/</link>
|
||||
<description>hogehoge</description>
|
||||
<image rdf:resource="http://example.com/hoge.png" />
|
||||
</channel>
|
||||
EOR
|
||||
|
||||
rss = make_RDF(<<-EOR)
|
||||
<channel rdf:about="http://example.com/">
|
||||
<title>hoge</title>
|
||||
<link>http://example.com/</link>
|
||||
<description>hogehoge</description>
|
||||
<image rdf:resource="http://example.com/hoge.png" />
|
||||
<items/>
|
||||
</channel>
|
||||
EOR
|
||||
|
||||
assert_missing_tag("Seq", "items") do
|
||||
Parser.parse(rss)
|
||||
end
|
||||
|
||||
assert_missing_tag("item", "RDF") do
|
||||
Parser.parse(rss, false).validate
|
||||
end
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "item", "RDF")
|
||||
<channel rdf:about="http://example.com/">
|
||||
<title>hoge</title>
|
||||
<link>http://example.com/</link>
|
||||
<description>hogehoge</description>
|
||||
<image rdf:resource="http://example.com/hoge.png" />
|
||||
<items>
|
||||
<rdf:Seq>
|
||||
</rdf:Seq>
|
||||
</items>
|
||||
</channel>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_attribute, "textinput", "rdf:resource")
|
||||
<channel rdf:about="http://example.com/">
|
||||
<title>hoge</title>
|
||||
<link>http://example.com/</link>
|
||||
<description>hogehoge</description>
|
||||
<image rdf:resource="http://example.com/hoge.png" />
|
||||
<items>
|
||||
<rdf:Seq>
|
||||
</rdf:Seq>
|
||||
</items>
|
||||
<textinput/>
|
||||
</channel>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "item", "RDF")
|
||||
<channel rdf:about="http://example.com/">
|
||||
<title>hoge</title>
|
||||
<link>http://example.com/</link>
|
||||
<description>hogehoge</description>
|
||||
<image rdf:resource="http://example.com/hoge.png" />
|
||||
<items>
|
||||
<rdf:Seq>
|
||||
</rdf:Seq>
|
||||
</items>
|
||||
<textinput rdf:resource="http://example.com/search" />
|
||||
</channel>
|
||||
EOR
|
||||
end
|
||||
|
||||
def test_rdf_li
|
||||
rss = make_RDF(<<-EOR)
|
||||
<channel rdf:about="http://example.com/">
|
||||
<title>hoge</title>
|
||||
<link>http://example.com/</link>
|
||||
<description>hogehoge</description>
|
||||
<image rdf:resource="http://example.com/hoge.png" />
|
||||
<items>
|
||||
<rdf:Seq>
|
||||
<rdf:li \#{rdf_li_attr}/>
|
||||
</rdf:Seq>
|
||||
</items>
|
||||
<textinput rdf:resource="http://example.com/search" />
|
||||
</channel>
|
||||
#{make_item}
|
||||
EOR
|
||||
|
||||
source = Proc.new do |rdf_li_attr|
|
||||
eval(%Q[%Q[#{rss}]], binding)
|
||||
end
|
||||
|
||||
attr = %q[resource="http://example.com/hoge"]
|
||||
assert_parse(source.call(attr), :nothing_raised)
|
||||
|
||||
attr = %q[rdf:resource="http://example.com/hoge"]
|
||||
assert_parse(source.call(attr), :nothing_raised)
|
||||
|
||||
assert_parse(source.call(""), :missing_attribute, "li", "resource")
|
||||
end
|
||||
|
||||
def test_image
|
||||
assert_parse(make_RDF(<<-EOR), :missing_attribute, "image", "rdf:about")
|
||||
#{make_channel}
|
||||
<image>
|
||||
</image>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "title", "image")
|
||||
#{make_channel}
|
||||
<image rdf:about="http://example.com/hoge.png">
|
||||
</image>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "url", "image")
|
||||
#{make_channel}
|
||||
<image rdf:about="http://example.com/hoge.png">
|
||||
<title>hoge</title>
|
||||
</image>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "link", "image")
|
||||
#{make_channel}
|
||||
<image rdf:about="http://example.com/hoge.png">
|
||||
<title>hoge</title>
|
||||
<url>http://example.com/hoge.png</url>
|
||||
</image>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "item", "RDF")
|
||||
#{make_channel}
|
||||
<image rdf:about="http://example.com/hoge.png">
|
||||
<title>hoge</title>
|
||||
<url>http://example.com/hoge.png</url>
|
||||
<link>http://example.com/</link>
|
||||
</image>
|
||||
EOR
|
||||
|
||||
rss = make_RDF(<<-EOR)
|
||||
#{make_channel}
|
||||
<image rdf:about="http://example.com/hoge.png">
|
||||
<link>http://example.com/</link>
|
||||
<url>http://example.com/hoge.png</url>
|
||||
<title>hoge</title>
|
||||
</image>
|
||||
EOR
|
||||
|
||||
assert_missing_tag("item", "RDF") do
|
||||
Parser.parse(rss)
|
||||
end
|
||||
|
||||
assert_missing_tag("item", "RDF") do
|
||||
Parser.parse(rss, false).validate
|
||||
end
|
||||
end
|
||||
|
||||
def test_item
|
||||
assert_parse(make_RDF(<<-EOR), :missing_attribute, "item", "rdf:about")
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
<item>
|
||||
</item>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "title", "item")
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
<item rdf:about="http://example.com/hoge.html">
|
||||
</item>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "link", "item")
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
<item rdf:about="http://example.com/hoge.html">
|
||||
<title>hoge</title>
|
||||
</item>
|
||||
EOR
|
||||
|
||||
assert_too_much_tag("title", "item") do
|
||||
Parser.parse(make_RDF(<<-EOR))
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
<item rdf:about="http://example.com/hoge.html">
|
||||
<title>hoge</title>
|
||||
<title>hoge</title>
|
||||
<link>http://example.com/hoge.html</link>
|
||||
</item>
|
||||
EOR
|
||||
end
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :nothing_raised)
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
<item rdf:about="http://example.com/hoge.html">
|
||||
<title>hoge</title>
|
||||
<link>http://example.com/hoge.html</link>
|
||||
</item>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :nothing_raised)
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
<item rdf:about="http://example.com/hoge.html">
|
||||
<title>hoge</title>
|
||||
<link>http://example.com/hoge.html</link>
|
||||
<description>hogehoge</description>
|
||||
</item>
|
||||
EOR
|
||||
end
|
||||
|
||||
def test_textinput
|
||||
assert_parse(make_RDF(<<-EOR), :missing_attribute, "textinput", "rdf:about")
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
#{make_item}
|
||||
<textinput>
|
||||
</textinput>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "title", "textinput")
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
#{make_item}
|
||||
<textinput rdf:about="http://example.com/search.html">
|
||||
</textinput>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "description", "textinput")
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
#{make_item}
|
||||
<textinput rdf:about="http://example.com/search.html">
|
||||
<title>hoge</title>
|
||||
</textinput>
|
||||
EOR
|
||||
|
||||
assert_too_much_tag("title", "textinput") do
|
||||
Parser.parse(make_RDF(<<-EOR))
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
#{make_item}
|
||||
<textinput rdf:about="http://example.com/search.html">
|
||||
<title>hoge</title>
|
||||
<title>hoge</title>
|
||||
<description>hogehoge</description>
|
||||
</textinput>
|
||||
EOR
|
||||
end
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "name", "textinput")
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
#{make_item}
|
||||
<textinput rdf:about="http://example.com/search.html">
|
||||
<title>hoge</title>
|
||||
<description>hogehoge</description>
|
||||
</textinput>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :missing_tag, "link", "textinput")
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
#{make_item}
|
||||
<textinput rdf:about="http://example.com/search.html">
|
||||
<title>hoge</title>
|
||||
<description>hogehoge</description>
|
||||
<name>key</name>
|
||||
</textinput>
|
||||
EOR
|
||||
|
||||
assert_parse(make_RDF(<<-EOR), :nothing_raised)
|
||||
#{make_channel}
|
||||
#{make_image}
|
||||
#{make_item}
|
||||
<textinput rdf:about="http://example.com/search.html">
|
||||
<title>hoge</title>
|
||||
<description>hogehoge</description>
|
||||
<name>key</name>
|
||||
<link>http://example.com/search.html</link>
|
||||
</textinput>
|
||||
EOR
|
||||
end
|
||||
|
||||
def test_ignore
|
||||
name = "a"
|
||||
rss = make_RDF(<<-EOR)
|
||||
#{make_channel}
|
||||
#{make_item}
|
||||
<#{name}/>
|
||||
EOR
|
||||
assert_not_expected_tag(name, ::RSS::URI, "RDF") do
|
||||
Parser.parse(rss, true, false)
|
||||
end
|
||||
|
||||
uri = ""
|
||||
name = "a"
|
||||
rss = make_RDF(<<-EOR)
|
||||
#{make_channel}
|
||||
#{make_item}
|
||||
<#{name} xmlns=""/>
|
||||
EOR
|
||||
assert_parse(rss, :nothing_raised)
|
||||
assert_not_expected_tag(name, uri, "RDF") do
|
||||
Parser.parse(rss, true, false)
|
||||
end
|
||||
|
||||
uri = "http://example.com/"
|
||||
name = "a"
|
||||
rss = make_RDF(<<-EOR)
|
||||
#{make_channel}
|
||||
#{make_item}
|
||||
<x:#{name} xmlns:x="#{uri}"/>
|
||||
EOR
|
||||
assert_parse(rss, :nothing_raised)
|
||||
assert_not_expected_tag(name, uri, "RDF") do
|
||||
Parser.parse(rss, true, false)
|
||||
end
|
||||
|
||||
uri = ::RSS::URI
|
||||
name = "a"
|
||||
rss = make_RDF(<<-EOR)
|
||||
#{make_channel}
|
||||
#{make_item}
|
||||
#{make_image("<#{name}/>")}
|
||||
EOR
|
||||
assert_parse(rss, :nothing_raised)
|
||||
assert_not_expected_tag(name, uri, "image") do
|
||||
Parser.parse(rss, true, false)
|
||||
end
|
||||
|
||||
uri = CONTENT_URI
|
||||
name = "encoded"
|
||||
elem = "<#{name} xmlns='#{uri}'/>"
|
||||
rss = make_RDF(<<-EOR)
|
||||
#{make_channel}
|
||||
#{make_item}
|
||||
#{make_image(elem)}
|
||||
EOR
|
||||
assert_parse(rss, :nothing_raised)
|
||||
assert_not_expected_tag(name, uri, "image") do
|
||||
Parser.parse(rss, true, false)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
122
test/rss/test_parser_2.0.rb
Normal file
122
test/rss/test_parser_2.0.rb
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
require "rss-testcase"
|
||||
|
||||
require "rss/2.0"
|
||||
|
||||
module RSS
|
||||
class TestParser20 < TestCase
|
||||
def test_rss20
|
||||
assert_parse(make_rss20(<<-EOR), :missing_tag, "channel", "rss")
|
||||
EOR
|
||||
|
||||
assert_parse(make_rss20(<<-EOR), :nothing_raised)
|
||||
#{make_channel20("")}
|
||||
EOR
|
||||
end
|
||||
|
||||
def test_cloud20
|
||||
attrs = [
|
||||
["domain", CLOUD_DOMAIN],
|
||||
["port", CLOUD_PORT],
|
||||
["path", CLOUD_PATH],
|
||||
["registerProcedure", CLOUD_REGISTER_PROCEDURE],
|
||||
["protocol", CLOUD_PROTOCOL],
|
||||
]
|
||||
|
||||
(attrs.size + 1).times do |i|
|
||||
missing_attr = attrs[i]
|
||||
if missing_attr
|
||||
meth = :missing_attribute
|
||||
args = ["cloud", missing_attr[0]]
|
||||
else
|
||||
meth = :nothing_raised
|
||||
args = []
|
||||
end
|
||||
|
||||
cloud_attrs = []
|
||||
attrs.each_with_index do |attr, j|
|
||||
unless i == j
|
||||
cloud_attrs << %Q[#{attr[0]}="#{attr[1]}"]
|
||||
end
|
||||
end
|
||||
|
||||
assert_parse(make_rss20(<<-EOR), meth, *args)
|
||||
#{make_channel20(%Q[<cloud #{cloud_attrs.join("\n")}/>])}
|
||||
EOR
|
||||
end
|
||||
end
|
||||
|
||||
def test_source20
|
||||
assert_parse(make_rss20(<<-EOR), :missing_attribute, "source", "url")
|
||||
#{make_channel20(make_item20(%Q[<source>Example</source>]))}
|
||||
EOR
|
||||
|
||||
assert_parse(make_rss20(<<-EOR), :nothing_raised)
|
||||
#{make_channel20(make_item20(%Q[<source url="http://example.com/" />]))}
|
||||
EOR
|
||||
|
||||
assert_parse(make_rss20(<<-EOR), :nothing_raised)
|
||||
#{make_channel20(make_item20(%Q[<source url="http://example.com/">Example</source>]))}
|
||||
EOR
|
||||
end
|
||||
|
||||
def test_enclosure20
|
||||
attrs = [
|
||||
["url", ENCLOSURE_URL],
|
||||
["length", ENCLOSURE_LENGTH],
|
||||
["type", ENCLOSURE_TYPE],
|
||||
]
|
||||
|
||||
(attrs.size + 1).times do |i|
|
||||
missing_attr = attrs[i]
|
||||
if missing_attr
|
||||
meth = :missing_attribute
|
||||
args = ["enclosure", missing_attr[0]]
|
||||
else
|
||||
meth = :nothing_raised
|
||||
args = []
|
||||
end
|
||||
|
||||
enclosure_attrs = []
|
||||
attrs.each_with_index do |attr, j|
|
||||
unless i == j
|
||||
enclosure_attrs << %Q[#{attr[0]}="#{attr[1]}"]
|
||||
end
|
||||
end
|
||||
|
||||
assert_parse(make_rss20(<<-EOR), meth, *args)
|
||||
#{make_channel20(%Q[
|
||||
#{make_item20(%Q[
|
||||
<enclosure
|
||||
#{enclosure_attrs.join("\n")} />
|
||||
])}
|
||||
])}
|
||||
EOR
|
||||
end
|
||||
end
|
||||
|
||||
def test_category20
|
||||
values = [nil, CATEGORY_DOMAIN]
|
||||
values.each do |value|
|
||||
domain = ""
|
||||
domain << %Q[domain="#{value}"] if value
|
||||
|
||||
["", "Example Text"].each do |text|
|
||||
rss_src = make_rss20(<<-EOR)
|
||||
#{make_channel20(%Q[
|
||||
#{make_item20(%Q[
|
||||
<category #{domain}>#{text}</category>
|
||||
])}
|
||||
])}
|
||||
EOR
|
||||
assert_parse(rss_src, :nothing_raised)
|
||||
|
||||
rss = RSS::Parser.parse(rss_src)
|
||||
category = rss.items.last.categories.first
|
||||
assert_equal(value, category.domain)
|
||||
assert_equal(text, category.content)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue