| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 | var fs = require("fs"),    path = require("path"),    assert = require("assert"),    util = require("util"),    Parser = require("htmlparser2").Parser,    Handler = require("../");var basePath = path.resolve(__dirname, "cases"),    inspectOpts = { showHidden: true, depth: null };fs.readdirSync(basePath).filter(RegExp.prototype.test, /\.json$/) //only allow .json files.map(function(name){	return path.resolve(basePath, name);}).map(require).forEach(function(test){	it(test.name, function(){		var expected = test.expected;		var handler = new Handler(function(err, actual){			assert.ifError(err);			try {				compare(expected, actual);			} catch(e){				e.expected = util.inspect(expected, inspectOpts);				e.actual   = util.inspect(actual,   inspectOpts);				throw e;			}		}, test.options);		var data = test.html;		var parser = new Parser(handler, test.options);		//first, try to run the test via chunks		if (test.streaming || test.streaming === undefined){			for(var i = 0; i < data.length; i++){				parser.write(data.charAt(i));			}			parser.done();		}		//then parse everything		parser.parseComplete(data);	});});function compare(expected, result){	assert.equal(typeof expected, typeof result, "types didn't match");	if(typeof expected !== "object" || expected === null){		assert.strictEqual(expected, result, "result doesn't equal expected");	} else {		for(var prop in expected){			assert.ok(prop in result, "result didn't contain property " + prop);			compare(expected[prop], result[prop]);		}	}}
 |