From fcbf63e62c627deae76c1b8cb8c0876c536ed811 Mon Sep 17 00:00:00 2001 From: Jari Vetoniemi Date: Mon, 16 Mar 2020 18:49:26 +0900 Subject: Fresh start --- jni/ruby/test/rss/test_2.0.rb | 411 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 411 insertions(+) create mode 100644 jni/ruby/test/rss/test_2.0.rb (limited to 'jni/ruby/test/rss/test_2.0.rb') diff --git a/jni/ruby/test/rss/test_2.0.rb b/jni/ruby/test/rss/test_2.0.rb new file mode 100644 index 0000000..37285ce --- /dev/null +++ b/jni/ruby/test/rss/test_2.0.rb @@ -0,0 +1,411 @@ +require "rexml/document" + +require_relative "rss-testcase" + +module RSS + class TestRSS20Core < TestCase + + def setup + @rss_version = "2.0" + end + + def test_Rss + version = "1.0" + encoding = "UTF-8" + standalone = false + + rss = Rss.new(@rss_version, version, encoding, standalone) + setup_rss20(rss) + + doc = REXML::Document.new(rss.to_s(false)) + + xmldecl = doc.xml_decl + + assert_equal(version, xmldecl.version) + assert_equal(encoding, xmldecl.encoding.to_s) + assert_equal(standalone, !xmldecl.standalone.nil?) + + assert_equal("", doc.root.namespace) + assert_equal(@rss_version, doc.root.attributes["version"]) + end + + def test_not_displayed_xml_stylesheets + rss = Rss.new(@rss_version) + plain_rss = rss.to_s + 3.times do + rss.xml_stylesheets.push(XMLStyleSheet.new) + assert_equal(plain_rss, rss.to_s) + end + end + + def test_xml_stylesheets + [ + [{:href => "a.xsl", :type => "text/xsl"}], + [ + {:href => "a.xsl", :type => "text/xsl"}, + {:href => "a.css", :type => "text/css"}, + ], + ].each do |attrs_ary| + rss = Rss.new(@rss_version) + setup_rss20(rss) + assert_xml_stylesheet_pis(attrs_ary, rss) + end + end + + def test_channel + h = { + 'title' => "fugafuga", + 'link' => "http://hoge.com", + 'description' => "fugafugafugafuga", + + 'language' => "en-us", + 'copyright' => "Copyright 2002, Spartanburg Herald-Journal", + 'managingEditor' => "geo@herald.com (George Matesky)", + 'webMaster' => "betty@herald.com (Betty Guernsey)", + 'pubDate' => Time.parse("Sat, 07 Sep 2002 00:00:01 GMT"), + 'lastBuildDate' => Time.parse("Sat, 07 Sep 2002 09:42:31 GMT"), + 'generator' => "MightyInHouse Content System v2.3", + 'docs' => "http://blogs.law.harvard.edu/tech/rss", + 'ttl' => "60", + 'rating' => '(PICS-1.1 "http://www.rsac.org/ratingsv01.html" l gen true comment "RSACi North America Server" for "http://www.rsac.org" on "1996.04.16T08:15-0500" r (n 0 s 0 v 0 l 0))', + } + categories = [ + { + :content => "Newspapers", + }, + { + :domain => "Syndic8", + :content => "1765", + } + ] + + channel = Rss::Channel.new + + elems = %w(title link description language copyright + managingEditor webMaster pubDate lastBuildDate + generator docs ttl rating) + elems.each do |x| + value = h[x] + value = value.rfc822 if %w(pubDate lastBuildDate).include?(x) + channel.__send__("#{x}=", value) + end + categories.each do |cat| + channel.categories << Rss::Channel::Category.new(cat[:domain], + cat[:content]) + end + + doc = REXML::Document.new(make_rss20(channel.to_s)) + c = doc.root.elements[1] + + elems.each do |x| + elem = c.elements[x] + assert_equal(x, elem.name) + assert_equal("", elem.namespace) + expected = h[x] + case x + when "pubDate", "lastBuildDate" + assert_equal(expected, Time.parse(elem.text)) + when "ttl" + expected = channel.__send__(x) + assert_equal(expected, elem.text.to_i) + else + assert_equal(expected, elem.text) + end + end + categories.each_with_index do |cat, i| + cat = cat.dup + cat[:domain] ||= nil + category = c.elements["category[#{i+1}]"] + actual = { + :domain => category.attributes["domain"], + :content => category.text, + } + assert_equal(cat, actual) + end + end + + def test_channel_cloud + cloud_params = { + :domain => "rpc.sys.com", + :port => "80", + :path => "/RPC2", + :registerProcedure => "myCloud.rssPleaseNotify", + :protocol => "xml-rpc", + } + cloud = Rss::Channel::Cloud.new(cloud_params[:domain], + cloud_params[:port], + cloud_params[:path], + cloud_params[:registerProcedure], + cloud_params[:protocol]) + cloud_params[:port] = cloud.port + + doc = REXML::Document.new(cloud.to_s) + cloud_elem = doc.root + + actual = {} + cloud_elem.attributes.each do |name, value| + value = value.to_i if name == "port" + actual[name.intern] = value + end + assert_equal(cloud_params, actual) + end + + def test_channel_image + image_params = { + :url => "http://hoge.com/hoge.png", + :title => "fugafuga", + :link => "http://hoge.com", + :width => "144", + :height => "400", + :description => "an image", + } + image = Rss::Channel::Image.new(image_params[:url], + image_params[:title], + image_params[:link], + image_params[:width], + image_params[:height], + image_params[:description]) + + doc = REXML::Document.new(image.to_s) + image_elem = doc.root + + image_params.each do |name, value| + value = image.__send__(name) + actual = image_elem.elements[name.to_s].text + actual = actual.to_i if [:width, :height].include?(name) + assert_equal(value, actual) + end + end + + def test_channel_textInput + textInput_params = { + :title => "fugafuga", + :description => "text hoge fuga", + :name => "hoge", + :link => "http://hoge.com", + } + textInput = Rss::Channel::TextInput.new(textInput_params[:title], + textInput_params[:description], + textInput_params[:name], + textInput_params[:link]) + + doc = REXML::Document.new(textInput.to_s) + input_elem = doc.root + + textInput_params.each do |name, value| + actual = input_elem.elements[name.to_s].text + assert_equal(value, actual) + end + end + + def test_channel_skip_days + skipDays_values = [ + "Sunday", + "Monday", + ] + skipDays = Rss::Channel::SkipDays.new + skipDays_values.each do |value| + skipDays.days << Rss::Channel::SkipDays::Day.new(value) + end + + doc = REXML::Document.new(skipDays.to_s) + days_elem = doc.root + + skipDays_values.each_with_index do |value, i| + assert_equal(value, days_elem.elements[i + 1].text) + end + end + + def test_channel_skip_hours + skipHours_values = [ + "0", + "13", + ] + skipHours = Rss::Channel::SkipHours.new + skipHours_values.each do |value| + skipHours.hours << Rss::Channel::SkipHours::Hour.new(value) + end + + doc = REXML::Document.new(skipHours.to_s) + hours_elem = doc.root + + skipHours_values.each_with_index do |value, i| + expected = skipHours.hours[i].content + assert_equal(expected, hours_elem.elements[i + 1].text.to_i) + end + end + + def test_item + h = { + 'title' => "fugafuga", + 'link' => "http://hoge.com/", + 'description' => "text hoge fuga", + 'author' => "oprah@oxygen.net", + 'comments' => "http://www.myblog.org/cgi-local/mt/mt-comments.cgi?entry_id=290", + 'pubDate' => Time.parse("Sat, 07 Sep 2002 00:00:01 GMT"), + } + categories = [ + { + :content => "Newspapers", + }, + { + :domain => "Syndic8", + :content => "1765", + } + ] + + channel = Rss::Channel.new + channel.title = "title" + channel.link = "http://example.com/" + channel.description = "description" + + item = Rss::Channel::Item.new + channel.items << item + + elems = %w(title link description author comments pubDate) + elems.each do |x| + value = h[x] + value = value.rfc822 if x == "pubDate" + item.__send__("#{x}=", value) + end + categories.each do |cat| + item.categories << Rss::Channel::Category.new(cat[:domain], + cat[:content]) + end + + doc = REXML::Document.new(channel.to_s) + channel_elem = doc.root + + item_elem = channel_elem.elements["item[1]"] + elems.each do |x| + elem = item_elem.elements[x] + assert_equal(x, elem.name) + assert_equal("", elem.namespace) + expected = h[x] + case x + when "pubDate" + assert_equal(expected, Time.parse(elem.text)) + else + assert_equal(expected, elem.text) + end + end + categories.each_with_index do |cat, i| + cat = cat.dup + cat[:domain] ||= nil + category = item_elem.elements["category[#{i+1}]"] + actual = { + :domain => category.attributes["domain"], + :content => category.text, + } + assert_equal(cat, actual) + end + end + + def test_item_enclosure + enclosure_params = { + :url => "http://www.scripting.com/mp3s/weatherReportSuite.mp3", + :length => "12216320", + :type => "audio/mpeg", + } + + enclosure = Rss::Channel::Item::Enclosure.new(enclosure_params[:url], + enclosure_params[:length], + enclosure_params[:type]) + enclosure_params[:length] = enclosure.length + + doc = REXML::Document.new(enclosure.to_s) + enclosure_elem = doc.root + + actual = {} + enclosure_elem.attributes.each do |name, value| + value = value.to_i if name == "length" + actual[name.intern] = value + end + assert_equal(enclosure_params, actual) + end + + def test_item_guid + test_params = [ + { + :content => "http://some.server.com/weblogItem3207", + }, + { + :isPermaLink => "true", + :content => "http://inessential.com/2002/09/01.php#a2", + }, + ] + + test_params.each do |guid_params| + guid = Rss::Channel::Item::Guid.new(guid_params[:isPermaLink], + guid_params[:content]) + if guid_params.has_key?(:isPermaLink) + guid_params[:isPermaLink] = guid.isPermaLink + end + if guid.isPermaLink.nil? + assert_equal(true, guid.PermaLink?) + else + assert_equal(guid.isPermaLink, guid.PermaLink?) + end + + doc = REXML::Document.new(guid.to_s) + guid_elem = doc.root + + actual = {} + actual[:content] = guid_elem.text if guid_elem.text + guid_elem.attributes.each do |name, value| + value = value == "true" if name == "isPermaLink" + actual[name.intern] = value + end + assert_equal(guid_params, actual) + end + end + + def test_item_source + source_params = { + :url => "http://www.tomalak.org/links2.xml", + :content => "Tomalak's Realm", + } + + source = Rss::Channel::Item::Source.new(source_params[:url], + source_params[:content]) + + doc = REXML::Document.new(source.to_s) + source_elem = doc.root + + actual = {} + actual[:content] = source_elem.text + source_elem.attributes.each do |name, value| + actual[name.intern] = value + end + assert_equal(source_params, actual) + end + + def test_to_xml + rss = RSS::Parser.parse(make_sample_rss20) + assert_equal(rss.to_s, rss.to_xml) + assert_equal(rss.to_s, rss.to_xml("2.0")) + rss09_xml = rss.to_xml("0.91") do |maker| + setup_dummy_image(maker) + end + rss09 = RSS::Parser.parse(rss09_xml) + assert_equal("0.91", rss09.rss_version) + rss10 = rss.to_xml("1.0") do |maker| + maker.channel.about = "http://www.example.com/index.rdf" + end + rss10 = RSS::Parser.parse(rss10) + assert_equal("1.0", rss10.rss_version) + + atom_xml = rss.to_xml("atom1.0") do |maker| + maker.channel.id = "http://www.example.com/atom.xml" + maker.channel.author = "Alice" + maker.channel.updated = Time.now + maker.items.each do |item| + item.author = "Bob" + item.updated = Time.now + end + end + atom = RSS::Parser.parse(atom_xml) + assert_equal(["atom", "1.0", "feed"], atom.feed_info) + end + end +end -- cgit v1.2.3