require 'test/unit/testcase'
require 'rexml/document'
module REXMLTests
class ElementsTester < Test::Unit::TestCase
include REXML
def test_accessor
doc = Document.new ''
assert_equal 'b', doc.root.elements[1].name
assert_equal '1', doc.root.elements['c'].attributes['id']
assert_equal '2', doc.root.elements[2,'c'].attributes['id']
end
def test_indexing
doc = Document.new ''
doc.root.elements[10] = Element.new('b')
assert_equal 'b', doc.root.elements[1].name
doc.root.elements[1] = Element.new('c')
assert_equal 'c', doc.root.elements[1].name
doc.root.elements['c'] = Element.new('d')
assert_equal 'd', doc.root.elements[1].name
end
def test_delete
doc = Document.new ''
block = proc { |str|
out = ''
doc.write out
assert_equal str, out
}
b = doc.root.elements[1]
doc.root.elements.delete b
block.call( "" )
doc.elements.delete("a/c[@id='1']")
block.call( '' )
doc.root.elements.delete 1
block.call( '' )
end
def test_delete_all
doc = Document.new ''
deleted = doc.elements.delete_all 'a/c'
assert_equal 4, deleted.size
end
def test_ticket_36
doc = Document.new( "" )
deleted = doc.root.elements.delete_all( "xi:c" )
assert_equal( 1, deleted.size )
doc = Document.new( "" )
deleted = doc.root.elements.delete_all( "//xi:c" )
assert_equal( 2, deleted.size )
end
def test_add
a = Element.new 'a'
a.elements.add Element.new('b')
assert_equal 'b', a.elements[1].name
a.elements.add 'c'
assert_equal 'c', a.elements[2].name
end
def test_size
doc = Document.new 'seanelliottrussell'
assert_equal 6, doc.root.size
assert_equal 3, doc.root.elements.size
end
def test_each
doc = Document.new 'sean'
count = 0
block = proc {|e| count += 1}
doc.root.elements.each(&block)
assert_equal 6, count
count = 0
doc.root.elements.each('b', &block)
assert_equal 2, count
count = 0
doc.root.elements.each('child::node()', &block)
assert_equal 6, count
count = 0
XPath.each(doc.root, 'child::node()', &block)
assert_equal 7, count
end
def test_each_with_frozen_condition
doc = Document.new('')
names = []
doc.root.elements.each('book'.freeze) do |element|
names << element.attributes["name"]
end
assert_equal(["Ruby", "XML"], names)
end
def test_to_a
doc = Document.new 'seanelliott'
assert_equal 2, doc.root.elements.to_a.size
assert_equal 2, doc.root.elements.to_a("child::node()").size
assert_equal 4, XPath.match(doc.root, "child::node()").size
end
def test_collect
doc = Document.new( "" )
r = doc.elements.collect( "/a/b" ) { |e| e.attributes["id"].to_i }
assert_equal( [1,2], r )
end
def test_inject
doc = Document.new( "" )
r = doc.elements.inject( "/a/b", 3 ) { |s, e|
s + e.attributes["id"].to_i
}
assert_equal 6, r
end
end
end