feat: adds test cases for AsyncParser

This commit is contained in:
dangoo
2019-04-10 11:58:00 +02:00
parent 62b1431d55
commit ae50a2568d
+66 -9
View File
@@ -1,5 +1,7 @@
import json2csv, { parse, Parser, Transform } from 'json2csv';
import { Transform as NodeTransform } from 'stream';
import { createReadStream, createWriteStream } from 'fs';
import json2csv, { AsyncParser, parse, Parser, parseAsync, Transform } from 'json2csv';
let s: string;
let obj: object;
@@ -17,15 +19,19 @@ parse({});
parse([]);
parse({}, {});
new Parser();
const parser: Parser<ExampleObj> = new Parser({});
s = parser.parse({ str: '', num: 1, obj: {} });
parser.parse([]);
const transform: Transform<ExampleObj> = new Transform<ExampleObj>({ quote: '' });
const nodeTransform: NodeTransform = transform;
// Tests using examples from Readme
interface Car {
car: string;
price: number;
}
new Parser();
const parser: Parser<ExampleObj> = new Parser({});
s = parser.parse({ str: '', num: 1, obj: {} });
const opts: json2csv.Options<Car> = {
fields: [{
label: 'Car Name',
@@ -36,11 +42,62 @@ const opts: json2csv.Options<Car> = {
}]
};
const json2csvParser = new Parser<Car>(opts);
const data = [{
car: 'VW Beetle',
price: 1395
}, {
car: 'VW T1',
price: 1357
}];
parser.parse([]);
const transform: Transform<ExampleObj> = new Transform<ExampleObj>({ quote: '' });
const nodeTransform: NodeTransform = transform;
// Test for Synchronous Parser
try {
const parser = new Parser(opts);
const csv = parser.parse({ car: '', price: 1 });
console.log(csv);
} catch (err) {
console.error(err);
}
// Test convenience method "parse"
try {
const csv = parse(data, opts);
console.log(csv);
} catch (err) {
console.error(err);
}
// Test for Asynchronous Parser
const transformOpts = { highWaterMark: 8192 };
const asyncParser = new AsyncParser(opts, transformOpts);
let csv = '';
asyncParser.processor
.on('data', chunk => (csv += chunk.toString()))
.on('end', () => console.log(csv))
.on('error', err => console.error(err));
// Test for transform events
asyncParser.transform
.on('header', header => console.log(header))
.on('line', line => console.log(line))
.on('error', err => console.log(err));
asyncParser.input.push(data); // This data might come from an HTTP request, etc.
asyncParser.input.push(null); // Sending `null` to a stream signal that no more data is expected and ends it.
const input = createReadStream('/path/to/input', { encoding: 'utf8' });
const output = createWriteStream('path/to/output', { encoding: 'utf8' });
asyncParser.fromInput(input).toOutput(output).promise()
.then(csv => console.log(csv))
.catch(err => console.error(err));
// Test convenience method "parseAsync"
parseAsync(data, opts)
.then(csv => console.log(csv))
.catch(err => console.error(err));
/********************
* Internal Methods *