typescriptify and cleanup
This commit is contained in:
82
test/pause_and_resume.spec.ts
Normal file
82
test/pause_and_resume.spec.ts
Normal file
@@ -0,0 +1,82 @@
|
||||
import fs from "fs";
|
||||
import "mocha";
|
||||
import should from "should";
|
||||
import stream from "stream";
|
||||
import zlib from "zlib";
|
||||
|
||||
import { XmlParser } from "../src/parser";
|
||||
describe("pause and resume", () => {
|
||||
it("should properly parse a simple file.", function(done) {
|
||||
const xmlStream = fs.createReadStream("./test/TestFiles/item.xml");
|
||||
const parser = new XmlParser({ resourcePath: "/items/item" });
|
||||
const expectedData = [
|
||||
{
|
||||
$: { id: "1", test: "hello" },
|
||||
subitem:
|
||||
[{ $: { sub: "TESTING SUB" }, _: "one" },
|
||||
{ $: { sub: "2" }, _: "two" }]
|
||||
},
|
||||
{
|
||||
$: { id: "2" },
|
||||
subitem: [{ _: "three" }, { _: "four" }, { _: "five" }]
|
||||
}];
|
||||
const actualData: string[] = [];
|
||||
let dataEventCount = 0;
|
||||
let isSetTimeoutHappened = true;
|
||||
this.timeout(4000);
|
||||
parser.on("data", (data) => {
|
||||
actualData.push(data);
|
||||
parser.pause();
|
||||
should(isSetTimeoutHappened).equal(true);
|
||||
setTimeout(() => {
|
||||
parser.resume();
|
||||
isSetTimeoutHappened = true;
|
||||
}, 1000);
|
||||
dataEventCount++;
|
||||
isSetTimeoutHappened = false;
|
||||
});
|
||||
|
||||
parser.on("error", (err) => {
|
||||
done(err);
|
||||
});
|
||||
|
||||
parser.on("end", () => {
|
||||
// console.log('actualData=', actualData)
|
||||
// console.log('dataEventCount=', dataEventCount)
|
||||
should(actualData).deepEqual(expectedData);
|
||||
should(dataEventCount).equal(2);
|
||||
done();
|
||||
});
|
||||
xmlStream.pipe(parser);
|
||||
});
|
||||
|
||||
it("should emit data events with 1sec interval between each using pause and resume.", function(done) {
|
||||
const xmlStream = fs.createReadStream("./test/TestFiles/medium.xml");
|
||||
const parser = new XmlParser({ resourcePath: "/items/item" });
|
||||
|
||||
let dataEventCount = 0;
|
||||
let isSetTimeoutHappened = true;
|
||||
this.timeout(20000);
|
||||
parser.on("data", (data) => {
|
||||
parser.pause();
|
||||
should(isSetTimeoutHappened).equal(true);
|
||||
setTimeout(() => {
|
||||
parser.resume();
|
||||
isSetTimeoutHappened = true;
|
||||
}, 1000);
|
||||
dataEventCount++;
|
||||
isSetTimeoutHappened = false;
|
||||
});
|
||||
|
||||
parser.on("error", (err) => {
|
||||
done(err);
|
||||
});
|
||||
|
||||
parser.on("end", () => {
|
||||
// console.log('dataEventCount=', dataEventCount)
|
||||
should(dataEventCount).equal(10);
|
||||
done();
|
||||
});
|
||||
xmlStream.pipe(parser);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user