require "libxml" require 'test/unit' class TestTranversal < Test::Unit::TestCase ROOT_NODES_LENGTH = 25 ROOT_ELEMENTS_LENGTH = 12 def setup filename = File.join(File.dirname(__FILE__), 'model/books.xml') @doc = XML::Document.file(filename) end def teardown @doc = nil end def test_children # Includes text nodes and such assert_equal(ROOT_NODES_LENGTH, @doc.root.children.length) end def test_children_iteration # Includes text nodes and such nodes = @doc.root.children.inject([]) do |arr, node| arr << node arr end assert_equal(ROOT_NODES_LENGTH, nodes.length) end def test_each # Includes text nodes and such nodes = @doc.root.inject([]) do |arr, node| arr << node arr end assert_equal(ROOT_NODES_LENGTH, nodes.length) end def test_each_element # Includes text nodes and such nodes = [] @doc.root.each_element do |node| nodes << node end assert_equal(ROOT_ELEMENTS_LENGTH, nodes.length) end def test_next nodes = [] node = @doc.root.first while node nodes << node node = node.next end assert_equal(ROOT_NODES_LENGTH, nodes.length) end def test_next? first_node = @doc.root.first assert(first_node.next?) last_node = @doc.root.last assert(!last_node.next?) end def test_prev nodes = [] node = @doc.root.last while node nodes << node node = node.prev end assert_equal(ROOT_NODES_LENGTH, nodes.length) end def test_prev? first_node = @doc.root.first assert(!first_node.prev?) last_node = @doc.root.last assert(last_node.prev?) end def test_parent? assert(!@doc.parent?) assert(@doc.root.parent?) end def test_child? assert(@doc.child?) assert(!@doc.root.first.child?) end def test_next_prev_equivalence next_nodes = [] last_nodes = [] node = @doc.root.first while node next_nodes << node node = node.next end node = @doc.root.last while node last_nodes << node node = node.prev end assert_equal(next_nodes, last_nodes.reverse) end def test_next_children_equivalence next_nodes = [] node = @doc.root.first while node next_nodes << node node = node.next end assert_equal(@doc.root.children, next_nodes) end # node = @doc.find_first('book') # node.children.each do |node| # puts 1 #end # @doc.root.children do |node| # if node.node_type == XML::Node::ELEMENT_NODE # puts node.name #end #end #assert_equal(12,nodes.length) #end #def test_doc_class #assert_instance_of(XML::Document, @doc) #end #def test_root_class #assert_instance_of(XML::Node, @doc.root) #end #def test_node_class #for n in nodes #assert_instance_of(XML::Node, n) #end #end #def test_find_class #set = @doc.find('/ruby_array/fixnum') #assert_instance_of(XML::XPath::Object, set) #end #def test_node_child_get #assert_instance_of(TrueClass, @doc.root.child?) #assert_instance_of(XML::Node, @doc.root.child) #assert_equal('fixnum', @doc.root.child.name) #end #def test_node_doc #for n in nodes #assert_instance_of(XML::Document, n.doc) if n.document? #end #end #def test_node_type_name #assert_equal('element', nodes[0].node_type_name) #assert_equal('element', nodes[1].node_type_name) #end #def test_node_find #set = @doc.root.find('./fixnum').set #assert_instance_of(XML::Node::Set, set) #for node in set #assert_instance_of(XML::Node, node) #end #end #def test_equality #node_a = @doc.find('/ruby_array/fixnum').first #node_b = @doc.root.child #assert(node_a == node_b) #assert(node_a.eql?(node_b)) #assert(node_a.equal?(node_b)) #xp2 = XML::Parser.new() #xp2.string = 'onetwo' #doc2 = xp2.parse #node_a2 = doc2.find('/ruby_array/fixnum').first #assert(node_a.to_s == node_a2.to_s) #assert(node_a == node_a2) #assert(node_a.eql?(node_a2)) #assert(!node_a.equal?(node_a2)) #end #def test_content() #assert_equal('onetwo', @doc.root.content) #first = @doc.root.child #assert_equal('one', first.content) #assert_equal('two', first.next.content) #end #def test_base #doc = XML::Parser.string('').parse #assert_nil(doc.root.base) #end end