index.js 2.8 KB

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