87 lines
2.8 KiB
JavaScript
87 lines
2.8 KiB
JavaScript
|
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" : ""))
|
||
|
})
|
||
|
}
|