michael@0: function noop() {} michael@0: michael@0: function run_test() { michael@0: var evts; michael@0: michael@0: var contentHandler = { michael@0: attrs: null, michael@0: startDocument: function() { michael@0: evts.push("startDocument"); michael@0: }, michael@0: endDocument: noop, michael@0: michael@0: startElement: function startElement() { michael@0: evts.push("startElement"); michael@0: }, michael@0: michael@0: endElement: noop, michael@0: characters: noop, michael@0: processingInstruction: noop, michael@0: ignorableWhitespace: noop, michael@0: startPrefixMapping: noop, michael@0: endPrefixMapping: noop michael@0: }; michael@0: michael@0: function XMLDeclHandler(version, encoding, standalone) { michael@0: evts.splice(evts.length, 0, version, encoding, standalone); michael@0: } michael@0: michael@0: const nsISAXXMLReader = Components.interfaces.nsISAXXMLReader; michael@0: var saxReader = Components.classes["@mozilla.org/saxparser/xmlreader;1"] michael@0: .createInstance(nsISAXXMLReader); michael@0: saxReader.contentHandler = contentHandler; michael@0: saxReader.declarationHandler = XMLDeclHandler; michael@0: michael@0: evts = []; michael@0: saxReader.parseFromString("", "application/xml"); michael@0: do_check_eq(evts.length, 2); michael@0: do_check_eq(evts[0], "startDocument"); michael@0: do_check_eq(evts[1], "startElement"); michael@0: michael@0: evts = []; michael@0: saxReader.parseFromString("", "application/xml"); michael@0: do_check_eq(evts.length, 5); michael@0: do_check_eq(evts[0], "startDocument"); michael@0: do_check_eq(evts[1], "1.0"); michael@0: do_check_eq(evts[2], ""); michael@0: do_check_false(evts[3]); michael@0: do_check_eq(evts[4], "startElement"); michael@0: michael@0: evts = []; michael@0: saxReader.parseFromString("", "application/xml"); michael@0: do_check_eq(evts.length, 5); michael@0: do_check_eq(evts[0], "startDocument"); michael@0: do_check_eq(evts[1], "1.0"); michael@0: do_check_eq(evts[2], "UTF-8"); michael@0: do_check_false(evts[3]); michael@0: do_check_eq(evts[4], "startElement"); michael@0: michael@0: evts = []; michael@0: saxReader.parseFromString("", "application/xml"); michael@0: do_check_eq(evts.length, 5); michael@0: do_check_eq(evts[0], "startDocument"); michael@0: do_check_eq(evts[1], "1.0"); michael@0: do_check_eq(evts[2], ""); michael@0: do_check_true(evts[3]); michael@0: do_check_eq(evts[4], "startElement"); michael@0: michael@0: evts = []; michael@0: saxReader.parseFromString("", "application/xml"); michael@0: do_check_eq(evts.length, 5); michael@0: do_check_eq(evts[0], "startDocument"); michael@0: do_check_eq(evts[1], "1.0"); michael@0: do_check_eq(evts[2], "UTF-8"); michael@0: do_check_true(evts[3]); michael@0: do_check_eq(evts[4], "startElement"); michael@0: michael@0: evts = []; michael@0: // Not well-formed michael@0: saxReader.parseFromString("", "application/xml"); michael@0: do_check_eq(evts.length, 1); michael@0: do_check_eq(evts[0], "startDocument"); michael@0: }