Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
81149 views
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("../");
7
8
var basePath = path.resolve(__dirname, "cases"),
9
inspectOpts = { showHidden: true, depth: null };
10
11
fs
12
.readdirSync(basePath)
13
.filter(RegExp.prototype.test, /\.json$/) //only allow .json files
14
.map(function(name){
15
return path.resolve(basePath, name);
16
})
17
.map(require)
18
.forEach(function(test){
19
it(test.name, function(){
20
var expected = test.expected;
21
22
var handler = new Handler(function(err, actual){
23
assert.ifError(err);
24
try {
25
compare(expected, actual);
26
} catch(e){
27
e.expected = util.inspect(expected, inspectOpts);
28
e.actual = util.inspect(actual, inspectOpts);
29
throw e;
30
}
31
}, test.options);
32
33
var data = test.html;
34
35
var parser = new Parser(handler, test.options);
36
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));
41
}
42
parser.done();
43
}
44
45
//then parse everything
46
parser.parseComplete(data);
47
});
48
});
49
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");
54
} else {
55
for(var prop in expected){
56
assert.ok(prop in result, "result didn't contain property " + prop);
57
compare(expected[prop], result[prop]);
58
}
59
}
60
}
61