UNPKG

merge-object-streams

Version:

Merge line by line streams operating in object mode.

118 lines (91 loc) 2.65 kB
var Mos = require('..') , Readable = require('stream').Readable , PassThrough = require('stream').PassThrough , util = require("util") , assert = require('assert'); function StreamObj(objList, options){ options = options || {}; options.objectMode = true; Readable.call(this, options); this._objList = objList; this._i = 0; this._iEnd = objList.length; }; util.inherits(StreamObj, Readable); StreamObj.prototype._read = function (size){ this.push(this._objList[this._i++]); if(this._i === this._iEnd){ this.push(null); } }; function makeStreams(datalist){ var streams = []; datalist.forEach(function(data){ var s = new StreamObj(data); streams.push(s); }); return streams; }; describe('merge', function(){ var data1 = [ {a: 1, b: 2, c: 3}, {a: 4, b: 5, c: 6}, {a: 7, b: 8, c: 9}, {a: 10, b: 11, c: 12}, {a: 13, b: 14, c: 15}, {a: 16, b: null, c: 18}, {a: 19, b: 20, c: 21} ]; var data2 = [ {d: 1, e: 2, f: 3}, {d: 4, e: 5, f: 6}, {d: 7, e: 8, f: 9}, {d: 10, e: 11, f: 12}, {d: 13, e: 14, f: 15}, {d: 16, e: null, f: 18}, {d: 19, e: 20, f: 21} ]; var data3 = [ {f: 77, g: 78}, {f: 79, g: 80}, {f: 81, g: 82} ]; var data4 = [ {h: 1000} ]; it('should merge streams of the same length', function(done){ var expected = [ { a: 1, b: 2, c: 3, d: 1, e: 2, f: 3 }, { a: 4, b: 5, c: 6, d: 4, e: 5, f: 6 }, { a: 7, b: 8, c: 9, d: 7, e: 8, f: 9 }, { a: 10, b: 11, c: 12, d: 10, e: 11, f: 12 }, { a: 13, b: 14, c: 15, d: 13, e: 14, f: 15 }, { a: 16, b: null, c: 18, d: 16, e: null, f: 18 }, { a: 19, b: 20, c: 21, d: 19, e: 20, f: 21 } ]; assert.equal(data1.length, data2.length); var cnt = 0; var m = new Mos(makeStreams([data1, data2])); m.on('data', function(row){ assert.deepEqual(row, expected[cnt++]); }); m.on('end', done); }); it('should merge streams of different length', function(done){ var expected = [ { a: 1, b: 2, c: 3, d: 1, e: 2, f: 77, g: 78, h: 1000 }, { a: 4, b: 5, c: 6, d: 4, e: 5, f: 79, g: 80 }, { a: 7, b: 8, c: 9, d: 7, e: 8, f: 81, g: 82 }, { a: 10, b: 11, c: 12, d: 10, e: 11, f: 12 }, { a: 13, b: 14, c: 15, d: 13, e: 14, f: 15 }, { a: 16, b: null, c: 18, d: 16, e: null, f: 18 }, { a: 19, b: 20, c: 21, d: 19, e: 20, f: 21 } ]; var cnt = 0; var m = new Mos(makeStreams([data1, data2, data3, data4])); m.on('data', function(row){ assert.deepEqual(row, expected[cnt++]); }); m.on('end', done); }); });