# encoding: UTF-8
require './test_helper'
class TestNode < Minitest::Test
def setup
@file_name = "model/bands.utf-8.xml"
# Strip spaces to make testing easier
XML.default_keep_blanks = false
file = File.join(File.dirname(__FILE__), @file_name)
@doc = XML::Document.file(file)
end
def teardown
XML.default_keep_blanks = true
@doc = nil
end
def nodes
# Find all nodes with a country attributes
@doc.find('*[@country]')
end
def test_doc_class
assert_instance_of(XML::Document, @doc)
end
def test_doc_node_type
assert_equal XML::Node::DOCUMENT_NODE, @doc.node_type
end
def test_root_class
assert_instance_of(XML::Node, @doc.root)
end
def test_root_node_type
assert_equal XML::Node::ELEMENT_NODE, @doc.root.node_type
end
def test_node_class
for n in nodes
assert_instance_of(XML::Node, n)
end
end
def test_context
node = @doc.root
context = node.context
assert_instance_of(XML::XPath::Context, context)
end
def test_find
assert_instance_of(XML::XPath::Object, self.nodes)
end
def test_node_child_get
assert_instance_of(TrueClass, @doc.root.child?)
assert_instance_of(XML::Node, @doc.root.child)
if defined?(Encoding)
assert_equal(Encoding::UTF_8, @doc.root.child.name.encoding)
assert_equal("m\u00F6tley_cr\u00FCe", @doc.root.child.name)
else
assert_equal("m\303\266tley_cr\303\274e", @doc.root.child.name)
end
end
def test_node_doc
for n in nodes
assert_instance_of(XML::Document, n.doc) if n.document?
end
end
def test_name
node = @doc.root.children.last
assert_equal("iron_maiden", node.name)
end
def test_node_find
nodes = @doc.root.find('./fixnum')
for node in nodes
assert_instance_of(XML::Node, node)
end
end
def test_equality
node_a = @doc.find_first('*[@country]')
node_b = @doc.root.child
# On the ruby side these are different objects
refute(node_a.equal?(node_b))
# But they are the same underlying libxml node so specify they are equal
assert(node_a == node_b)
assert(node_a.eql?(node_b))
file = File.join(File.dirname(__FILE__), @file_name)
doc2 = XML::Document.file(file)
node_a2 = doc2.find_first('*[@country]')
refute(node_a == node_a2)
refute(node_a.eql?(node_a2))
assert_equal(node_a.to_s, node_a2.to_s)
refute(node_a.equal?(node_a2))
end
def test_equality_2
parent = XML::Node.new('parent')
child = XML::Node.new('child')
parent << child
node_a = child.parent
node_b = child.parent
# In this case the nodes are equal - the parent being the root
assert(node_a.equal?(node_b))
assert(node_a == node_b)
assert(node_a.eql?(node_b))
end
def test_equality_nil
node = @doc.root
assert(node != nil)
end
def test_equality_wrong_type
node = @doc.root
assert_raises(TypeError) do
assert(node != 'abc')
end
end
def test_content
node = @doc.root.last
assert_equal("Iron Maiden is a British heavy metal band formed in 1975.",
node.content)
end
def test_base
doc = XML::Parser.string('').parse
assert_nil(doc.root.base_uri)
end
# We use the same facility that libXSLT does here to disable output escaping.
# This lets you specify that the node's content should be rendered unaltered
# whenever it is being output. This is useful for things like