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