/
html_parser.js
60 lines (54 loc) · 1.66 KB
/
html_parser.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
var fs = require('fs');
var libxml = require('../index');
function make_error(object) {
var err = new Error(object.message);
err.domain = object.domain;
err.code = object.code;
err.level = object.level;
err.line = object.line;
err.column = object.column;
return err;
}
module.exports.parse = function(assert) {
var filename = __dirname + '/fixtures/parser.html';
var str = fs.readFileSync(filename, 'utf8');
var doc = libxml.parseHtmlString(str);
assert.equal('html', doc.root().name());
assert.equal('Test HTML document', doc.get('head/title').text());
assert.equal('HTML content!', doc.get('body/span').text());
assert.done();
};
module.exports.recoverable_parse = function(assert) {
var recoverableFile = __dirname +'/fixtures/warnings/amp.html';
var str = fs.readFileSync(recoverableFile, 'utf8');
var recoverableErrors = [
make_error({ domain: 5,
code: 23,
message: "htmlParseEntityRef: expecting ';'\n",
level: 2,
line: 12,
column: 27 }),
make_error({ domain: 5,
code: 68,
message: "htmlParseEntityRef: no name\n",
level: 2,
line: 12,
column: 38 }),
make_error({ domain: 5,
code: 23,
message: "htmlParseEntityRef: expecting ';'\n",
level: 2,
line: 14,
column: 4 }),
make_error({ domain: 5,
code: 68,
message: "htmlParseEntityRef: no name\n",
level: 2,
line: 15,
column: 4 })
];
var doc = libxml.parseHtmlString(str);
assert.equal(4, doc.errors.length);
assert.deepEqual(recoverableErrors, doc.errors);
assert.done();
};