neingeist
/
neinomaten
Archived
1
0
Fork 0
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

143 lines
4.8 KiB
Ruby

require 'test/unit'
require 'htree'
class TestSubnode < Test::Unit::TestCase
def test_elem_get
e1 = HTree.parse("<a href=x>abc</a>").root
assert_equal(HTree::Text.new("x"), e1.get_subnode("href"))
assert_equal(HTree::Text.new("abc"), e1.get_subnode(0))
end
def test_elem_subst
e1 = HTree.parse_xml("<a href=x>abc</a>").root
e2 = e1.subst_subnode("href"=>"xxx", 0=>"def")
assert_equal("a", e2.name)
assert_equal("xxx", e2.fetch_attr("href"))
assert_equal([HTree::Text.new("def")], e2.children)
assert_equal([], e1.subst_subnode(0=>nil).children)
end
def test_elem_subst_empty
e1 = HTree.parse("<img />").root
assert_equal(true, e1.empty_element?)
assert_equal(true, e1.subst_subnode("src"=>"xxx").empty_element?)
assert_equal(false, e1.subst_subnode(0=>"xxx").empty_element?)
end
def test_elem_multiple_attr_value
h = {"b"=>"c", HTree::Name.new(nil, "", "b")=>"d"}
assert_match(/\A(cd|dc)\z/,
HTree::Elem.new("a").subst_subnode(h).get_subnode('b').to_s)
a = [["b","c"], [HTree::Name.new(nil, "", "b"),"d"]]
assert_equal('cd',
HTree::Elem.new("a").subst_subnode(a).get_subnode('b').to_s)
assert_equal('dc',
HTree::Elem.new("a").subst_subnode(a.reverse).get_subnode('b').to_s)
end
def test_elem_subst_outrange
e1 = HTree("<r>abc</r>").root
e2 = e1.subst_subnode(-1=>HTree('<x/>'), 1=>HTree('<y/>'))
assert_equal(HTree('<r><x/>abc<y/></r>').root, e2)
end
def test_doc_subst_outrange
d1 = HTree("<r>abc</r>")
d2 = d1.subst_subnode(-1=>HTree('<x/>'), 1=>HTree('<y/>'))
assert_equal(HTree('<x/><r>abc</r><y/>'), d2)
end
def test_doc_get
doc = HTree.parse("<?xml?><a href=x>abc</a> ")
assert_equal(doc.root, doc.get_subnode(1))
end
def test_doc_subst
doc1 = HTree.parse("<?xml?><a href=x>abc</a> ")
doc2 = doc1.subst_subnode(1=>"yy")
assert_equal(HTree::Text.new("yy"), doc2.children[1])
assert_equal([], doc1.subst_subnode(0=>nil, 1=>nil, 2=>nil).children)
end
def test_doc_loc
d1 = HTree.parse("<r>a</r>")
d2 = HTree.parse("<q/>")
assert_equal(d2, d1.subst_subnode(0=>d2.make_loc))
end
def test_doc
e = HTree.parse("<r>a</r>").root
d = HTree.parse("<?xml version='1.0'?><!DOCTYPE q><q/>")
r = HTree('<r><q/></r>').root
assert_equal(r, e.subst_subnode(0=>d))
assert_equal(r, e.subst_subnode(0=>d.make_loc))
assert_equal(r, e.subst_subnode(0=>[d]))
assert_equal(r, e.subst_subnode(0=>[d.make_loc]))
end
def test_doc2
e = HTree.parse("<r>a</r>")
d = HTree.parse("<?xml version='1.0'?><!DOCTYPE q><q/>")
r = HTree('<q/>')
assert_equal(r, e.subst_subnode(0=>d))
assert_equal(r, e.subst_subnode(0=>d.make_loc))
assert_equal(r, e.subst_subnode(0=>[d]))
assert_equal(r, e.subst_subnode(0=>[d.make_loc]))
end
def test_change_by_subst_itself
l = HTree("<r>a</r>").make_loc
l2 = l.get_subnode(0, 0).subst_itself('x')
assert_equal(HTree::Text.new('x'), l2.to_node)
assert_equal(HTree('<r>x</r>'), l2.top.to_node)
l2 = l.get_subnode(0).subst_itself('xxx')
assert_equal(HTree::Text.new('xxx'), l2.to_node)
assert_equal(HTree('xxx'), l2.top.to_node)
end
def test_add_by_subst_itself
l = HTree("<r>a</r>").make_loc
l2 = l.get_subnode(0, 'x').subst_itself('y')
assert_equal(HTree::Text.new('y'), l2.to_node)
assert_equal(HTree('<r x="y">a</r>'), l2.top.to_node)
l2 = l.get_subnode(0, 0).subst_itself('b')
assert_equal(HTree::Text.new('b'), l2.to_node)
assert_equal(HTree('<r>b</r>'), l2.top.to_node)
xmldecl = HTree('<?xml version="1.0"?>').get_subnode(0)
l2 = l.get_subnode(-1).subst_itself(xmldecl)
assert_equal(0, l2.index)
assert_equal(xmldecl, l2.to_node)
assert_equal(HTree('<?xml version="1.0"?><r>a</r>'), l2.top.to_node)
procins = HTree('<?xxx yyy?>').get_subnode(0)
l2 = l.get_subnode(10).subst_itself(procins)
assert_equal(1, l2.index)
assert_equal(procins, l2.to_node)
assert_equal(HTree('<r>a</r><?xxx yyy?>'), l2.top.to_node)
end
def test_del_by_subst_itself
l = HTree("<r x='y'><x/>y<z/></r>").make_loc
l2 = l.get_subnode(0, 'x').subst_itself(nil)
assert_equal(nil, l2.to_node)
assert_equal(HTree('<r><x/>y<z/></r>'), l2.top.to_node)
l2 = l.get_subnode(0, 1).subst_itself(nil)
assert_equal(HTree('<r x="y"><x/><z/></r>'), l2.top.to_node)
l = HTree('<?xml version="1.0"?><r/>').make_loc
l2 = l.get_subnode(0).subst_itself(nil)
assert_equal(HTree('<r/>'), l2.top.to_node)
end
def test_subst
l = HTree('<?xml version="1.0"?><r><x/><y/><z/></r>').make_loc
assert_equal(HTree("<r>x<y>a</y><z k=v /></r>"),
l.to_node.subst({
l.get_subnode(0) => nil,
l.get_subnode(1, 0) => 'x',
l.get_subnode(1, 1, 0) => 'a',
l.get_subnode(1, 2, 'k') => 'v'
}))
end
end