mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
282 lines
8.8 KiB
Ruby
282 lines
8.8 KiB
Ruby
|
require "rexml/document"
|
||
|
|
||
|
require "rss-testcase"
|
||
|
|
||
|
require "rss/atom"
|
||
|
|
||
|
module RSS
|
||
|
class TestAtomCore < TestCase
|
||
|
def setup
|
||
|
@uri = "http://www.w3.org/2005/Atom"
|
||
|
@xhtml_uri = "http://www.w3.org/1999/xhtml"
|
||
|
end
|
||
|
|
||
|
def test_feed
|
||
|
version = "1.0"
|
||
|
encoding = "UTF-8"
|
||
|
standalone = false
|
||
|
|
||
|
feed = Atom::Feed.new(version, encoding, standalone)
|
||
|
assert_equal("", feed.to_s)
|
||
|
|
||
|
author = feed.class::Author.new
|
||
|
name = feed.class::Author::Name.new
|
||
|
name.content = "an author"
|
||
|
author.name = name
|
||
|
assert_not_equal("", author.to_s)
|
||
|
feed.authors << author
|
||
|
assert_equal("", feed.to_s)
|
||
|
|
||
|
id = feed.class::Id.new
|
||
|
id.content = "http://example.com/atom.xml"
|
||
|
assert_not_equal("", id.to_s)
|
||
|
feed.id = id
|
||
|
assert_equal("", feed.to_s)
|
||
|
|
||
|
title = feed.class::Title.new
|
||
|
title.content = "a title"
|
||
|
assert_not_equal("", title.to_s)
|
||
|
feed.title = title
|
||
|
assert_equal("", feed.to_s)
|
||
|
|
||
|
updated = feed.class::Updated.new
|
||
|
updated.content = Time.now
|
||
|
assert_not_equal("", updated.to_s)
|
||
|
feed.updated = updated
|
||
|
assert_not_equal("", feed.to_s)
|
||
|
|
||
|
|
||
|
feed.authors.clear
|
||
|
assert_equal("", feed.to_s)
|
||
|
entry = Atom::Feed::Entry.new
|
||
|
setup_entry(entry)
|
||
|
assert_not_equal("", entry.to_s)
|
||
|
|
||
|
author = entry.authors.first
|
||
|
entry.authors.clear
|
||
|
assert_equal("", entry.to_s)
|
||
|
entry.parent = feed
|
||
|
assert_equal("", entry.to_s)
|
||
|
feed.authors << author
|
||
|
assert_not_equal("", entry.to_s)
|
||
|
feed.authors.clear
|
||
|
feed.entries << entry
|
||
|
assert_equal("", feed.to_s)
|
||
|
entry.authors << author
|
||
|
assert_not_equal("", entry.to_s)
|
||
|
assert_not_equal("", feed.to_s)
|
||
|
|
||
|
doc = REXML::Document.new(feed.to_s)
|
||
|
xmldecl = doc.xml_decl
|
||
|
|
||
|
%w(version encoding).each do |x|
|
||
|
assert_equal(instance_eval(x), xmldecl.__send__(x))
|
||
|
end
|
||
|
assert_equal(standalone, !xmldecl.standalone.nil?)
|
||
|
|
||
|
assert_equal(@uri, doc.root.namespace)
|
||
|
end
|
||
|
|
||
|
def test_entry
|
||
|
version = "1.0"
|
||
|
encoding = "UTF-8"
|
||
|
standalone = false
|
||
|
|
||
|
entry = Atom::Entry.new(version, encoding, standalone)
|
||
|
setup_entry(entry)
|
||
|
|
||
|
author = entry.authors.first
|
||
|
entry.authors.clear
|
||
|
assert_equal("", entry.to_s)
|
||
|
source = Atom::Entry::Source.new
|
||
|
source.authors << author
|
||
|
entry.source = source
|
||
|
assert_not_equal("", entry.to_s)
|
||
|
|
||
|
doc = REXML::Document.new(entry.to_s)
|
||
|
xmldecl = doc.xml_decl
|
||
|
|
||
|
%w(version encoding).each do |x|
|
||
|
assert_equal(instance_eval(x), xmldecl.__send__(x))
|
||
|
end
|
||
|
assert_equal(standalone, !xmldecl.standalone.nil?)
|
||
|
|
||
|
assert_equal(@uri, doc.root.namespace)
|
||
|
end
|
||
|
|
||
|
def test_not_displayed_xml_stylesheets
|
||
|
feed = Atom::Feed.new
|
||
|
plain_feed = feed.to_s
|
||
|
3.times do
|
||
|
feed.xml_stylesheets.push(XMLStyleSheet.new)
|
||
|
assert_equal(plain_feed, feed.to_s)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def test_atom_author
|
||
|
assert_atom_person_to_s(Atom::Feed::Author)
|
||
|
assert_atom_person_to_s(Atom::Feed::Entry::Author)
|
||
|
assert_atom_person_to_s(Atom::Entry::Author)
|
||
|
assert_atom_person_to_s(Atom::Feed::Entry::Source::Author)
|
||
|
assert_atom_person_to_s(Atom::Entry::Source::Author)
|
||
|
end
|
||
|
|
||
|
def test_atom_category
|
||
|
assert_atom_category_to_s(Atom::Feed::Category)
|
||
|
assert_atom_category_to_s(Atom::Feed::Entry::Category)
|
||
|
assert_atom_category_to_s(Atom::Entry::Category)
|
||
|
assert_atom_category_to_s(Atom::Feed::Entry::Source::Category)
|
||
|
assert_atom_category_to_s(Atom::Entry::Source::Category)
|
||
|
end
|
||
|
|
||
|
def test_atom_contributor
|
||
|
assert_atom_person_to_s(Atom::Feed::Contributor)
|
||
|
assert_atom_person_to_s(Atom::Feed::Entry::Contributor)
|
||
|
assert_atom_person_to_s(Atom::Entry::Contributor)
|
||
|
assert_atom_person_to_s(Atom::Feed::Entry::Source::Contributor)
|
||
|
assert_atom_person_to_s(Atom::Entry::Source::Contributor)
|
||
|
end
|
||
|
|
||
|
def test_atom_generator
|
||
|
assert_atom_generator_to_s(Atom::Feed::Generator)
|
||
|
assert_atom_generator_to_s(Atom::Feed::Entry::Source::Generator)
|
||
|
assert_atom_generator_to_s(Atom::Entry::Source::Generator)
|
||
|
end
|
||
|
|
||
|
def test_atom_icon
|
||
|
assert_atom_icon_to_s(Atom::Feed::Icon)
|
||
|
assert_atom_icon_to_s(Atom::Feed::Entry::Source::Icon)
|
||
|
assert_atom_icon_to_s(Atom::Entry::Source::Icon)
|
||
|
end
|
||
|
|
||
|
def test_atom_id
|
||
|
assert_atom_id_to_s(Atom::Feed::Id)
|
||
|
assert_atom_id_to_s(Atom::Feed::Entry::Id)
|
||
|
assert_atom_id_to_s(Atom::Entry::Id)
|
||
|
assert_atom_id_to_s(Atom::Feed::Entry::Source::Id)
|
||
|
assert_atom_id_to_s(Atom::Entry::Source::Id)
|
||
|
end
|
||
|
|
||
|
def test_atom_link
|
||
|
assert_atom_link_to_s(Atom::Feed::Link)
|
||
|
assert_atom_link_to_s(Atom::Feed::Entry::Link)
|
||
|
assert_atom_link_to_s(Atom::Entry::Link)
|
||
|
assert_atom_link_to_s(Atom::Feed::Entry::Source::Link)
|
||
|
assert_atom_link_to_s(Atom::Entry::Source::Link)
|
||
|
end
|
||
|
|
||
|
def test_atom_logo
|
||
|
assert_atom_logo_to_s(Atom::Feed::Logo)
|
||
|
assert_atom_logo_to_s(Atom::Feed::Entry::Source::Logo)
|
||
|
assert_atom_logo_to_s(Atom::Entry::Source::Logo)
|
||
|
end
|
||
|
|
||
|
def test_atom_rights
|
||
|
assert_atom_text_construct_to_s(Atom::Feed::Rights)
|
||
|
assert_atom_text_construct_to_s(Atom::Feed::Entry::Rights)
|
||
|
assert_atom_text_construct_to_s(Atom::Entry::Rights)
|
||
|
assert_atom_text_construct_to_s(Atom::Feed::Entry::Source::Rights)
|
||
|
assert_atom_text_construct_to_s(Atom::Entry::Source::Rights)
|
||
|
end
|
||
|
|
||
|
def test_atom_subtitle
|
||
|
assert_atom_text_construct_to_s(Atom::Feed::Subtitle)
|
||
|
assert_atom_text_construct_to_s(Atom::Feed::Entry::Source::Subtitle)
|
||
|
assert_atom_text_construct_to_s(Atom::Entry::Source::Subtitle)
|
||
|
end
|
||
|
|
||
|
def test_atom_title
|
||
|
assert_atom_text_construct_to_s(Atom::Feed::Title)
|
||
|
assert_atom_text_construct_to_s(Atom::Feed::Entry::Title)
|
||
|
assert_atom_text_construct_to_s(Atom::Entry::Title)
|
||
|
assert_atom_text_construct_to_s(Atom::Feed::Entry::Source::Title)
|
||
|
assert_atom_text_construct_to_s(Atom::Entry::Source::Title)
|
||
|
end
|
||
|
|
||
|
def test_atom_updated
|
||
|
assert_atom_date_construct_to_s(Atom::Feed::Updated)
|
||
|
assert_atom_date_construct_to_s(Atom::Feed::Entry::Updated)
|
||
|
assert_atom_date_construct_to_s(Atom::Entry::Updated)
|
||
|
assert_atom_date_construct_to_s(Atom::Feed::Entry::Source::Updated)
|
||
|
assert_atom_date_construct_to_s(Atom::Entry::Source::Updated)
|
||
|
end
|
||
|
|
||
|
def test_atom_content
|
||
|
assert_atom_content_to_s(Atom::Feed::Entry::Content)
|
||
|
assert_atom_content_to_s(Atom::Entry::Content)
|
||
|
end
|
||
|
|
||
|
def test_atom_published
|
||
|
assert_atom_date_construct_to_s(Atom::Feed::Entry::Published)
|
||
|
assert_atom_date_construct_to_s(Atom::Entry::Published)
|
||
|
end
|
||
|
|
||
|
def test_atom_summary
|
||
|
assert_atom_text_construct_to_s(Atom::Feed::Entry::Summary)
|
||
|
assert_atom_text_construct_to_s(Atom::Entry::Summary)
|
||
|
end
|
||
|
|
||
|
|
||
|
def test_to_xml
|
||
|
atom = RSS::Parser.parse(make_feed)
|
||
|
assert_equal(atom.to_s, atom.to_xml)
|
||
|
assert_equal(atom.to_s, atom.to_xml("atom"))
|
||
|
assert_equal(atom.to_s, atom.to_xml("atom1.0"))
|
||
|
assert_equal(atom.to_s, atom.to_xml("atom1.0:feed"))
|
||
|
assert_equal(atom.to_s, atom.to_xml("atom:feed"))
|
||
|
|
||
|
rss09_xml = atom.to_xml("0.91") do |maker|
|
||
|
maker.channel.language = "en-us"
|
||
|
maker.channel.link = "http://example.com/"
|
||
|
maker.channel.description.content = atom.title.content
|
||
|
|
||
|
maker.image.url = "http://example.com/logo.png"
|
||
|
maker.image.title = "Logo"
|
||
|
end
|
||
|
rss09 = RSS::Parser.parse(rss09_xml)
|
||
|
assert_equal(["rss", "0.91", nil], rss09.feed_info)
|
||
|
|
||
|
rss20_xml = atom.to_xml("2.0") do |maker|
|
||
|
maker.channel.link = "http://example.com/"
|
||
|
maker.channel.description.content = atom.title.content
|
||
|
end
|
||
|
rss20 = RSS::Parser.parse(rss20_xml)
|
||
|
assert_equal("2.0", rss20.rss_version)
|
||
|
assert_equal(["rss", "2.0", nil], rss20.feed_info)
|
||
|
end
|
||
|
|
||
|
private
|
||
|
def setup_entry(entry)
|
||
|
_wrap_assertion do
|
||
|
assert_equal("", entry.to_s)
|
||
|
|
||
|
author = entry.class::Author.new
|
||
|
name = entry.class::Author::Name.new
|
||
|
name.content = "an author"
|
||
|
author.name = name
|
||
|
assert_not_equal("", author.to_s)
|
||
|
entry.authors << author
|
||
|
assert_equal("", entry.to_s)
|
||
|
|
||
|
id = entry.class::Id.new
|
||
|
id.content = "http://example.com/atom.xml"
|
||
|
assert_not_equal("", id.to_s)
|
||
|
entry.id = id
|
||
|
assert_equal("", entry.to_s)
|
||
|
|
||
|
title = entry.class::Title.new
|
||
|
title.content = "a title"
|
||
|
assert_not_equal("", title.to_s)
|
||
|
entry.title = title
|
||
|
assert_equal("", entry.to_s)
|
||
|
|
||
|
updated = entry.class::Updated.new
|
||
|
updated.content = Time.now
|
||
|
assert_not_equal("", updated.to_s)
|
||
|
entry.updated = updated
|
||
|
assert_not_equal("", entry.to_s)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|