first commit
This commit is contained in:
302
web-app/node_modules/papaparse/tests/node-tests.js
generated
vendored
Normal file
302
web-app/node_modules/papaparse/tests/node-tests.js
generated
vendored
Normal file
@@ -0,0 +1,302 @@
|
||||
"use strict";
|
||||
|
||||
var Papa = require("../papaparse.js");
|
||||
|
||||
var fs = require('fs');
|
||||
var assert = require('assert');
|
||||
var longSampleRawCsv = fs.readFileSync(__dirname + '/long-sample.csv', 'utf8');
|
||||
var utf8BomSampleRawCsv = fs.readFileSync(__dirname + '/utf-8-bom-sample.csv', 'utf8');
|
||||
|
||||
function assertLongSampleParsedCorrectly(parsedCsv) {
|
||||
assert.equal(8, parsedCsv.data.length);
|
||||
assert.deepEqual(parsedCsv.data[0], [
|
||||
'Grant',
|
||||
'Dyer',
|
||||
'Donec.elementum@orciluctuset.example',
|
||||
'2013-11-23T02:30:31-08:00',
|
||||
'2014-05-31T01:06:56-07:00',
|
||||
'Magna Ut Associates',
|
||||
'ljenkins'
|
||||
]);
|
||||
assert.deepEqual(parsedCsv.data[7], [
|
||||
'Talon',
|
||||
'Salinas',
|
||||
'posuere.vulputate.lacus@Donecsollicitudin.example',
|
||||
'2015-01-31T09:19:02-08:00',
|
||||
'2014-12-17T04:59:18-08:00',
|
||||
'Aliquam Iaculis Incorporate',
|
||||
'Phasellus@Quisquetincidunt.example'
|
||||
]);
|
||||
assert.deepEqual(parsedCsv.meta, {
|
||||
"delimiter": ",",
|
||||
"linebreak": "\n",
|
||||
"aborted": false,
|
||||
"truncated": false,
|
||||
renamedHeaders: null,
|
||||
"cursor": 1209
|
||||
});
|
||||
assert.equal(parsedCsv.errors.length, 0);
|
||||
}
|
||||
|
||||
describe('PapaParse', function() {
|
||||
it('synchronously parsed CSV should be correctly parsed', function() {
|
||||
assertLongSampleParsedCorrectly(Papa.parse(longSampleRawCsv));
|
||||
});
|
||||
|
||||
it('Pause and resume works (Regression Test for Bug #636)', function(done) {
|
||||
this.timeout(30000);
|
||||
var mod200Rows = [
|
||||
["Etiam a dolor vitae est vestibulum","84","DEF"],
|
||||
["Etiam a dolor vitae est vestibulum","84","DEF"],
|
||||
["Lorem ipsum dolor sit","42","ABC"],
|
||||
["Etiam a dolor vitae est vestibulum","84","DEF"],
|
||||
["Etiam a dolor vitae est vestibulum","84"],
|
||||
["Lorem ipsum dolor sit","42","ABC"],
|
||||
["Etiam a dolor vitae est vestibulum","84","DEF"],
|
||||
["Etiam a dolor vitae est vestibulum","84","DEF"],
|
||||
["Lorem ipsum dolor sit","42","ABC"],
|
||||
["Lorem ipsum dolor sit","42"]
|
||||
];
|
||||
var stepped = 0;
|
||||
var dataRows = [];
|
||||
Papa.parse(fs.createReadStream(__dirname + '/verylong-sample.csv'), {
|
||||
step: function(results, parser) {
|
||||
stepped++;
|
||||
if (results)
|
||||
{
|
||||
parser.pause();
|
||||
parser.resume();
|
||||
if (results.data && stepped % 200 === 0) {
|
||||
dataRows.push(results.data);
|
||||
}
|
||||
}
|
||||
},
|
||||
complete: function() {
|
||||
assert.strictEqual(2001, stepped);
|
||||
assert.deepEqual(mod200Rows, dataRows);
|
||||
done();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
it('asynchronously parsed CSV should be correctly parsed', function(done) {
|
||||
Papa.parse(longSampleRawCsv, {
|
||||
complete: function(parsedCsv) {
|
||||
assertLongSampleParsedCorrectly(parsedCsv);
|
||||
done();
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
it('asynchronously parsed streaming CSV should be correctly parsed', function(done) {
|
||||
Papa.parse(fs.createReadStream(__dirname + '/long-sample.csv', 'utf8'), {
|
||||
complete: function(parsedCsv) {
|
||||
assertLongSampleParsedCorrectly(parsedCsv);
|
||||
done();
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
it('reports the correct row number on FieldMismatch errors', function(done) {
|
||||
Papa.parse(fs.createReadStream(__dirname + '/verylong-sample.csv'), {
|
||||
header: true,
|
||||
fastMode: true,
|
||||
complete: function(parsedCsv) {
|
||||
assert.deepEqual(parsedCsv.errors, [
|
||||
{
|
||||
"type": "FieldMismatch",
|
||||
"code": "TooFewFields",
|
||||
"message": "Too few fields: expected 3 fields but parsed 2",
|
||||
"row": 498
|
||||
},
|
||||
{
|
||||
"type": "FieldMismatch",
|
||||
"code": "TooFewFields",
|
||||
"message": "Too few fields: expected 3 fields but parsed 2",
|
||||
"row": 998
|
||||
},
|
||||
{
|
||||
"type": "FieldMismatch",
|
||||
"code": "TooFewFields",
|
||||
"message": "Too few fields: expected 3 fields but parsed 2",
|
||||
"row": 1498
|
||||
},
|
||||
{
|
||||
"type": "FieldMismatch",
|
||||
"code": "TooFewFields",
|
||||
"message": "Too few fields: expected 3 fields but parsed 2",
|
||||
"row": 1998
|
||||
}
|
||||
]);
|
||||
assert.strictEqual(2000, parsedCsv.data.length);
|
||||
done();
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
it('piped streaming CSV should be correctly parsed', function(done) {
|
||||
var data = [];
|
||||
var readStream = fs.createReadStream(__dirname + '/long-sample.csv', 'utf8');
|
||||
var csvStream = readStream.pipe(Papa.parse(Papa.NODE_STREAM_INPUT));
|
||||
csvStream.on('data', function(item) {
|
||||
data.push(item);
|
||||
});
|
||||
csvStream.on('end', function() {
|
||||
assert.deepEqual(data[0], [
|
||||
'Grant',
|
||||
'Dyer',
|
||||
'Donec.elementum@orciluctuset.example',
|
||||
'2013-11-23T02:30:31-08:00',
|
||||
'2014-05-31T01:06:56-07:00',
|
||||
'Magna Ut Associates',
|
||||
'ljenkins'
|
||||
]);
|
||||
assert.deepEqual(data[7], [
|
||||
'Talon',
|
||||
'Salinas',
|
||||
'posuere.vulputate.lacus@Donecsollicitudin.example',
|
||||
'2015-01-31T09:19:02-08:00',
|
||||
'2014-12-17T04:59:18-08:00',
|
||||
'Aliquam Iaculis Incorporate',
|
||||
'Phasellus@Quisquetincidunt.example'
|
||||
]);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
it('piped streaming CSV should be correctly parsed when header is true', function(done) {
|
||||
var data = [];
|
||||
var readStream = fs.createReadStream(__dirname + '/sample-header.csv', 'utf8');
|
||||
var csvStream = readStream.pipe(Papa.parse(Papa.NODE_STREAM_INPUT, {header: true}));
|
||||
csvStream.on('data', function(item) {
|
||||
data.push(item);
|
||||
});
|
||||
csvStream.on('end', function() {
|
||||
assert.deepEqual(data[0], { title: 'test title 01', name: 'test name 01' });
|
||||
assert.deepEqual(data[1], { title: '', name: 'test name 02' });
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should support pausing and resuming on same tick when streaming', function(done) {
|
||||
var rows = [];
|
||||
Papa.parse(fs.createReadStream(__dirname + '/long-sample.csv', 'utf8'), {
|
||||
chunk: function(results, parser) {
|
||||
rows = rows.concat(results.data);
|
||||
parser.pause();
|
||||
parser.resume();
|
||||
},
|
||||
error: function(err) {
|
||||
done(new Error(err));
|
||||
},
|
||||
complete: function() {
|
||||
assert.deepEqual(rows[0], [
|
||||
'Grant',
|
||||
'Dyer',
|
||||
'Donec.elementum@orciluctuset.example',
|
||||
'2013-11-23T02:30:31-08:00',
|
||||
'2014-05-31T01:06:56-07:00',
|
||||
'Magna Ut Associates',
|
||||
'ljenkins'
|
||||
]);
|
||||
assert.deepEqual(rows[7], [
|
||||
'Talon',
|
||||
'Salinas',
|
||||
'posuere.vulputate.lacus@Donecsollicitudin.example',
|
||||
'2015-01-31T09:19:02-08:00',
|
||||
'2014-12-17T04:59:18-08:00',
|
||||
'Aliquam Iaculis Incorporate',
|
||||
'Phasellus@Quisquetincidunt.example'
|
||||
]);
|
||||
done();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
it('should support pausing and resuming asynchronously when streaming', function(done) {
|
||||
var rows = [];
|
||||
Papa.parse(fs.createReadStream(__dirname + '/long-sample.csv', 'utf8'), {
|
||||
chunk: function(results, parser) {
|
||||
rows = rows.concat(results.data);
|
||||
parser.pause();
|
||||
setTimeout(function() {
|
||||
parser.resume();
|
||||
}, 200);
|
||||
},
|
||||
error: function(err) {
|
||||
done(new Error(err));
|
||||
},
|
||||
complete: function() {
|
||||
assert.deepEqual(rows[0], [
|
||||
'Grant',
|
||||
'Dyer',
|
||||
'Donec.elementum@orciluctuset.example',
|
||||
'2013-11-23T02:30:31-08:00',
|
||||
'2014-05-31T01:06:56-07:00',
|
||||
'Magna Ut Associates',
|
||||
'ljenkins'
|
||||
]);
|
||||
assert.deepEqual(rows[7], [
|
||||
'Talon',
|
||||
'Salinas',
|
||||
'posuere.vulputate.lacus@Donecsollicitudin.example',
|
||||
'2015-01-31T09:19:02-08:00',
|
||||
'2014-12-17T04:59:18-08:00',
|
||||
'Aliquam Iaculis Incorporate',
|
||||
'Phasellus@Quisquetincidunt.example'
|
||||
]);
|
||||
done();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
it('handles errors in beforeFirstChunk', function(done) {
|
||||
var expectedError = new Error('test');
|
||||
Papa.parse(fs.createReadStream(__dirname + '/long-sample.csv', 'utf8'), {
|
||||
beforeFirstChunk: function() {
|
||||
throw expectedError;
|
||||
},
|
||||
error: function(err) {
|
||||
assert.deepEqual(err, expectedError);
|
||||
done();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
it('handles errors in chunk', function(done) {
|
||||
var expectedError = new Error('test');
|
||||
Papa.parse(fs.createReadStream(__dirname + '/long-sample.csv', 'utf8'), {
|
||||
chunk: function() {
|
||||
throw expectedError;
|
||||
},
|
||||
error: function(err) {
|
||||
assert.deepEqual(err, expectedError);
|
||||
done();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
it('handles errors in step', function(done) {
|
||||
var expectedError = new Error('test');
|
||||
Papa.parse(fs.createReadStream(__dirname + '/long-sample.csv', 'utf8'), {
|
||||
step: function() {
|
||||
throw expectedError;
|
||||
},
|
||||
error: function(err) {
|
||||
assert.deepEqual(err, expectedError);
|
||||
done();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
it('handles utf-8 BOM encoded files', function(done) {
|
||||
Papa.parse(utf8BomSampleRawCsv, {
|
||||
header: true,
|
||||
complete: function(parsedCsv) {
|
||||
assert.deepEqual(parsedCsv.data[0], { A: 'X', B: 'Y', C: 'Z' });
|
||||
done();
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user