diff options
Diffstat (limited to 'jni/ruby/test/rss/rss-testcase.rb')
-rw-r--r-- | jni/ruby/test/rss/rss-testcase.rb | 478 |
1 files changed, 478 insertions, 0 deletions
diff --git a/jni/ruby/test/rss/rss-testcase.rb b/jni/ruby/test/rss/rss-testcase.rb new file mode 100644 index 0000000..2e39433 --- /dev/null +++ b/jni/ruby/test/rss/rss-testcase.rb @@ -0,0 +1,478 @@ +require "erb" + +require "test/unit" +require_relative '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>\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 |