exports['pipe two maps together'] = function (test) {

    var input = [1, 2, 3, 7, 5, 3, 1, 9, 0, 2, 4, 6]
    //create event stream from
    function dd(data, cb) {
        cb(null, data * 2)
    }

    var doubler1 = es.map(dd), doubler2 = es.map(dd)

    doubler1.pipe(doubler2)

    spec(doubler1).through().validateOnExit()
    spec(doubler2).through().validateOnExit()

    readStream(doubler2, function (err, output) {
        it(output).deepEqual(input.map(function (j) {
            return j * 4
        }))
        test.done()
    })

    writeArray(input, doubler1)

}
Example #2
0
var readableStreamSpec = function (stream) {
  var s = spec(stream).readable().pausable({strict: true})
  
  stream.end()
  
  s.validate()
}
Example #3
0
test('pauses', function(assert) {

  var l = 1000
      , expected = [];
  while (l--) expected.push(l);
   //Math.random())
  var t = through();
  var s = spec(t)
      .through()
      .pausable();
  t.on('data', function () {
    if (Math.random() > 0.1) return;
    t.pause();
    process.nextTick(function () {
      t.resume()
    })
  });
  read(t, function (err, actual) {
    assert.ifError(err);
    assert.deepEqual(actual, expected)
  });
  t.on('close', function () {
    s.validate();
    assert.end()
  });
  write(expected, t)
});
Example #4
0
test('pauses', function(assert) {

  var l = 1000
    , expected = []

  while(l--) expected.push(l) //Math.random())

  var t = through()
    spec(t)
      .through()
      .pausable()
      .validateOnExit()

  t.on('data', function () {
    if(Math.random() > 0.1) return
    t.pause()
    process.nextTick(function () {
      t.resume()
    })
  })

  read(t, function (err, actual) {
    assert.ifError(err)
    assert.deepEqual(actual, expected)
    assert.end()
  })

  write(expected, t)
})
Example #5
0
test('simple functions', function(assert) {

  var l = 1000
    , expected = []

  while(l--) expected.push(l * Math.random())

  var t = through(function (data) {
      this.emit('data', data*2)
    })
    spec(t)
      .through()
      .pausable()
      .validateOnExit()

  read(t, function (err, actual) {
    assert.ifError(err)
    assert.deepEqual(actual, expected.map(function (data) {
      return data*2
    }))
    assert.end()
  })

  write(expected, t)
})
exports ['emits drain if paused, when all '] = function (test) {
  var active = 0
  var drained = false
  var maps = map(function (data, callback) {
    active ++
    u.delay(function () {
      active --
      callback(null, 1)
    })()
    console.log('WRITE', false)
    return false
  })

  spec(maps).through().validateOnExit()

  maps.on('drain', function () {
    drained = true
    it(active).equal(0, 'should emit drain when all maps are done')
  })

  it(maps.write('hello')).equal(false)
  it(maps.write('hello')).equal(false)
  it(maps.write('hello')).equal(false)

  process.nextTick(function () {maps.end()},10)

  maps.on('end', function () {
    console.log('end')
    it(drained).ok('shoud have emitted drain before end')
    test.done()
  })

}
exports ['map applied to a stream with filtering'] = function (test) {

  var input = [1,2,3,7,5,3,1,9,0,2,4,6]

  var doubler = map(function (data, callback) {
    if (data % 2)
      callback(null, data * 2)
    else
      callback()
  })

  readStream(doubler, function (err, output) {
    it(output).deepEqual(input.filter(function (j) {
      return j % 2
    }).map(function (j) {
      return j * 2
    }))
    test.done()
  })

  spec(doubler).through().validateOnExit()

  writeArray(input, doubler)

}
exports ['simple map applied to a stream'] = function (test) {

  var input = [1,2,3,7,5,3,1,9,0,2,4,6]
  //create event stream from

  var doubler = map(function (data, cb) {
    cb(null, data * 2)
  })

  spec(doubler).through().validateOnExit()

  //a map is only a middle man, so it is both readable and writable

  it(doubler).has({
    readable: true,
    writable: true,
  })

  readStream(doubler, function (err, output) {
    it(output).deepEqual(input.map(function (j) {
      return j * 2
    }))
//    process.nextTick(x.validate)
    test.done()
  })

  writeArray(input, doubler)

}
Example #9
0
test('simple functions', function(assert) {

  var l = 1000
    , expected = [];

  while(l--) expected.push(l * Math.random());

  var t = through(function (data) {
      this.emit('data', data*2)
    });
  var s = spec(t).through().pausable();
      

  read(t, function (err, actual) {
    assert.ifError(err);
    assert.deepEqual(actual, expected.map(function (data) {
      return data*2
    }));
    assert.end()
  });

  t.on('close', s.validate);

  write(expected, t)
});
Example #10
0
var writableStreamSpec = function (stream) {
  var s = spec(stream).writable().drainable()

  stream.write('write test')
  stream.end('end test')
  
  s.validate()
}
Example #11
0
var readableStreamSpecUnpausable = exports.readableStreamSpecUnpausable = function (stream) {
  var s = spec(stream, {end: false, strict: true}).readable()
  
  stream.destroy()
  //s.validate()
  //s.validateOnExit()
    //TODO look into above issue further ...
}
Example #12
0
var throughStreamSpec = exports.throughStreamSpec = function (stream) {
  var s = spec(stream).through({strict: true})

  stream.write('write test')
  stream.end('end test')
  
  s.validate()
}
 exports['pipe two maps together'] = function(test) {
   var input = [1, 2, 3, 7, 5, 3, 1, 9, 0, 2, 4, 6];
   function dd(data, cb) {
     cb(null, data * 2);
   }
   var doubler1 = map(dd),
       doubler2 = map(dd);
   doubler1.pipe(doubler2);
   spec(doubler1).through().validateOnExit();
   spec(doubler2).through().validateOnExit();
   readStream(doubler2, function(err, output) {
     it(output).deepEqual(input.map(function(j) {
       return j * 4;
     }));
     test.done();
   });
   writeArray(input, doubler1);
 };
