mirror of
https://github.com/openstf/stf
synced 2025-10-03 17:59:28 +02:00
84 lines
1.9 KiB
JavaScript
84 lines
1.9 KiB
JavaScript
var util = require('util')
|
|
|
|
var Promise = require('bluebird')
|
|
var split = require('split')
|
|
|
|
function NoSuchLineError(message) {
|
|
Error.call(this, message)
|
|
this.name = 'NoSuchLineError'
|
|
Error.captureStackTrace(this, NoSuchLineError)
|
|
}
|
|
|
|
util.inherits(NoSuchLineError, Error)
|
|
|
|
module.exports.NoSuchLineError = NoSuchLineError
|
|
|
|
module.exports.readAll = function(stream) {
|
|
var resolver = Promise.defer()
|
|
var collected = new Buffer(0)
|
|
|
|
function errorListener(err) {
|
|
resolver.reject(err)
|
|
}
|
|
|
|
function endListener() {
|
|
resolver.resolve(collected)
|
|
}
|
|
|
|
function readableListener() {
|
|
var chunk
|
|
while ((chunk = stream.read())) {
|
|
collected = Buffer.concat([collected, chunk])
|
|
}
|
|
}
|
|
|
|
stream.on('error', errorListener)
|
|
stream.on('readable', readableListener)
|
|
stream.on('end', endListener)
|
|
|
|
return resolver.promise.finally(function() {
|
|
stream.removeListener('error', errorListener)
|
|
stream.removeListener('readable', readableListener)
|
|
stream.removeListener('end', endListener)
|
|
})
|
|
}
|
|
|
|
module.exports.findLine = function(stream, re) {
|
|
var resolver = Promise.defer()
|
|
var piped = stream.pipe(split())
|
|
|
|
function errorListener(err) {
|
|
resolver.reject(err)
|
|
}
|
|
|
|
function endListener() {
|
|
resolver.reject(new NoSuchLineError())
|
|
}
|
|
|
|
function lineListener(line) {
|
|
if (re.test(line)) {
|
|
resolver.resolve(line)
|
|
}
|
|
}
|
|
|
|
piped.on('error', errorListener)
|
|
piped.on('data', lineListener)
|
|
piped.on('end', endListener)
|
|
|
|
return resolver.promise.finally(function() {
|
|
piped.removeListener('error', errorListener)
|
|
piped.removeListener('data', lineListener)
|
|
piped.removeListener('end', endListener)
|
|
stream.unpipe(piped)
|
|
})
|
|
}
|
|
|
|
module.exports.talk = function(log, format, stream) {
|
|
stream.pipe(split())
|
|
.on('data', function(chunk) {
|
|
var line = chunk.toString().trim()
|
|
if (line.length) {
|
|
log.info(format, line)
|
|
}
|
|
})
|
|
}
|