aboutsummaryrefslogtreecommitdiffstats
path: root/test/rss
diff options
context:
space:
mode:
authorkou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-03-21 09:20:47 +0000
committerkou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-03-21 09:20:47 +0000
commit7ead69e5b3a2b09878037f11a7dda59ae402ccbf (patch)
treef7a422e5983f2c475c831e5d70987437eb77fa69 /test/rss
parent2639d6dc809a3f78c96543c839d72d05e6e90ca7 (diff)
downloadruby-7ead69e5b3a2b09878037f11a7dda59ae402ccbf.tar.gz
* test/rss/test_xml-stylesheet.rb: added tests for xml-stylesheet.
* lib/rss/xml-stylesheet.rb: added xml-stylesheet parsing function. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5989 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/rss')
-rw-r--r--test/rss/common.rb9
-rw-r--r--test/rss/my-assertions.rb39
-rw-r--r--test/rss/test_1.0.rb22
-rw-r--r--test/rss/test_xml-stylesheet.rb109
4 files changed, 178 insertions, 1 deletions
diff --git a/test/rss/common.rb b/test/rss/common.rb
index 64bf0100fc..15af960bc1 100644
--- a/test/rss/common.rb
+++ b/test/rss/common.rb
@@ -100,6 +100,15 @@ EOI
EOT
end
+ def make_sample_RDF
+ make_RDF(<<-EOR)
+#{make_channel}
+#{make_image}
+#{make_item}
+#{make_textinput}
+EOR
+ end
+
def make_Rss2(content=nil, xmlns=[])
<<-EORSS
#{make_xmldecl}
diff --git a/test/rss/my-assertions.rb b/test/rss/my-assertions.rb
index 02cedfb736..3829fdbd5c 100644
--- a/test/rss/my-assertions.rb
+++ b/test/rss/my-assertions.rb
@@ -84,7 +84,46 @@ module Test
end
end
end
+
+ def assert_xml_stylesheet_attrs(xsl, attrs)
+ _wrap_assertion do
+ normalized_attrs = {}
+ attrs.each do |name, value|
+ normalized_attrs[name.to_s] = value
+ end
+ ::RSS::XMLStyleSheet::ATTRIBUTES.each do |name|
+ assert_equal(normalized_attrs[name], xsl.send(name))
+ end
+ end
+ end
+
+ def assert_xml_stylesheet(target, xsl, attrs)
+ _wrap_assertion do
+ if attrs.has_key?(:href)
+ if !attrs.has_key?(:type) and attrs.has_key?(:guess_type)
+ attrs[:type] = attrs[:guess_type]
+ end
+ assert_equal("xml-stylesheet", target)
+ assert_xml_stylesheet_attrs(xsl, attrs)
+ else
+ assert_nil(target)
+ assert_equal("", xsl.to_s)
+ end
+ end
+ end
+ def assert_xml_stylesheet_pis(attrs_ary)
+ rdf = ::RSS::RDF.new()
+ xss_strs = []
+ attrs_ary.each do |attrs|
+ xss = ::RSS::XMLStyleSheet.new(*attrs)
+ xss_strs.push(xss.to_s)
+ rdf.xml_stylesheets.push(xss)
+ end
+ pi_str = rdf.to_s.gsub(/<\?xml .*\n/, "").gsub(/\s*<rdf:RDF.*\z/m, "")
+ assert_equal(xss_strs.join("\n"), pi_str)
+ end
+
end
end
end
diff --git a/test/rss/test_1.0.rb b/test/rss/test_1.0.rb
index b48e765d08..9f8cd2610d 100644
--- a/test/rss/test_1.0.rb
+++ b/test/rss/test_1.0.rb
@@ -38,8 +38,28 @@ class TestCore < Test::Unit::TestCase
end
- def test_channel
+ def test_not_displayed_xml_stylesheets
+ rdf = RDF.new()
+ plain_rdf = rdf.to_s
+ 3.times do
+ rdf.xml_stylesheets.push(XMLStyleSheet.new)
+ assert_equal(plain_rdf, rdf.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|
+ assert_xml_stylesheet_pis(attrs_ary)
+ end
+ end
+
+ def test_channel
about = "http://hoge.com"
title = "fugafuga"
link = "http://hoge.com"
diff --git a/test/rss/test_xml-stylesheet.rb b/test/rss/test_xml-stylesheet.rb
new file mode 100644
index 0000000000..eff5fd87e5
--- /dev/null
+++ b/test/rss/test_xml-stylesheet.rb
@@ -0,0 +1,109 @@
+# -*- tab-width: 2 -*- vim: ts=2
+
+require "test/unit"
+require "rexml/document"
+
+require "rss/1.0"
+require "rss/xml-stylesheet"
+require "common"
+
+class TestXMLStyleSheet < Test::Unit::TestCase
+ include TestRSSMixin
+
+ def test_accessor
+ [
+ {:href => "a.xsl", :type => "text/xsl"},
+ {:media => "print", :title => "FOO"},
+ {:charset => "UTF-8", :alternate => "yes"},
+ ].each do |attrs|
+ assert_xml_stylesheet_attrs(XMLStyleSheet.new(*attrs), attrs)
+ end
+ end
+
+ def test_to_s
+ [
+ {:href => "a.xsl", :type => "text/xsl"},
+ {:type => "text/xsl"},
+ {:href => "a.xsl", :guess_type => "text/xsl"},
+ {:href => "a.css", :type => "text/css"},
+ {:href => "a.css", :type => "text/xsl",
+ :guess_type => "text/css"},
+ {:href => "a.xsl", :type => "text/xsl",
+ :title => "sample", :media => "printer",
+ :charset => "UTF-8", :alternate => "yes"},
+ {:href => "a.css", :guess_type => "text/css",
+ :alternate => "no"},
+ {:type => "text/xsl", :title => "sample",
+ :media => "printer", :charset => "UTF-8",
+ :alternate => "yes"},
+ ].each do |attrs|
+ target, contents = parse_pi(XMLStyleSheet.new(*attrs).to_s)
+ assert_xml_stylesheet(target, XMLStyleSheet.new(*contents), attrs)
+ end
+ end
+
+ def test_bad_alternate
+ %w(a ___ ??? BAD_ALTERNATE).each do |value|
+ xss = XMLStyleSheet.new
+ assert_raise(NotAvailableValueError) do
+ xss.alternate = value
+ end
+ xss.do_validate = false
+ assert_nothing_raised do
+ xss.alternate = value
+ end
+ assert_nil(xss.alternate)
+ end
+ end
+
+ def test_parse
+ [
+ [{:href => "a.xsl", :type => "text/xsl"},],
+ [{:media => "print", :title => "FOO"},],
+ [{:charset => "UTF-8", :alternate => "yes"},],
+ [{:href => "a.xsl", :type => "text/xsl"},
+ {:type => "text/xsl"},
+ {:href => "a.xsl", :guess_type => "text/xsl"},
+ {:href => "a.css", :type => "text/css"},
+ {:href => "a.css", :type => "text/xsl",
+ :guess_type => "text/css"},
+ {:href => "a.xsl", :type => "text/xsl",
+ :title => "sample", :media => "printer",
+ :charset => "UTF-8", :alternate => "yes"},
+ {:href => "a.css", :guess_type => "text/css",
+ :alternate => "no"},
+ {:type => "text/xsl", :title => "sample",
+ :media => "printer", :charset => "UTF-8",
+ :alternate => "yes"},],
+ ].each do |xsss|
+ doc = REXML::Document.new(make_sample_RDF)
+ root = doc.root
+ xsss.each do |xss|
+ content = xss.collect do |key, name|
+ %Q[#{key}="#{name}"]
+ end.join(" ")
+ pi = REXML::Instruction.new("xml-stylesheet", content)
+ root.previous_sibling = pi
+ end
+ rss = Parser.parse(doc.to_s)
+ have_href_xsss = xsss.find_all {|xss| xss.has_key?(:href)}
+ assert_equal(have_href_xsss.size, rss.xml_stylesheets.size)
+ rss.xml_stylesheets.each_with_index do |stylesheet, i|
+ target, = parse_pi(stylesheet.to_s)
+ assert_xml_stylesheet(target, stylesheet, have_href_xsss[i])
+ end
+ end
+ end
+
+ def parse_pi(pi)
+ /\A\s*<\?(\S+)([^(?:\?>)]+)\?>\s*\z/ =~ pi
+ target = $1
+ dummy = REXML::Document.new("<dummy #{$2}/>").root
+ contents = {}
+ dummy.attributes.each do |name, value|
+ contents[name] = value
+ end
+ [target, contents]
+ end
+
+end