Example #14
0
exports ['split() works with empty string chunks'] = function (test) {
  var str = ' foo'
    , expected = str.split(/[\s]*/).reduce(splitBy(/[\s]*/), [])
    , cs1 = split(/[\s]*/)
    , cs2 = split(/[\s]*/)
    , actual = []
    , ended = false
    , x = spec(cs1).through()
    , y = spec(cs2).through()

  var a = new Stream ()

  a.write = function (l) {
    actual.push(l.trim())
  }
  a.end = function () {

      ended = true
      expected.forEach(function (v,k) {
        //String.split will append an empty string ''
        //if the string ends in a split pattern.
        //es.split doesn't which was breaking this test.
        //clearly, appending the empty string is correct.
        //tests are passing though. which is the current job.
        if(v)
          it(actual[k]).like(v)
      })
      //give the stream time to close
      process.nextTick(function () {
        test.done()
        x.validate()
        y.validate()
      })
  }
  a.writable = true

  cs1.pipe(cs2)
  cs2.pipe(a)

  cs1.write(str)
  cs1.end()

}
Example #15
0
var writableStreamSpec = exports.writableStreamSpec = function (stream) {
  var s = spec(stream).writable().drainable()

  stream.write('write test')
  stream.end('end test')
  
  //s.validate()
  //s.validateOnExit()
    //TODO look into above issue further ...
}
Example #16
0
exports['end fast'] = function (test) {

    var stream = es.through()
    var x = spec(stream).basic().pausable()

    stream.end() //this will call write()

    process.nextTick(function () {
        x.validate()
        test.done()
    })

}
 exports['map will not call end until the callback'] = function(test) {
   var ticker = map(function(data, cb) {
     process.nextTick(function() {
       cb(null, data * 2);
     });
   });
   spec(ticker).through().validateOnExit();
   ticker.write('x');
   ticker.end();
   ticker.on('end', function() {
     test.done();
   });
 };
