forked from jeresig/env-js
/
parser.js
92 lines (76 loc) · 3.88 KB
/
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
// environment mocking for parser
$w = { }
$env = { debug: function() {} }
$parentWindow = $initTop = null;
load("src/window/window.js", "src/dom/parser.js", "src/dom/entities.js");
module("parser");
test("Entity replaced", function() {
expect(14);
var htmlstr = "<html><body>Hello, "World"!</body></html>";
var p = new XMLP(htmlstr);
equals(XMLP._ELM_B, p.next(), "Opening html tag"); // _ELM_B <html>
equals(XMLP._ELM_B, p.next(), "Opening body tag"); // _ELM_B <body>
equals(XMLP._TEXT, p.next(), "Parser emits text event");
var actual = p.getContent().substring(p.getContentBegin(), p.getContentEnd());
equals("Hello, ", actual, "Parser content set");
equals(XMLP._ENTITY, p.next(), "Parser emits entity event");
actual = p.getContent().substring(p.getContentBegin(), p.getContentEnd());
equals('"', actual, "Parser replaces " entity");
equals(XMLP._TEXT, p.next(), "Parser emits second text event");
actual = p.getContent().substring(p.getContentBegin(), p.getContentEnd());
equals("World", actual, "Parser content set");
equals(XMLP._ENTITY, p.next(), "Parser emits second entity event");
actual = p.getContent().substring(p.getContentBegin(), p.getContentEnd());
equals('"', actual, "Parser replaces second " entity");
equals(XMLP._TEXT, p.next(), "Parser emits third text event");
actual = p.getContent().substring(p.getContentBegin(), p.getContentEnd());
equals('!', actual, "Parser content set");
equals(XMLP._ELM_E, p.next(), "Closing body tag"); // _ELM_E </body>
equals(XMLP._ELM_E, p.next(), "Closing html tag"); // _ELM_E </html>
});
test("HTML standard entities spot-check", function() {
// test definition
var numentities = 23;
var numexpect = 2 + (4*numentities);
expect(numexpect)
var htmlstr = "<html><body>" & < > "+
" © ® ¥ ¶ " +
"Ê Õ æ ÷ Κ θ "+
"• … ™ ⇒ ∑ ♣ " +
"  — </body></html>";
var expected = [ '"', '&', '<', '>',
'\xA0', '\xA9','\xAE','\xA5','\xB6',
'\xCA', '\xD5', '\xE6', '\xF7', '\u039A','\u03B8',
'\u2022','\u2026','\u2122','\u21D2','\u2211','\u2663',
'\u2002','\u2014' ];
// get started
var p = new XMLP(htmlstr);
equals(XMLP._ELM_B, p.next(), "Opening html tag"); // _ELM_B <html>
equals(XMLP._ELM_B, p.next(), "Opening body tag"); // _ELM_B <body>
// check entities
for (idx=0; idx < numentities; idx++) {
equals(XMLP._ENTITY, p.next(), "Parser emits entity event -- '" +
expected[idx] + "'");
actual = p.getContent().substring(
p.getContentBegin(), p.getContentEnd());
equals(expected[idx], actual, "Parser replaces entity -- '" +
expected[idx] + "'");
equals(XMLP._TEXT, p.next(), "Parser emits text event");
actual = p.getContent().substring(
p.getContentBegin(), p.getContentEnd());
equals(" ", actual, "Parser content set");
}
});
test("Toggle entity replacement", function() {
expect(6);
var htmlstr = "<html><body>Hello, "World"!</body></html>";
var p = new XMLP(htmlstr);
p.replaceEntities = false;
equals(XMLP._ELM_B, p.next(), "Opening html tag"); // _ELM_B <html>
equals(XMLP._ELM_B, p.next(), "Opening body tag"); // _ELM_B <body>
equals(XMLP._TEXT, p.next(), "Parser emits text event");
var actual = p.getContent().substring(p.getContentBegin(), p.getContentEnd());
equals("Hello, "World"!", actual, "Parser content set");
equals(XMLP._ELM_E, p.next(), "Closing body tag"); // _ELM_E </body>
equals(XMLP._ELM_E, p.next(), "Closing html tag"); // _ELM_E </html>
});