test/test_xml.rb in atom-tools-1.0.0 vs test/test_xml.rb in atom-tools-2.0.0

- old
+ new

@@ -1,46 +1,55 @@ +$:.unshift 'lib/', File.dirname(__FILE__) + '/../lib' require "test/unit" - -# for entry.edit_url require "atom/service" class AtomTest < Test::Unit::TestCase def test_text_type_text entry = get_entry - entry.title = "Atom-drunk pirates run amok!" + entry.title = "Let's talk about <html>" assert_equal("text", entry.title["type"]) - xml = get_elements entry + assert_match('&lt;', entry.title.xml.to_s) - assert_equal("Atom-drunk pirates run amok!", xml.elements["/entry/title"].text) + xml = entry.to_xml + + b = Atom::Entry.parse(xml).to_s + + base_check xml + + assert_equal("Let's talk about <html>", xml.elements["title"].text) + + assert_match('&lt;', entry.to_s) end def test_text_type_html entry = get_entry entry.title = "Atom-drunk pirates<br>run amok!" entry.title["type"] = "html" xml = get_elements entry - assert_equal("Atom-drunk pirates<br>run amok!", xml.elements["/entry/title"].text) - assert_equal("html", xml.elements["/entry/title"].attributes["type"]) + assert_equal("Atom-drunk pirates<br>run amok!", xml.elements["title"].text) + assert_equal("html", xml.elements["title"].attributes["type"]) + + assert_match('&lt;', entry.to_s) end def test_text_type_xhtml entry = get_entry entry.title = "Atom-drunk pirates <em>run amok</em>!" entry.title["type"] = "xhtml" xml = get_elements entry - base_check xml + assert_equal(XHTML::NS, xml.elements["title/div"].namespace) + assert_equal("run amok", xml.elements["title/div/em"].text) - assert_equal(XHTML::NS, xml.elements["/entry/title/div"].namespace) - assert_equal("run amok", xml.elements["/entry/title/div/em"].text) + assert_match('<em>', entry.to_s) end def test_html_text_with_entities entry = get_entry @@ -57,13 +66,13 @@ a.name= "Brendan Taylor" a.uri = "http://necronomicorp.com/blog/" xml = get_elements entry - assert_equal("http://necronomicorp.com/blog/", xml.elements["/entry/author/uri"].text) - assert_equal("Brendan Taylor", xml.elements["/entry/author/name"].text) - assert_nil(xml.elements["/entry/author/email"]) + assert_equal("http://necronomicorp.com/blog/", xml.elements["author/uri"].text) + assert_equal("Brendan Taylor", xml.elements["author/name"].text) + assert_nil(xml.elements["author/email"]) end def test_tags entry = get_entry entry.tag_with "test tags" @@ -79,47 +88,70 @@ entry.updated = "1970-01-01" entry.content = "blah" assert entry.updated.is_a?(Time) - xml = get_elements entry + xml = entry.to_xml - assert_match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/, xml.elements["//updated"].text, "atom:updated isn't in xsd:datetime format") + b = Atom::Entry.parse(xml).to_s + base_check xml + + assert_match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/, xml.elements["updated"].text, "atom:updated isn't in xsd:datetime format") + entry.updated! assert((Time.parse("1970-01-01") < entry.updated), "<updated/> is not updated") end + def test_edited + entry = get_entry + + assert_nil entry.edited + + entry.edited = "1990-04-07" + assert entry.edited.is_a?(Time) + + xml = get_elements entry + assert_equal(Atom::PP_NS, xml.elements["app:edited"].namespace) + assert_match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/, xml.elements["app:edited"].text, + "atom:edited isn't in xsd:datetime format") + + entry.edited! + assert((Time.parse("1990-04-07") < entry.edited), "<edited/> is not updated") + end + def test_out_of_line entry = get_entry entry.content = "this shouldn't appear" entry.content["src"] = 'http://example.org/test.png' entry.content["type"] = "image/png" xml = get_elements(entry) - assert_nil(xml.elements["/entry/content"].text) - assert_equal("http://example.org/test.png", xml.elements["/entry/content"].attributes["src"]) - assert_equal("image/png", xml.elements["/entry/content"].attributes["type"]) + assert_nil xml.elements["content"].text + assert_equal("http://example.org/test.png", xml.elements["content"].attributes["src"]) + assert_equal("image/png", xml.elements["content"].attributes["type"]) end def test_extensions entry = get_entry - assert(entry.extensions.children.empty?) + assert(entry.extensions.empty?) element = REXML::Element.new("test") element.add_namespace "http://purl.org/" entry.extensions << element + assert entry.extensions.member?(element) + xml = get_elements entry - assert_equal(REXML::Element, xml.elements["/entry/test"].class) - assert_equal("http://purl.org/", xml.elements["/entry/test"].namespace) + assert_equal(REXML::Element, xml.elements["test"].class) + assert_equal("http://purl.org/", xml.elements["test"].namespace) end def test_roundtrip_extension entry = Atom::Entry.parse("<entry xmlns='http://www.w3.org/2005/Atom' xmlns:nil='http://necronomicorp.com/nil'><nil:ext/></entry>") @@ -129,19 +161,19 @@ def test_app_control entry = get_entry assert !entry.draft - assert_nil get_elements(entry).elements["/entry/control"] + assert_nil get_elements(entry).elements["control"] entry.draft = true xml = get_elements entry - assert_equal Atom::PP_NS, xml.elements["/entry/control"].namespace - assert_equal Atom::PP_NS, xml.elements["/entry/control/draft"].namespace - assert_equal "yes", xml.elements["/entry/control/draft"].text + assert_equal Atom::PP_NS, xml.elements["app:control"].namespace + assert_equal Atom::PP_NS, xml.elements["app:control/app:draft"].namespace + assert_equal "yes", xml.elements["app:control/app:draft"].text entry2 = Atom::Entry.parse xml assert entry.draft end @@ -258,11 +290,11 @@ assert_equal(Time.parse("2005-07-31T12:29:29Z"), feed.updated) assert_equal("tag:example.org,2003:3", feed.id) assert_equal([], feed.authors) - + alt = feed.links.find { |l| l["rel"] == "alternate" } assert_equal("alternate", alt["rel"]) assert_equal("text/html", alt["type"]) assert_equal("en", alt["hreflang"]) assert_equal("http://example.org/", alt["href"]) @@ -307,23 +339,10 @@ end def test_parse_outofline_content xml = <<END <entry xmlns="http://www.w3.org/2005/Atom"> - <summary src="http://necronomicorp.com/nil"> -Summary doesn't have src. - </summary> -</entry> -END - - entry = Atom::Entry.parse xml - - assert_raises(RuntimeError) { entry.summary["src"] } - assert_equal "Summary doesn't have src.", entry.summary.to_s.strip - - xml = <<END -<entry xmlns="http://www.w3.org/2005/Atom"> <content src="http://necronomicorp.com/nil"> src means empty content. </content> </entry> END @@ -354,10 +373,18 @@ entry = Atom::Entry.parse(doc, base_url) assert_equal("http://www.tbray.org/ongoing/When/200x/2006/10/11/", entry.base) end + def test_relative_src + base_url = "http://example.org/foo/" + doc = "<entry xmlns='http://www.w3.org/2005/Atom'><content src='./bar'/></entry>" + + entry = Atom::Entry.parse(doc, base_url) + assert_equal("http://example.org/foo/bar", entry.content['src']) + end + def test_edit_url doc = <<END <entry xmlns="http://www.w3.org/2005/Atom"><link rel="edit"/></entry> END entry = Atom::Entry.parse(doc) @@ -379,28 +406,33 @@ END entry = Atom::Entry.parse(doc) assert_equal("http://necronomicorp.com/nil", entry.edit_url) + + entry.edit_url = "http://necronomicorp.com/foo" + assert_equal "http://necronomicorp.com/foo", entry.edit_url end def assert_has_category xml, term assert_not_nil(REXML::XPath.match(xml, "/entry/category[@term = #{term}]")) end def assert_has_content_type xml, type - assert_equal(type, xml.elements["/entry/content"].attributes["type"]) + assert_equal(type, xml.elements["content"].attributes["type"]) end def get_entry Atom::Entry.new end # round-trips it to make sure things stay the same def get_elements entry xml = entry.to_xml - assert_equal(entry.to_s, Atom::Entry.parse(xml).to_s) + b = Atom::Entry.parse(xml) + + assert_equal(xml.to_s, b.to_s) base_check xml xml end