Skip to content
Prev Previous commit
Next Next commit
Add test-stream-preprocess.js to parallel
  • Loading branch information
vsemozhetbyt authored Jul 15, 2016
commit 099a1110face1b14885249ea966c756e5800b4d5
71 changes: 71 additions & 0 deletions test/parallel/test-stream-preprocess.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/******************************************************************************/
'use strict';
/******************************************************************************/
const common = require('../common');
const assert = require('assert');

const fs = require('fs');
const path = require('path');
const rl = require('readline');
/******************************************************************************/
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a minor nit, but in keeping with the style of most of the other tests, it's probably best to just replace this line with a blank line and remove the other two earlier asterisk lines completely.

const BOM = '\uFEFF';

// get the data by a non-stream way to compare with the streamed data
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: Comments should be capitalized and punctuated; also, maybe using is better than by?

const modelData = fs.readFileSync(
path.join(__dirname, '..', 'fixtures', 'file-to-read-without-bom.txt'), 'utf8'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

path.join(common.fixturesDir, 'file-to-read-without-bom.txt') (and below where appropriate)?

);
const modelDataFirstCharacter = modelData[0];

// detect the number of forthcoming 'line' events for mustCall() 'expected' arg
const linesNumber = modelData.match(/\n/g).length;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: Maybe lineCount is better than linesNumber?

/******************************************************************************/
// ensure both without-bom and with-bom test files are textwise equal
assert.strictEqual(
fs.readFileSync(
path.join(__dirname, '..', 'fixtures', 'file-to-read-with-bom.txt'), 'utf8'
),
`${BOM}${modelData}`
);
/******************************************************************************/
// an unjustified BOM stripping with a non-BOM character unshifted to a stream
const inputWithoutBOM = fs.createReadStream(
path.join(__dirname, '..', 'fixtures', 'file-to-read-without-bom.txt'), 'utf8'
);

inputWithoutBOM.once('readable', common.mustCall(() => {
const maybeBOM = inputWithoutBOM.read(1);
assert.strictEqual(maybeBOM, modelDataFirstCharacter);

if (maybeBOM !== BOM) inputWithoutBOM.unshift(maybeBOM);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this test script, it should be pretty much known whether maybeBOM !== BOM is true, so I think you can turn these into assertions.


let streamedData = '';
rl.createInterface({
input: inputWithoutBOM,
}).on('line', common.mustCall((line) => {
streamedData += `${line}\n`;
}, linesNumber)).on('close', common.mustCall(() => {
assert.strictEqual(streamedData, modelData);
}));
}));
/******************************************************************************/
// a justified BOM stripping
const inputWithBOM = fs.createReadStream(
path.join(__dirname, '..', 'fixtures', 'file-to-read-with-bom.txt'), 'utf8'
);

inputWithBOM.once('readable', common.mustCall(() => {
const maybeBOM = inputWithBOM.read(1);
assert.strictEqual(maybeBOM, BOM);

if (maybeBOM !== BOM) inputWithBOM.unshift(maybeBOM);

let streamedData = '';
rl.createInterface({
input: inputWithBOM,
}).on('line', common.mustCall((line) => {
streamedData += `${line}\n`;
}, linesNumber)).on('close', common.mustCall(() => {
assert.strictEqual(streamedData, modelData);
}));
}));
/******************************************************************************/