diff options
Diffstat (limited to 'node_modules/htmlparser2/test/test-helper.js')
-rw-r--r-- | node_modules/htmlparser2/test/test-helper.js | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/node_modules/htmlparser2/test/test-helper.js b/node_modules/htmlparser2/test/test-helper.js new file mode 100644 index 000000000..5111259b2 --- /dev/null +++ b/node_modules/htmlparser2/test/test-helper.js @@ -0,0 +1,81 @@ +var htmlparser2 = require(".."), + fs = require("fs"), + path = require("path"), + assert = require("assert"), + Parser = htmlparser2.Parser, + CollectingHandler = htmlparser2.CollectingHandler; + +exports.writeToParser = function(handler, options, data){ + var parser = new Parser(handler, options); + //first, try to run the test via chunks + for(var i = 0; i < data.length; i++){ + parser.write(data.charAt(i)); + } + parser.end(); + //then parse everything + parser.parseComplete(data); +}; + +//returns a tree structure +exports.getEventCollector = function(cb){ + var handler = new CollectingHandler({onerror: cb, onend: function(){ + cb(null, handler.events.reduce(eventReducer, [])); + }}); + + return handler; +}; + +function eventReducer(events, arr){ + if(arr[0] === "onerror" || arr[0] === "onend"); + else if(arr[0] === "ontext" && events.length && events[events.length-1].event === "text"){ + events[events.length-1].data[0] += arr[1]; + } else { + events.push({ + event: arr[0].substr(2), + data: arr.slice(1) + }); + } + + return events; +} + +function getCallback(expected, done){ + var repeated = false; + + return function(err, actual){ + assert.ifError(err); + try { + assert.deepEqual(expected, actual, "didn't get expected output"); + } catch(e){ + e.expected = JSON.stringify(expected, null, 2); + e.actual = JSON.stringify(actual, null, 2); + throw e; + } + + if(repeated) done(); + else repeated = true; + }; +} + +exports.mochaTest = function(name, root, test){ + describe(name, readDir); + + function readDir(cb){ + var dir = path.join(root, name); + + fs + .readdirSync(dir) + .filter(RegExp.prototype.test, /^[^\._]/) //ignore all files with a leading dot or underscore + .map(function(name){ + return path.join(dir, name); + }) + .map(require) + .forEach(runTest); + } + + function runTest(file){ + it(file.name, function(done){ + test(file, getCallback(file.expected, done)); + }); + } +};
\ No newline at end of file |