StreamSlicer.test.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. var assert = require('assert');
  2. var StreamSlicer = require('../index');
  3. var fs = require('fs');
  4. var path = require('path');
  5. var dir = process.cwd();
  6. var testdataFilename;
  7. if (dir.substr(-5) === 'test/')
  8. testdataFilename = './testdata';
  9. else
  10. testdataFilename = path.join(dir, 'test', 'testdata');
  11. testdata = fs.readFileSync(testdataFilename, 'utf8');
  12. function createRead(stream, output) {
  13. return function read () {
  14. var result = stream.read();
  15. if (result === null) {
  16. stream.once('readable', read)
  17. } else {
  18. output.push(result);
  19. read();
  20. }
  21. }
  22. }
  23. describe('StreamSlicer', function () {
  24. it('will slice a stream by a separator', function (done) {
  25. var stream = new StreamSlicer({ sliceBy: '|' });
  26. var incoming = fs.createReadStream(testdataFilename);
  27. var slicerOutput = [];
  28. stream.on('end', function () {
  29. var expected = testdata.split('|').join('');
  30. assert.strictEqual(expected, slicerOutput.join(''));
  31. done();
  32. });
  33. var read = createRead(stream, slicerOutput);
  34. read();
  35. incoming.pipe(stream);
  36. });
  37. it('will slice a stream by a separator and replace it with another', function (done) {
  38. var stream = new StreamSlicer({ sliceBy: '|', replaceWith: '-' });
  39. var incoming = fs.createReadStream(testdataFilename);
  40. var slicerOutput = [];
  41. stream.on('end', function () {
  42. var expected = testdata.split('|').join('-');
  43. assert.strictEqual(expected, slicerOutput.join(''));
  44. done();
  45. });
  46. var read = createRead(stream, slicerOutput);
  47. read();
  48. incoming.pipe(stream);
  49. });
  50. it('can handle various lengths of separators', function (done) {
  51. var stream = new StreamSlicer({ sliceBy: '||', replaceWith: '---' });
  52. var incoming = fs.createReadStream(testdataFilename);
  53. var slicerOutput = [];
  54. stream.on('end', function () {
  55. var expected = testdata.split('||').join('---');
  56. assert.strictEqual(expected, slicerOutput.join(''));
  57. done();
  58. });
  59. var read = createRead(stream, slicerOutput);
  60. read();
  61. incoming.pipe(stream);
  62. });
  63. it('will emit an event for each slice it does', function (done) {
  64. var stream = new StreamSlicer({ sliceBy: '|' });
  65. var incoming = fs.createReadStream(testdataFilename);
  66. var slicerOutput = [];
  67. stream.on('end', function () {
  68. var expected = testdata.split('|');
  69. assert.strictEqual(expected.length, slicerOutput.length);
  70. assert.deepEqual(expected, slicerOutput);
  71. done();
  72. });
  73. stream.on('slice', function(data) {
  74. slicerOutput.push(data.toString());
  75. });
  76. incoming.pipe(stream).pipe(process.stdout);
  77. });
  78. });