You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

122 lines
2.2 KiB

var pull = require('pull-stream')
var through = require('through')
var toPull = require('../')
var Hang = require('pull-hang')
var Cat = require('pull-cat')
var tape = require('tape')
tape('abort', function (t) {
t.plan(2)
var ts = through()
ts.on('close', function () {
t.ok(true)
})
pull(
pull.values([.1, .4, .6, 0.7, .94, 0.3]),
// pull.infinite()
toPull(ts),
function (read) {
console.log('reader!')
read(null, function next (end, data) {
console.log('>>>', end, data)
if(data > 0.9) {
console.log('ABORT')
read(true, function (end) {
t.ok(true)
t.end()
})
} else {
read(null, next)
}
})
}
)
})
tape('abort hang', function (t) {
var ts = through(), aborted = false, c = 0, _read, ended, closed
ts.on('close', function () {
closed = true
})
pull(
Cat([
pull.values([.1, .4, .6, 0.7, 0.3]),
Hang(function () {
aborted = true
})
]),
toPull(ts),
function (read) {
_read = read
read(null, function next (end, data) {
if(end) {
ended = true
}
else read(null, next)
})
}
)
setTimeout(function () {
_read(true, function (end) {
t.ok(aborted, 'aborted')
t.ok(ended, 'ended')
t.ok(closed, 'closed')
t.ok(end, 'abort cb end')
t.end()
})
}, 10)
})
tape('abort a stream that has already ended', function (t) {
var ts = through()
var n = 0
pull(
toPull.source(ts),
//like pull.take(4), but abort async.
function (read) {
return function (abort, cb) {
console.log(n)
if(n++ < 4) read(null, cb)
else {
//this would be quite a badly behaved node stream
//but it can be difficult to make a node stream that behaves well.
ts.end()
setTimeout(function () {
read(true, cb)
}, 10)
}
}
},
pull.collect(function (err, ary) {
if(err) throw err
t.deepEqual(ary, [1,2,3,4])
t.end()
})
)
ts.queue(1)
ts.queue(2)
ts.queue(3)
ts.queue(4)
})