You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.5 KiB
60 lines
1.5 KiB
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]); |
|
} |
|
} |
|
} |