Skip to content

Commit 08b2040

Browse files
authored
fix(tokenizer): Don't process data after error (#923)
Also add a test for multi-byte entities, and change the Jest coverage provider to V8.
1 parent 58ee36c commit 08b2040

File tree

4 files changed

+31
-3
lines changed

4 files changed

+31
-3
lines changed

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@
6767
},
6868
"jest": {
6969
"preset": "ts-jest",
70-
"testEnvironment": "node"
70+
"testEnvironment": "node",
71+
"coverageProvider": "v8"
7172
},
7273
"prettier": {
7374
"tabWidth": 4

src/Tokenizer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -315,14 +315,14 @@ export default class Tokenizer {
315315
}
316316

317317
public write(chunk: string): void {
318-
if (this.ended) this.cbs.onerror(Error(".write() after done!"));
318+
if (this.ended) return this.cbs.onerror(Error(".write() after done!"));
319319
if (this.buffer.length) this.buffer += chunk;
320320
else this.buffer = chunk;
321321
this.parse();
322322
}
323323

324324
public end(chunk?: string): void {
325-
if (this.ended) this.cbs.onerror(Error(".end() after done!"));
325+
if (this.ended) return this.cbs.onerror(Error(".end() after done!"));
326326
if (chunk) this.write(chunk);
327327
this.ended = true;
328328
if (this.running) this.finish();
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"name": "Multi-byte entity",
3+
"html": "≧̸",
4+
"expected": [
5+
{
6+
"data": ["≧̸"],
7+
"event": "text"
8+
}
9+
]
10+
}

src/__tests__/events.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { Parser } from "..";
12
import * as helper from "../__fixtures__/test-helper";
23

34
helper.createSuite("Events", (test, cb) =>
@@ -7,3 +8,19 @@ helper.createSuite("Events", (test, cb) =>
78
test.html
89
)
910
);
11+
12+
describe("Helper", () => {
13+
it("should handle errors", () => {
14+
const eventCb = jest.fn();
15+
const parser = new Parser(helper.getEventCollector(eventCb));
16+
17+
parser.end();
18+
parser.write("foo");
19+
20+
expect(eventCb).toHaveBeenCalledTimes(2);
21+
expect(eventCb).toHaveBeenNthCalledWith(1, null, []);
22+
expect(eventCb).toHaveBeenLastCalledWith(
23+
new Error(".write() after done!")
24+
);
25+
});
26+
});

0 commit comments

Comments
 (0)