Example #18
0
exports['simple (not strictly pausable) setTimeout'] = function (test) {

  var l = 10
    , expected = [] 
  while(l--) expected.push(l * Math.random())


  var _expected = expected.slice()
  var t = from(function (i, n) {
    var self = this
    setTimeout(function () {
      if(_expected.length)
        self.emit('data', _expected.shift())
      else
        if(!self.ended)
          self.emit('end')
      n()
    }, 3)
  })

  /*
    using from in this way will not be strictly pausable.
    it could be extended to buffer outputs, but I think a better
    way would be to use a PauseStream that implements strict pause.
  */

  spec(t)
    .readable()
    .pausable({strict: false })
    .validateOnExit()

  //pause(t)
  var paused = false
  var i = setInterval(function () {
    if(!paused) t.pause()
    else t.resume()
    paused = !paused
  }, 2)

  t.on('end', function () {
    clearInterval(i)
  })

  read(t, function (err, actual) {
    if(err) test.error(err) //fail
    a.deepEqual(actual, expected)
    test.done()
  })

}
exports ['simple map'] = function (test) {

  var input = u.map(1, 1000, function () {
    return Math.random()
  })
  var expected = input.map(function (v) {
    return v * 2
  })

  var pause = pauseStream(0.1)
  var fs = from(input)
  var ts = es.writeArray(function (err, ar) {
    it(ar).deepEqual(expected)
    test.done()
  })
  var map = es.through(function (data) {
    this.emit('data', data * 2)
  })

  spec(map).through().validateOnExit()
  spec(pause).through().validateOnExit()

  fs.pipe(map).pipe(pause).pipe(ts)
}
Example #20
0
test('simple defaults', function(assert) {

  var l = 1000
      , expected = [];
  while (l--) expected.push(l * Math.random());
  var t = through();
  var s = spec(t).through().pausable();
  read(t, function (err, actual) {
    assert.ifError(err);
    assert.deepEqual(actual, expected);
    assert.end()
  });
  t.on('close', s.validate);
  write(expected, t)
});
Example #21
0
exports['inc'] = function (test) {

  var fs = from(function (i) {
    this.emit('data', i)
    if(i >= 99)
      return this.emit('end')
    return true
  })

  spec(fs).readable().validateOnExit() 

  read(fs, function (err, arr) {
    test.equal(arr.length, 100)
    test.done()
  })
}
Example #22
0
exports['large stream - from an array'] = function (test) {

  var l = 100000
    , expected = [] 

  while(l--) expected.push(l * Math.random())

  var fs = from(expected.slice())

  spec(fs).readable().validateOnExit() 

  read(fs, function (err, arr) {
		a.deepEqual(arr, expected)
    test.done()
  })
}
Example #23
0
exports['large stream - callback call next()'] = function (test) {

  var fs = from(function (i, next) {
    this.emit('data', i)
    if(i >= 99999)
      return this.emit('end')
		next();
  })

  spec(fs).readable().validateOnExit() 

  read(fs, function (err, arr) {
    test.equal(arr.length, 100000)
    test.done()
  })
}
Example #24
0
exports['throw on write when !writable'] = function (test) {

    var stream = es.through()
    var x = spec(stream).basic().pausable()

    stream.write(1)
    stream.write(1)
    stream.end(2) //this will call write()
    stream.write(1) //this will be throwing..., but the spec will catch it.

    process.nextTick(function () {
        x.validate()
        test.done()
    })

}
 exports['do not emit drain if not paused'] = function(test) {
   var maps = map(function(data, callback) {
     u.delay(callback)(null, 1);
     return true;
   });
   spec(maps).through().pausable().validateOnExit();
   maps.on('drain', function() {
     it(false).ok('should not emit drain unless the stream is paused');
   });
   it(maps.write('hello')).equal(true);
   it(maps.write('hello')).equal(true);
   it(maps.write('hello')).equal(true);
   setTimeout(function() {
     maps.end();
   }, 10);
   maps.on('end', test.done);
 };
 exports['simple map applied to a stream'] = function(test) {
   var input = [1, 2, 3, 7, 5, 3, 1, 9, 0, 2, 4, 6];
   var doubler = map(function(data, cb) {
     cb(null, data * 2);
   });
   spec(doubler).through().validateOnExit();
   it(doubler).has({
     readable: true,
     writable: true
   });
   readStream(doubler, function(err, output) {
     it(output).deepEqual(input.map(function(j) {
       return j * 2;
     }));
     test.done();
   });
   writeArray(input, doubler);
 };
Example #27
0
exports['simple stream'] = function (test) {

    var stream = es.through()
    var x = spec(stream).basic().pausable()

    stream.write(1)
    stream.write(1)
    stream.pause()
    stream.write(1)
    stream.resume()
    stream.write(1)
    stream.end(2) //this will call write()

    process.nextTick(function () {
        x.validate()
        test.done()
    })
}
Example #28
0
exports ['do not emit drain if not paused'] = function (test) {

  var map = es.map(function (data, callback) {
    u.delay(callback)(null, 1)
    return true
  })
  
  spec(map).through().pausable().validateOnExit()

  map.on('drain', function () {
    it(false).ok('should not emit drain unless the stream is paused')
  })

  it(map.write('hello')).equal(true)
  it(map.write('hello')).equal(true)
  it(map.write('hello')).equal(true)
  setTimeout(function () {map.end()},10)
  map.on('end', test.done)
}
Example #29
0
exports ['fizz buzz replace'] = function (test) {
  var split = es.split(/(1)/)
  var replace = es.replace('7', 'seven')
  var x = spec(replace).through()
  split
    .pipe(replace)
    .pipe(es.join(function (err, string) {
      it(string).equal(fizz7buzz) 
    }))

    replace.on('close', function () {
      x.validate()
      test.done()
    })

  split.write(fizzbuzz)
  split.end()

}
Example #30
0
exports ['simple mapSync applied to a stream'] = function (test) {

  var input = [1,2,3,7,5,3,1,9,0,2,4,6]

  var doubler = es.mapSync(function (data) {
    return data * 2
  })
  
  readStream(doubler, function (err, output) {
    it(output).deepEqual(input.map(function (j) {
      return j * 2
    }))
    test.done()
  })
  
  spec(doubler).through().validateOnExit()

  writeArray(input, doubler)
  
}