2022-07-09 16:03:26 -04:00

107 lines
2.3 KiB
JavaScript

'use strict';
var test = require('tape');
var noms = require('./');
function countObj(num) {
var i = 20;
return noms.obj(function(next) {
if (++i < num) {
this.push({
num: i
});
} else {
this.push(null);
}
process.nextTick(function () {
next();
});
}, function (next){
this.push({
num: 0
});
i = 1;
next(null, {num: 1});
});
}
function countObjWithNext(num) {
var i = -1;
return noms.obj(function(next) {
if (++i < num) {
process.nextTick(function () {
next(null, {
num: i
});
});
} else {
process.nextTick(function () {
next(null, null);
});
}
});
}
function dripWordAsync(string, opts) {
// from from2's tests
return noms(opts||{}, function(size, next) {
if (string.length <= 0) {
return next(null, null);
}
var chunk = string.slice(0, size);
string = string.slice(size);
process.nextTick(function () {
next(null, chunk);
});
});
}
function dripWord(string, opts) {
// from from2's tests
return noms(opts||{}, function(size, next) {
if (string.length <= 0) {
return next(null, null);
}
var chunk = string.slice(0, size);
string = string.slice(size);
next(null, chunk);
});
}
test('works', function (t) {
t.plan(10);
countObj(10).on('data', function (d) {
t.ok(true, d.num);
});
});
test('works with next', function (t) {
t.plan(10);
countObjWithNext(10).on('data', function (d) {
t.ok(true, d.num);
});
});
test('works with size 1', function (t) {
t.plan(3);
var stream = dripWord('abc');
t.equals(stream.read(1).toString(), 'a');
t.equals(stream.read(1).toString(), 'b');
t.equals(stream.read(1).toString(), 'c');
});
test('works with size 2', function (t) {
t.plan(3);
dripWord('abcde', {highWaterMark: 2}).on('data', function (d) {
t.ok(true, d.toString());
});
});
test('works with size async 1', function (t) {
t.plan(3);
var stream = dripWordAsync('abc');
stream.on('readable', function () {
t.equals(stream.read(1).toString(), 'a');
t.equals(stream.read(1).toString(), 'b');
t.equals(stream.read(1).toString(), 'c');
});
});
test('works with size async 2', function (t) {
t.plan(3);
dripWordAsync('abcde', {highWaterMark: 2}).on('data', function (d) {
t.ok(true, d.toString());
});
});