aboutsummaryrefslogtreecommitdiff
path: root/node_modules/htmlparser2/test/test-helper.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-05-03 15:35:00 +0200
committerFlorian Dold <florian.dold@gmail.com>2017-05-03 15:35:00 +0200
commitde98e0b232509d5f40c135d540a70e415272ff85 (patch)
treea79222a5b58484ab3b80d18efcaaa7ccc4769b33 /node_modules/htmlparser2/test/test-helper.js
parente0c9d480a73fa629c1e4a47d3e721f1d2d345406 (diff)
node_modules
Diffstat (limited to 'node_modules/htmlparser2/test/test-helper.js')
-rw-r--r--node_modules/htmlparser2/test/test-helper.js81
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