var globalsBefore = JSON.stringify(Object.keys(global)) , util = require("util") , assert = require("assert") , fs = require("fs") , path = require("path") , sax = require("../lib/sax") exports.sax = sax // handy way to do simple unit tests // if the options contains an xml string, it'll be written and the parser closed. // otherwise, it's assumed that the test will write and close. exports.test = function test (options) { var xml = options.xml , parser = sax.parser(options.strict, options.opt) , expect = options.expect , e = 0 sax.EVENTS.forEach(function (ev) { parser["on" + ev] = function (n) { if (process.env.DEBUG) { console.error({ expect: expect[e] , actual: [ev, n] }) } if (e >= expect.length && (ev === "end" || ev === "ready")) return assert.ok( e < expect.length, "expectation #"+e+" "+util.inspect(expect[e])+"\n"+ "Unexpected event: "+ev+" "+(n ? util.inspect(n) : "")) var inspected = n instanceof Error ? "\n"+ n.message : util.inspect(n) assert.equal(ev, expect[e][0], "expectation #"+e+"\n"+ "Didn't get expected event\n"+ "expect: "+expect[e][0] + " " +util.inspect(expect[e][1])+"\n"+ "actual: "+ev+" "+inspected+"\n") if (ev === "error") assert.equal(n.message, expect[e][1]) else assert.deepEqual(n, expect[e][1], "expectation #"+e+"\n"+ "Didn't get expected argument\n"+ "expect: "+expect[e][0] + " " +util.inspect(expect[e][1])+"\n"+ "actual: "+ev+" "+inspected+"\n") e++ if (ev === "error") parser.resume() } }) if (xml) parser.write(xml).close() return parser } if (module === require.main) { var running = true , failures = 0 function fail (file, er) { util.error("Failed: "+file) util.error(er.stack || er.message) failures ++ } fs.readdir(__dirname, function (error, files) { files = files.filter(function (file) { return (/\.js$/.exec(file) && file !== 'index.js') }) var n = files.length , i = 0 console.log("0.." + n) files.forEach(function (file) { // run this test. try { require(path.resolve(__dirname, file)) var globalsAfter = JSON.stringify(Object.keys(global)) if (globalsAfter !== globalsBefore) { var er = new Error("new globals introduced\n"+ "expected: "+globalsBefore+"\n"+ "actual: "+globalsAfter) globalsBefore = globalsAfter throw er } console.log("ok " + (++i) + " - " + file) } catch (er) { console.log("not ok "+ (++i) + " - " + file) fail(file, er) } }) if (!failures) return console.log("#all pass") else return console.error(failures + " failure" + (failures > 1 ? "s" : "")) }) }