diff options
author | kou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-06-20 13:12:00 +0000 |
---|---|---|
committer | kou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-06-20 13:12:00 +0000 |
commit | b205dba48f2fa526207ab104dc0ef8e6d4ea1ca2 (patch) | |
tree | 2b52f6a278c91c4c6f7d3b58a46d3ff9b1bf0df3 /test | |
parent | 7625cd5cfb3ea4609db79a1ee959f7186fa8b535 (diff) |
* 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
Diffstat (limited to 'test')
-rw-r--r-- | test/rss/test_parser.rb | 631 | ||||
-rw-r--r-- | test/rss/test_parser_1.0.rb | 503 | ||||
-rw-r--r-- | test/rss/test_parser_2.0.rb | 122 |
3 files changed, 625 insertions, 631 deletions
diff --git a/test/rss/test_parser.rb b/test/rss/test_parser.rb index f204b88933..49b441bf96 100644 --- a/test/rss/test_parser.rb +++ b/test/rss/test_parser.rb @@ -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 - diff --git a/test/rss/test_parser_1.0.rb b/test/rss/test_parser_1.0.rb new file mode 100644 index 0000000000..472602b04a --- /dev/null +++ b/test/rss/test_parser_1.0.rb @@ -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 + diff --git a/test/rss/test_parser_2.0.rb b/test/rss/test_parser_2.0.rb new file mode 100644 index 0000000000..249347d3dc --- /dev/null +++ b/test/rss/test_parser_2.0.rb @@ -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 + |