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('<', 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('<', 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('<', 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