require 'runit/testcase'
require 'msxml'
require 'msxml/loader'
class MsxmlTest < RUNIT::TestCase
def assert_node_document(document)
assert_not_nil(document)
assert_equals(Msxml::NODE_DOCUMENT, document.nodeType)
end
def assert_node_element(element)
assert_not_nil(element)
assert_equals(Msxml::NODE_ELEMENT, element.nodeType)
end
def test_new
doc = Msxml.new
assert_node_document(doc)
end
def test_open
assert_no_exception(Msxml::ParseError) do
doc = Msxml.open('hello.xml')
assert_node_document(doc)
end
ex = assert_exception(Msxml::ParseError) do
doc = Msxml.open('not_exist.xml')
end
assert_equals("\nnot_exist.xml: システム エラー: -2146697210\n", ex.message)
ex = assert_exception(Msxml::ParseError) do
doc = Msxml.open('error.xml')
end
msg = "\nerror.xml:2:25: 終了タグ 'greeting' が開始タグ 'greting' と一致していません。\n"
assert_equals(msg, ex.message)
end
def test_loadXML
doc = Msxml.new
doc.loadXML('Hello, world!')
assert_node_document(doc)
end
def test_childNodes
loader = Msxml::Loader.new
loader.xml = ""
count = 0
for node in loader.doc.documentElement.childNodes
assert_equals('a', node.nodeName)
count += 1
end
assert_equals(2, count)
end
def test_node_element
loader = Msxml::Loader.new
testXML = 'Ruby is a scripting language.'
loader.xml = testXML
lang = loader.doc.documentElement
assert_node_element(lang)
assert_equals("lang", lang.nodeName)
assert_equals("lang", lang.tagName)
assert_equals("Ruby is a scripting language.", lang.text)
assert_equals(testXML, lang.xml)
assert_equals("ruby", lang.getAttribute("name"))
assert_equals("script", lang.getAttribute("type"))
end
def test_getElementsByTagName
doc = Msxml::open('books.xml')
expected_names = [
"新版 C言語プログラミングのエッセンス",
"Designing Object-Oriented Software",
"Using CRC Cards",
]
expected_isbns = [
"4-89052-868-7",
"0-13-629825-7",
"1-884842-07-0",
]
count = 0
for book in doc.documentElement.getElementsByTagName("本")
name = book.getAttribute("名前")
assert_equals(expected_names[count], name)
isbn = book.getElementsByTagName("ISBN").item(0)
assert_equals(expected_isbns[count], isbn.text)
count += 1
end
assert_equals(expected_names.length, count)
end
end
if __FILE__ == $0
require 'runit/cui/testrunner'
RUNIT::CUI::TestRunner.run(MsxmlTest.suite)
end