/source/ruby-1.9.2-p180/test/rss/rss-testcase.rb
Ruby | 478 lines | 380 code | 69 blank | 29 comment | 5 complexity | e92143a752873ccbce64fe9ac74b477b MD5 | raw file
Possible License(s): Apache-2.0, BSD-3-Clause
- require "erb"
- require "test/unit"
- require 'rss-assertions'
- require "rss"
- module RSS
- class TestCase < Test::Unit::TestCase
- include ERB::Util
- include RSS
- include Assertions
- XMLDECL_VERSION = "1.0"
- XMLDECL_ENCODING = "UTF-8"
- XMLDECL_STANDALONE = "no"
- RDF_ABOUT = "http://www.xml.com/xml/news.rss"
- RDF_RESOURCE = "http://xml.com/universal/images/xml_tiny.gif"
- TITLE_VALUE = "XML.com"
- LINK_VALUE = "http://xml.com/pub"
- URL_VALUE = "http://xml.com/universal/images/xml_tiny.gif"
- NAME_VALUE = "hogehoge"
- LANGUAGE_VALUE = "ja"
- DESCRIPTION_VALUE = "
- XML.com features a rich mix of information and services
- for the XML community.
- "
- RESOURCES = [
- "http://xml.com/pub/2000/08/09/xslt/xslt.html",
- "http://xml.com/pub/2000/08/09/rdfdb/index.html",
- ]
- CLOUD_DOMAIN = "data.ourfavoritesongs.com"
- CLOUD_PORT = "80"
- CLOUD_PATH = "/RPC2"
- CLOUD_REGISTER_PROCEDURE = "ourFavoriteSongs.rssPleaseNotify"
- CLOUD_PROTOCOL = "xml-rpc"
- ENCLOSURE_URL = "http://www.scripting.com/mp3s/weatherReportSuite.mp3"
- ENCLOSURE_LENGTH = "12216320"
- ENCLOSURE_TYPE = "audio/mpeg"
- CATEGORY_DOMAIN = "http://www.superopendirectory.com/"
- FEED_TITLE = "dive into mark"
- FEED_UPDATED = "2003-12-13T18:30:02Z"
- FEED_AUTHOR_NAME = "John Doe"
- FEED_ID = "urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6"
- ENTRY_TITLE = "Atom-Powered Robots Run Amok"
- ENTRY_LINK = "http://example.org/2003/12/13/atom03"
- ENTRY_ID = "urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a"
- ENTRY_UPDATED = "2003-12-13T18:30:02Z"
- ENTRY_SUMMARY = "Some text."
- t = Time.iso8601("2000-01-01T12:00:05+00:00")
- class << t
- alias_method(:to_s, :iso8601)
- end
- DC_ELEMENTS = {
- :title => "hoge",
- :description =>
- " XML is placing increasingly heavy loads on
- the existing technical infrastructure of the Internet.",
- :creator => "Rael Dornfest (mailto:rael@oreilly.com)",
- :subject => "XML",
- :publisher => "The O'Reilly Network",
- :contributor => "hogehoge",
- :type => "fugafuga",
- :format => "hohoho",
- :identifier => "fufufu",
- :source => "barbar",
- :language => "ja",
- :relation => "cococo",
- :rights => "Copyright (c) 2000 O'Reilly & Associates, Inc.",
- :date => t,
- }
- DC_NODES = DC_ELEMENTS.collect do |name, value|
- "<#{DC_PREFIX}:#{name}>#{value}</#{DC_PREFIX}:#{name}>"
- end.join("\n")
- def default_test
- # This class isn't tested
- end
- private
- def make_xmldecl(v=XMLDECL_VERSION, e=XMLDECL_ENCODING, s=XMLDECL_STANDALONE)
- rv = "<?xml version='#{v}'"
- rv << " encoding='#{e}'" if e
- rv << " standalone='#{s}'" if s
- rv << "?>"
- rv
- end
- def make_RDF(content=nil, xmlns=[])
- <<-EORSS
- #{make_xmldecl}
- <rdf:RDF xmlns="#{URI}" xmlns:rdf="#{RDF::URI}"
- #{xmlns.collect {|pre, uri| "xmlns:#{pre}='#{uri}'"}.join(' ')}>
- #{block_given? ? yield : content}
- </rdf:RDF>
- EORSS
- end
- def make_channel(content=nil)
- <<-EOC
- <channel rdf:about="#{RDF_ABOUT}">
- <title>#{TITLE_VALUE}</title>
- <link>#{LINK_VALUE}</link>
- <description>#{DESCRIPTION_VALUE}</description>
- <image rdf:resource="#{RDF_RESOURCE}" />
- <items>
- <rdf:Seq>
- #{RESOURCES.collect do |res| '<rdf:li resource="' + res + '" />' end.join("\n")}
- </rdf:Seq>
- </items>
- <textinput rdf:resource="#{RDF_RESOURCE}" />
- #{block_given? ? yield : content}
- </channel>
- EOC
- end
- def make_image(content=nil)
- <<-EOI
- <image rdf:about="#{RDF_ABOUT}">
- <title>#{TITLE_VALUE}</title>
- <url>#{URL_VALUE}</url>
- <link>#{LINK_VALUE}</link>
- #{block_given? ? yield : content}
- </image>
- EOI
- end
- def make_item(content=nil)
- <<-EOI
- <item rdf:about="#{RDF_ABOUT}">
- <title>#{TITLE_VALUE}</title>
- <link>#{LINK_VALUE}</link>
- <description>#{DESCRIPTION_VALUE}</description>
- #{block_given? ? yield : content}
- </item>
- EOI
- end
- def make_textinput(content=nil)
- <<-EOT
- <textinput rdf:about="#{RDF_ABOUT}">
- <title>#{TITLE_VALUE}</title>
- <description>#{DESCRIPTION_VALUE}</description>
- <name>#{NAME_VALUE}</name>
- <link>#{LINK_VALUE}</link>
- #{block_given? ? yield : content}
- </textinput>
- EOT
- end
- def make_sample_RDF
- make_RDF(<<-EOR)
- #{make_channel}
- #{make_image}
- #{make_item}
- #{make_textinput}
- EOR
- end
- def make_rss20(content=nil, xmlns=[])
- <<-EORSS
- #{make_xmldecl}
- <rss version="2.0"
- #{xmlns.collect {|pre, uri| "xmlns:#{pre}='#{uri}'"}.join(' ')}>
- #{block_given? ? yield : content}
- </rss>
- EORSS
- end
- def make_sample_items20
- RESOURCES.collect do |res|
- elems = ["<link>#{res}</link>"]
- elems << "<title>title of #{res}</title>"
- elems = elems.join("\n")
- item = "<item>\n#{elems}\n</item>"
- end.join("\n")
- end
- def make_channel20(content=nil)
- <<-EOC
- <channel>
- <title>#{TITLE_VALUE}</title>
- <link>#{LINK_VALUE}</link>
- <description>#{DESCRIPTION_VALUE}</description>
- <language>#{LANGUAGE_VALUE}</language>
- <image>
- <url>#{RDF_RESOURCE}</url>
- <title>#{TITLE_VALUE}</title>
- <link>#{LINK_VALUE}</link>
- </image>
- #{make_sample_items20}
- <textInput>
- <title>#{TITLE_VALUE}</title>
- <description>#{DESCRIPTION_VALUE}</description>
- <name>#{NAME_VALUE}</name>
- <link>#{RDF_RESOURCE}</link>
- </textInput>
- #{block_given? ? yield : content}
- </channel>
- EOC
- end
- def make_item20(content=nil)
- <<-EOI
- <item>
- <title>#{TITLE_VALUE}</title>
- <link>#{LINK_VALUE}</link>
- <description>#{DESCRIPTION_VALUE}</description>
- #{block_given? ? yield : content}
- </item>
- EOI
- end
- def make_cloud20
- <<-EOC
- <cloud
- domain="#{CLOUD_DOMAIN}"
- port="#{CLOUD_PORT}"
- path="#{CLOUD_PATH}"
- registerProcedure="#{CLOUD_REGISTER_PROCEDURE}"
- protocol="#{CLOUD_PROTOCOL}" />
- EOC
- end
- def make_sample_rss20
- make_rss20(<<-EOR)
- #{make_channel20}
- EOR
- end
- def make_feed_without_entry(content=nil, xmlns=[])
- <<-EOA
- <feed xmlns="#{Atom::URI}"
- #{xmlns.collect {|pre, uri| "xmlns:#{pre}='#{uri}'"}.join(' ')}>
- <id>#{FEED_ID}</id>
- <title>#{FEED_TITLE}</title>
- <updated>#{FEED_UPDATED}</updated>
- <author>
- <name>#{FEED_AUTHOR_NAME}</name>
- </author>
- #{block_given? ? yield : content}
- </feed>
- EOA
- end
- def make_entry(content=nil)
- <<-EOA
- <entry>
- <title>#{ENTRY_TITLE}</title>
- <id>#{ENTRY_ID}</id>
- <updated>#{ENTRY_UPDATED}</updated>
- #{block_given? ? yield : content}
- </entry>
- EOA
- end
- def make_feed_with_open_entry(content=nil, xmlns=[], &block)
- make_feed_without_entry(<<-EOA, xmlns)
- #{make_entry(content, &block)}
- EOA
- end
- def make_feed_with_open_entry_source(content=nil, xmlns=[])
- make_feed_with_open_entry(<<-EOA, xmlns)
- <source>
- #{block_given? ? yield : content}
- </source>
- EOA
- end
- def make_feed(content=nil, xmlns=[])
- make_feed_without_entry(<<-EOA, xmlns)
- <entry>
- <title>#{ENTRY_TITLE}</title>
- <link href="#{ENTRY_LINK}"/>
- <id>#{ENTRY_ID}</id>
- <updated>#{ENTRY_UPDATED}</updated>
- <summary>#{ENTRY_SUMMARY}</summary>
- </entry>
- #{block_given? ? yield : content}
- EOA
- end
- def make_entry_document(content=nil, xmlns=[])
- <<-EOA
- <entry xmlns="#{Atom::URI}"
- #{xmlns.collect {|pre, uri| "xmlns:#{pre}='#{uri}'"}.join(' ')}>
- <id>#{ENTRY_ID}</id>
- <title>#{ENTRY_TITLE}</title>
- <updated>#{ENTRY_UPDATED}</updated>
- <author>
- <name>#{FEED_AUTHOR_NAME}</name>
- </author>
- #{block_given? ? yield : content}
- </entry>
- EOA
- end
- def make_entry_document_with_open_source(content=nil, xmlns=[])
- make_entry_document(<<-EOA, xmlns)
- <source>
- #{block_given? ? yield : content}
- </source>
- EOA
- end
- def make_element(elem_name, attrs, contents)
- attrs_str = attrs.collect do |name, value|
- "#{h name}='#{h value}'"
- end.join(" ")
- attrs_str = " #{attrs_str}" unless attrs_str.empty?
- if contents.is_a?(String)
- contents_str = h(contents)
- else
- contents_str = contents.collect do |name, value|
- "#{Element::INDENT}<#{h name}>#{h value}</#{h name}>"
- end.join("\n")
- contents_str = "\n#{contents_str}\n"
- end
- "<#{h elem_name}#{attrs_str}>#{contents_str}</#{h elem_name}>"
- end
- def xmlns_container(xmlns_decls, content)
- attributes = xmlns_decls.collect do |prefix, uri|
- "xmlns:#{h prefix}=\"#{h uri}\""
- end.join(" ")
- "<dummy #{attributes}>#{content}</dummy>"
- end
- private
- def setup_rss10(rdf)
- assert_equal("", rdf.to_s)
- channel = RDF::Channel.new
- assert_equal("", channel.to_s)
- channel.about = "http://example.com/index.rdf"
- channel.title = "title"
- channel.link = "http://example.com/"
- channel.description = "description"
- assert_equal("", channel.to_s)
- item_title = "item title"
- item_link = "http://example.com/item"
- channel.items = RDF::Channel::Items.new
- channel.items.Seq.lis << RDF::Channel::Items::Seq::Li.new(item_link)
- assert_not_equal("", channel.to_s)
- rdf.channel = channel
- assert_equal("", rdf.to_s)
- item = RDF::Item.new
- item.title = item_title
- item.link = item_link
- item.about = item_link
- rdf.items << item
- assert_not_equal("", rdf.to_s)
- end
- def setup_rss20(rss)
- assert_equal("", rss.to_s)
- channel = Rss::Channel.new
- assert_equal("", channel.to_s)
- channel.title = "title"
- channel.link = "http://example.com/"
- channel.description = "description"
- assert_not_equal("", channel.to_s)
- rss.channel = channel
- assert_not_equal("", rss.to_s)
- end
- def setup_dummy_channel(maker)
- about = "http://hoge.com"
- title = "fugafuga"
- link = "http://hoge.com/feed.xml"
- description = "fugafugafugafuga"
- language = "ja"
- maker.channel.about = about
- maker.channel.title = title
- maker.channel.link = link
- maker.channel.description = description
- maker.channel.language = language
- end
- def setup_dummy_channel_atom(maker)
- updated = Time.now
- author = "Foo"
- setup_dummy_channel(maker)
- maker.channel.links.first.rel = "self"
- maker.channel.links.first.type = "application/atom+xml"
- maker.channel.updated = updated
- maker.channel.author = author
- end
- def setup_dummy_image(maker)
- title = "fugafuga"
- link = "http://hoge.com"
- url = "http://hoge.com/hoge.png"
- maker.channel.link = link if maker.channel.link.nil?
- maker.image.title = title
- maker.image.url = url
- end
- def setup_dummy_textinput(maker)
- title = "fugafuga"
- description = "text hoge fuga"
- name = "hoge"
- link = "http://hoge.com/search.cgi"
- maker.textinput.title = title
- maker.textinput.description = description
- maker.textinput.name = name
- maker.textinput.link = link
- end
- def setup_dummy_item(maker)
- title = "TITLE"
- link = "http://hoge.com/"
- item = maker.items.new_item
- item.title = title
- item.link = link
- end
- def setup_dummy_item_atom(maker)
- setup_dummy_item(maker)
- item = maker.items.first
- item.id = "http://example.net/xxx"
- item.updated = Time.now
- end
- def setup_taxo_topic(target, topics)
- topics.each do |topic|
- taxo_topic = target.taxo_topics.new_taxo_topic
- topic.each do |name, value|
- case name
- when :link
- taxo_topic.taxo_link = value
- when :topics
- value.each do |t|
- taxo_topic.taxo_topics << t
- end
- else
- dc_elems = taxo_topic.__send__("dc_#{name}s")
- dc_elem = dc_elems.__send__("new_#{name}")
- dc_elem.value = value
- end
- end
- end
- end
- end
- end