1 var fs = require("fs"),
2 path = require("path"),
3 assert = require("assert"),
4 util = require("util"),
5 Parser = require("htmlparser2").Parser,
6 Handler = require("../");
8 var basePath = path.resolve(__dirname, "cases"),
9 inspectOpts = { showHidden: true, depth: null };
12 .readdirSync(basePath)
13 .filter(RegExp.prototype.test, /\.json$/) //only allow .json files
15 return path.resolve(basePath, name);
18 .forEach(function(test){
19 it(test.name, function(){
20 var expected = test.expected;
22 var handler = new Handler(function(err, actual){
25 compare(expected, actual);
27 e.expected = util.inspect(expected, inspectOpts);
28 e.actual = util.inspect(actual, inspectOpts);
35 var parser = new Parser(handler, test.options);
37 //first, try to run the test via chunks
38 if (test.streaming || test.streaming === undefined){
39 for(var i = 0; i < data.length; i++){
40 parser.write(data.charAt(i));
45 //then parse everything
46 parser.parseComplete(data);
50 function compare(expected, result){
51 assert.equal(typeof expected, typeof result, "types didn't match");
52 if(typeof expected !== "object" || expected === null){
53 assert.strictEqual(expected, result, "result doesn't equal expected");
55 for(var prop in expected){
56 assert.ok(prop in result, "result didn't contain property " + prop);
57 compare(expected[prop], result[prop]);