UNPKG

2.9 kBJavaScriptView Raw
1var globalsBefore = JSON.stringify(Object.keys(global))
2 , util = require("util")
3 , assert = require("assert")
4 , fs = require("fs")
5 , path = require("path")
6 , sax = require("../lib/sax")
7
8exports.sax = sax
9
10// handy way to do simple unit tests
11// if the options contains an xml string, it'll be written and the parser closed.
12// otherwise, it's assumed that the test will write and close.
13exports.test = function test (options) {
14 var xml = options.xml
15 , parser = sax.parser(options.strict, options.opt)
16 , expect = options.expect
17 , e = 0
18 sax.EVENTS.forEach(function (ev) {
19 parser["on" + ev] = function (n) {
20 if (process.env.DEBUG) {
21 console.error({ expect: expect[e]
22 , actual: [ev, n] })
23 }
24 if (e >= expect.length && (ev === "end" || ev === "ready")) return
25 assert.ok( e < expect.length,
26 "expectation #"+e+" "+util.inspect(expect[e])+"\n"+
27 "Unexpected event: "+ev+" "+(n ? util.inspect(n) : ""))
28 var inspected = n instanceof Error ? "\n"+ n.message : util.inspect(n)
29 assert.equal(ev, expect[e][0],
30 "expectation #"+e+"\n"+
31 "Didn't get expected event\n"+
32 "expect: "+expect[e][0] + " " +util.inspect(expect[e][1])+"\n"+
33 "actual: "+ev+" "+inspected+"\n")
34 if (ev === "error") assert.equal(n.message, expect[e][1])
35 else assert.deepEqual(n, expect[e][1],
36 "expectation #"+e+"\n"+
37 "Didn't get expected argument\n"+
38 "expect: "+expect[e][0] + " " +util.inspect(expect[e][1])+"\n"+
39 "actual: "+ev+" "+inspected+"\n")
40 e++
41 if (ev === "error") parser.resume()
42 }
43 })
44 if (xml) parser.write(xml).close()
45 return parser
46}
47
48if (module === require.main) {
49 var running = true
50 , failures = 0
51
52 function fail (file, er) {
53 util.error("Failed: "+file)
54 util.error(er.stack || er.message)
55 failures ++
56 }
57
58 fs.readdir(__dirname, function (error, files) {
59 files = files.filter(function (file) {
60 return (/\.js$/.exec(file) && file !== 'index.js')
61 })
62 var n = files.length
63 , i = 0
64 console.log("0.." + n)
65 files.forEach(function (file) {
66 // run this test.
67 try {
68 require(path.resolve(__dirname, file))
69 var globalsAfter = JSON.stringify(Object.keys(global))
70 if (globalsAfter !== globalsBefore) {
71 var er = new Error("new globals introduced\n"+
72 "expected: "+globalsBefore+"\n"+
73 "actual: "+globalsAfter)
74 globalsBefore = globalsAfter
75 throw er
76 }
77 console.log("ok " + (++i) + " - " + file)
78 } catch (er) {
79 console.log("not ok "+ (++i) + " - " + file)
80 fail(file, er)
81 }
82 })
83 if (!failures) return console.log("#all pass")
84 else return console.error(failures + " failure" + (failures > 1 ? "s" : ""))
85 })
86}