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