require_relative "rss-testcase" require "rss/atom" module RSS class TestParserAtom < TestCase def test_entry_validation assert_ns("", Atom::URI) do Parser.parse(<<-EOA) <entry/> EOA end assert_ns("", Atom::URI) do Parser.parse(<<-EOA) <entry xmlns="hoge"/> EOA end assert_parse(<<-EOA, :missing_tag, "id", "entry") do <entry xmlns="#{Atom::URI}"/> EOA end assert_parse(<<-EOA, :missing_tag, "title", "entry") do <entry xmlns="#{Atom::URI}"> <id>urn:uuid:506e336c-a26e-4457-917b-b89dca7ae746</id> </entry> EOA end assert_parse(<<-EOA, :missing_tag, "updated", "entry") do <entry xmlns="#{Atom::URI}"> <id>urn:uuid:506e336c-a26e-4457-917b-b89dca7ae746</id> <title>Example Entry</title> </entry> EOA end assert_parse(<<-EOA, :missing_tag, "author", "entry") do <entry xmlns="#{Atom::URI}"> <id>urn:uuid:506e336c-a26e-4457-917b-b89dca7ae746</id> <title>Example Entry</title> <updated>2003-10-10T18:30:02Z</updated> </entry> EOA end assert_parse(<<-EOA, :nothing_raised) do <entry xmlns="#{Atom::URI}"> <id>urn:uuid:506e336c-a26e-4457-917b-b89dca7ae746</id> <title>Example Entry</title> <updated>2003-10-10T18:30:02Z</updated> <author> <name>A person</name> </author> </entry> EOA end end def test_entry entry = RSS::Parser.parse(<<-EOA) <?xml version="1.0" encoding="utf-8"?> <entry xmlns="http://www.w3.org/2005/Atom"> <author> <name>A person</name> </author> <title>Atom-Powered Robots Run Amok</title> <link href="http://example.org/2003/12/13/atom03"/> <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> <updated>2003-12-13T18:30:02Z</updated> <summary>Some text.</summary> </entry> EOA assert_not_nil(entry) assert_equal("Atom-Powered Robots Run Amok", entry.title.content) assert_equal("http://example.org/2003/12/13/atom03", entry.link.href) assert_equal("urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a", entry.id.content) assert_equal(Time.parse("2003-12-13T18:30:02Z"), entry.updated.content) assert_equal("Some text.", entry.summary.content) end def test_entry_author assert_atom_person("author", method(:make_entry_document)) do |entry| assert_equal(2, entry.authors.size) entry.authors.last end end def test_entry_category assert_atom_category(method(:make_entry_document)) do |entry| assert_equal(1, entry.categories.size) entry.category end end def test_entry_content_text assert_atom_content(method(:make_entry_document)) do |entry| entry.content end end def test_entry_contributor assert_atom_person("contributor", method(:make_entry_document)) do |entry| assert_equal(1, entry.contributors.size) entry.contributor end end def test_entry_id entry = RSS::Parser.parse(make_entry_document) assert_equal(ENTRY_ID, entry.id.content) end def test_entry_link assert_atom_link(method(:make_entry_document)) do |entry| assert_equal(1, entry.links.size) entry.link end end def test_published generator = method(:make_entry_document) assert_atom_date_construct("published", generator) do |entry| entry.published end end def test_entry_rights generator = method(:make_entry_document) assert_atom_text_construct("rights", generator) do |entry| entry.rights end end def test_entry_source generator = method(:make_entry_document_with_open_source) assert_atom_source(generator) do |entry| assert_not_nil(entry.source) entry.source end end def test_entry_summary generator = method(:make_entry_document) assert_atom_text_construct("summary", generator) do |entry| entry.summary end end def test_entry_title entry = RSS::Parser.parse(make_entry_document) assert_equal(ENTRY_TITLE, entry.title.content) end def test_entry_updated entry = RSS::Parser.parse(make_entry_document) assert_equal(Time.parse(ENTRY_UPDATED), entry.updated.content) end end end