1 |
|
2 | var util = require("util")
|
3 | , assert = require("assert")
|
4 | , fs = require("fs")
|
5 | , path = require("path")
|
6 | , sax = require("../lib/sax")
|
7 |
|
8 | exports.sax = sax
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | exports.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 |
|
48 | if (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 |
|
67 | try {
|
68 | require(path.resolve(__dirname, file))
|
69 | console.log("ok " + (++i) + " - " + file)
|
70 | } catch (er) {
|
71 | console.log("not ok "+ (++i) + " - " + file)
|
72 | fail(file, er)
|
73 | }
|
74 | })
|
75 | if (!failures) return console.log("#all pass")
|
76 | else return console.error(failures + " failure" + (failures > 1 ? "s" : ""))
|
77 | })
|
78 | }
|