Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80684 views
1
var htmlparser2 = require(".."),
2
fs = require("fs"),
3
path = require("path"),
4
assert = require("assert"),
5
Parser = htmlparser2.Parser,
6
CollectingHandler = htmlparser2.CollectingHandler;
7
8
exports.writeToParser = function(handler, options, data){
9
var parser = new Parser(handler, options);
10
//first, try to run the test via chunks
11
for(var i = 0; i < data.length; i++){
12
parser.write(data.charAt(i));
13
}
14
parser.end();
15
//then parse everything
16
parser.parseComplete(data);
17
};
18
19
//returns a tree structure
20
exports.getEventCollector = function(cb){
21
var handler = new CollectingHandler({onerror: cb, onend: onend});
22
23
return handler;
24
25
function onend(){
26
cb(null, handler.events.reduce(eventReducer, []));
27
}
28
};
29
30
function eventReducer(events, arr){
31
if(arr[0] === "onerror" || arr[0] === "onend");
32
else if(arr[0] === "ontext" && events.length && events[events.length - 1].event === "text"){
33
events[events.length - 1].data[0] += arr[1];
34
} else {
35
events.push({
36
event: arr[0].substr(2),
37
data: arr.slice(1)
38
});
39
}
40
41
return events;
42
}
43
44
function getCallback(expected, done){
45
var repeated = false;
46
47
return function(err, actual){
48
assert.ifError(err);
49
try {
50
assert.deepEqual(expected, actual, "didn't get expected output");
51
} catch(e){
52
e.expected = JSON.stringify(expected, null, 2);
53
e.actual = JSON.stringify(actual, null, 2);
54
throw e;
55
}
56
57
if(repeated) done();
58
else repeated = true;
59
};
60
}
61
62
exports.mochaTest = function(name, root, test){
63
describe(name, readDir);
64
65
function readDir(){
66
var dir = path.join(root, name);
67
68
fs
69
.readdirSync(dir)
70
.filter(RegExp.prototype.test, /^[^\._]/) //ignore all files with a leading dot or underscore
71
.map(function(name){
72
return path.join(dir, name);
73
})
74
.map(require)
75
.forEach(runTest);
76
}
77
78
function runTest(file){
79
it(file.name, function(done){
80
test(file, getCallback(file.expected, done));
81
});
82
}
83
};
84
85