mirror of https://github.com/lukechilds/node.git
Browse Source
PR-URL: https://github.com/iojs/io.js/pull/635 Reviewed-By: Vladimir Kurchatkin <vladimir.kurchatkin@gmail.com>v1.8.0-commit
Jonathan Ong
10 years ago
committed by
Vladimir Kurchatkin
2 changed files with 195 additions and 19 deletions
@ -0,0 +1,180 @@ |
|||
var common = require('../common'); |
|||
var assert = require('assert'); |
|||
|
|||
// TODO Improved this test. test_ca.pem is too small. A proper test would
|
|||
// great a large utf8 (with multibyte chars) file and stream it in,
|
|||
// performing sanity checks throughout.
|
|||
|
|||
var path = require('path'); |
|||
var fs = require('fs'); |
|||
var fn = path.join(common.fixturesDir, 'elipses.txt'); |
|||
var rangeFile = path.join(common.fixturesDir, 'x.txt'); |
|||
|
|||
var callbacks = { open: 0, end: 0, close: 0 }; |
|||
|
|||
var paused = false; |
|||
|
|||
var file = fs.ReadStream(fn); |
|||
|
|||
file.on('open', function(fd) { |
|||
file.length = 0; |
|||
callbacks.open++; |
|||
assert.equal('number', typeof fd); |
|||
assert.ok(file.readable); |
|||
|
|||
// GH-535
|
|||
file.pause(); |
|||
file.resume(); |
|||
file.pause(); |
|||
file.resume(); |
|||
}); |
|||
|
|||
file.on('data', function(data) { |
|||
assert.ok(data instanceof Buffer); |
|||
assert.ok(!paused); |
|||
file.length += data.length; |
|||
|
|||
paused = true; |
|||
file.pause(); |
|||
|
|||
setTimeout(function() { |
|||
paused = false; |
|||
file.resume(); |
|||
}, 10); |
|||
}); |
|||
|
|||
|
|||
file.on('end', function(chunk) { |
|||
callbacks.end++; |
|||
}); |
|||
|
|||
|
|||
file.on('close', function() { |
|||
callbacks.close++; |
|||
|
|||
//assert.equal(fs.readFileSync(fn), fileContent);
|
|||
}); |
|||
|
|||
var file3 = fs.createReadStream(fn, Object.create({encoding: 'utf8'})); |
|||
file3.length = 0; |
|||
file3.on('data', function(data) { |
|||
assert.equal('string', typeof(data)); |
|||
file3.length += data.length; |
|||
|
|||
for (var i = 0; i < data.length; i++) { |
|||
// http://www.fileformat.info/info/unicode/char/2026/index.htm
|
|||
assert.equal('\u2026', data[i]); |
|||
} |
|||
}); |
|||
|
|||
file3.on('close', function() { |
|||
callbacks.close++; |
|||
}); |
|||
|
|||
process.on('exit', function() { |
|||
assert.equal(1, callbacks.open); |
|||
assert.equal(1, callbacks.end); |
|||
assert.equal(2, callbacks.close); |
|||
assert.equal(30000, file.length); |
|||
assert.equal(10000, file3.length); |
|||
console.error('ok'); |
|||
}); |
|||
|
|||
var file4 = fs.createReadStream(rangeFile, Object.create({bufferSize: 1, start: 1, end: 2})); |
|||
assert.equal(file4.start, 1); |
|||
assert.equal(file4.end, 2); |
|||
var contentRead = ''; |
|||
file4.on('data', function(data) { |
|||
contentRead += data.toString('utf-8'); |
|||
}); |
|||
file4.on('end', function(data) { |
|||
assert.equal(contentRead, 'yz'); |
|||
}); |
|||
|
|||
var file5 = fs.createReadStream(rangeFile, Object.create({bufferSize: 1, start: 1})); |
|||
assert.equal(file5.start, 1); |
|||
file5.data = ''; |
|||
file5.on('data', function(data) { |
|||
file5.data += data.toString('utf-8'); |
|||
}); |
|||
file5.on('end', function() { |
|||
assert.equal(file5.data, 'yz\n'); |
|||
}); |
|||
|
|||
// https://github.com/joyent/node/issues/2320
|
|||
var file6 = fs.createReadStream(rangeFile, Object.create({bufferSize: 1.23, start: 1})); |
|||
assert.equal(file6.start, 1); |
|||
file6.data = ''; |
|||
file6.on('data', function(data) { |
|||
file6.data += data.toString('utf-8'); |
|||
}); |
|||
file6.on('end', function() { |
|||
assert.equal(file6.data, 'yz\n'); |
|||
}); |
|||
|
|||
assert.throws(function() { |
|||
fs.createReadStream(rangeFile, Object.create({start: 10, end: 2})); |
|||
}, /start must be <= end/); |
|||
|
|||
var stream = fs.createReadStream(rangeFile, Object.create({ start: 0, end: 0 })); |
|||
assert.equal(stream.start, 0); |
|||
assert.equal(stream.end, 0); |
|||
stream.data = ''; |
|||
|
|||
stream.on('data', function(chunk) { |
|||
stream.data += chunk; |
|||
}); |
|||
|
|||
stream.on('end', function() { |
|||
assert.equal('x', stream.data); |
|||
}); |
|||
|
|||
// pause and then resume immediately.
|
|||
var pauseRes = fs.createReadStream(rangeFile); |
|||
pauseRes.pause(); |
|||
pauseRes.resume(); |
|||
|
|||
var file7 = fs.createReadStream(rangeFile, Object.create({autoClose: false })); |
|||
assert.equal(file7.autoClose, false); |
|||
file7.on('data', function() {}); |
|||
file7.on('end', function() { |
|||
process.nextTick(function() { |
|||
assert(!file7.closed); |
|||
assert(!file7.destroyed); |
|||
file7Next(); |
|||
}); |
|||
}); |
|||
|
|||
function file7Next(){ |
|||
// This will tell us if the fd is usable again or not.
|
|||
file7 = fs.createReadStream(null, Object.create({fd: file7.fd, start: 0 })); |
|||
file7.data = ''; |
|||
file7.on('data', function(data) { |
|||
file7.data += data; |
|||
}); |
|||
file7.on('end', function(err) { |
|||
assert.equal(file7.data, 'xyz\n'); |
|||
}); |
|||
} |
|||
|
|||
// Just to make sure autoClose won't close the stream because of error.
|
|||
var file8 = fs.createReadStream(null, Object.create({fd: 13337, autoClose: false })); |
|||
file8.on('data', function() {}); |
|||
file8.on('error', common.mustCall(function() {})); |
|||
|
|||
// Make sure stream is destroyed when file does not exist.
|
|||
var file9 = fs.createReadStream('/path/to/file/that/does/not/exist'); |
|||
file9.on('data', function() {}); |
|||
file9.on('error', common.mustCall(function() {})); |
|||
|
|||
process.on('exit', function() { |
|||
assert(file7.closed); |
|||
assert(file7.destroyed); |
|||
|
|||
assert(!file8.closed); |
|||
assert(!file8.destroyed); |
|||
assert(file8.fd); |
|||
|
|||
assert(!file9.closed); |
|||
assert(file9.destroyed); |
|||
}); |
Loading…
Reference in new issue