2004-03-21 12:20:47 +03:00
|
|
|
require "rexml/document"
|
|
|
|
|
2013-02-24 17:10:46 +04:00
|
|
|
require_relative "rss-testcase"
|
2004-03-21 13:03:17 +03:00
|
|
|
|
2004-03-21 12:20:47 +03:00
|
|
|
require "rss/1.0"
|
|
|
|
require "rss/xml-stylesheet"
|
|
|
|
|
2004-03-21 13:03:17 +03:00
|
|
|
module RSS
|
2004-10-16 08:51:15 +04:00
|
|
|
class TestXMLStyleSheet < TestCase
|
2009-03-06 06:56:38 +03:00
|
|
|
|
2004-10-16 08:51:15 +04:00
|
|
|
def test_accessor
|
|
|
|
[
|
|
|
|
{:href => "a.xsl", :type => "text/xsl"},
|
|
|
|
{:media => "print", :title => "FOO"},
|
|
|
|
{:charset => "UTF-8", :alternate => "yes"},
|
|
|
|
].each do |attrs|
|
2007-03-17 13:13:25 +03:00
|
|
|
assert_xml_stylesheet_attrs(attrs, XMLStyleSheet.new(attrs))
|
2004-10-16 08:51:15 +04:00
|
|
|
end
|
|
|
|
end
|
2009-03-06 06:56:38 +03:00
|
|
|
|
2004-10-16 08:51:15 +04:00
|
|
|
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|
|
2007-03-17 13:13:25 +03:00
|
|
|
target, contents = parse_pi(XMLStyleSheet.new(attrs).to_s)
|
|
|
|
assert_xml_stylesheet(target, attrs, XMLStyleSheet.new(contents))
|
2004-10-16 08:51:15 +04:00
|
|
|
end
|
|
|
|
end
|
2009-03-06 06:56:38 +03:00
|
|
|
|
2004-10-16 08:51:15 +04:00
|
|
|
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
|
2009-03-06 06:56:38 +03:00
|
|
|
|
2004-10-16 08:51:15 +04:00
|
|
|
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)
|
2004-11-19 11:25:25 +03:00
|
|
|
assert_xml_stylesheet(target, have_href_xsss[i], stylesheet)
|
2004-10-16 08:51:15 +04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2009-03-06 06:56:38 +03:00
|
|
|
|
2004-10-16 08:51:15 +04:00
|
|
|
def parse_pi(pi)
|
2010-04-06 04:53:34 +04:00
|
|
|
/\A\s*<\?(\S+)([^?]*\?+(?:[^?>][^?]*\?+)*)>\s*\z/ =~ pi
|
2004-10-16 08:51:15 +04:00
|
|
|
target = $1
|
2010-04-06 04:53:34 +04:00
|
|
|
dummy = REXML::Document.new("<dummy #{$2.to_s.chop}/>").root
|
2004-10-16 08:51:15 +04:00
|
|
|
contents = {}
|
|
|
|
dummy.attributes.each do |name, value|
|
|
|
|
contents[name] = value
|
|
|
|
end
|
|
|
|
[target, contents]
|
|
|
|
end
|
2009-03-06 06:56:38 +03:00
|
|
|
|
2004-10-16 08:51:15 +04:00
|
|
|
end
|
2004-03-21 12:20:47 +03:00
|
|
|
end
|