summaryrefslogtreecommitdiffstats
path: root/node_modules/memorystream/test
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/memorystream/test')
-rw-r--r--node_modules/memorystream/test/example.js18
-rw-r--r--node_modules/memorystream/test/memorystream.test.js333
2 files changed, 351 insertions, 0 deletions
diff --git a/node_modules/memorystream/test/example.js b/node_modules/memorystream/test/example.js
new file mode 100644
index 0000000..7d94369
--- /dev/null
+++ b/node_modules/memorystream/test/example.js
@@ -0,0 +1,18 @@
+var http = require('http'),
+ MemoryStream = require('../index'),
+ util = require('util');
+
+var options = {
+ host: 'google.com'
+};
+var memStream = new MemoryStream(null,{
+ readable : false
+});
+
+var req = http.request(options, function(res) {
+ util.pump(res, memStream);
+ res.on('end',function(){
+ console.log(memStream.toString());
+ });
+});
+req.end();
diff --git a/node_modules/memorystream/test/memorystream.test.js b/node_modules/memorystream/test/memorystream.test.js
new file mode 100644
index 0000000..2b80b50
--- /dev/null
+++ b/node_modules/memorystream/test/memorystream.test.js
@@ -0,0 +1,333 @@
+var MemoryStream = require('../index.js'),
+ expect = require('expect.js'),
+ STREAM = require('stream'),
+ Q = require('q'),
+ FS = require('fs');
+
+describe('Test memory streams', function() {
+
+ var writeToStream = function (mem_stream, test_data, frequency) {
+ var result = Q(),
+ i = 0;
+
+ frequency = frequency || 0;
+
+ test_data.forEach(function (chunk) {
+ var f = Q.nfbind(function (chunk,n, cb) {
+ setTimeout(function () {
+ if (n >= (test_data.length - 1) ) {
+ mem_stream.end(chunk);
+ } else {
+ mem_stream.write(chunk, cb);
+ }
+ }, frequency);
+ }, chunk ,i++);
+ result = result.then(function() { return f(); });
+ });
+
+ result.done();
+ };
+
+ var writeToStream2 = function (mem_stream, test_data) {
+ var i;
+ for (i = 0; i < test_data.length ; i++) {
+ setTimeout((function(n) {
+ return function () {
+ if (n >= (test_data.length - 1) ) {
+ mem_stream.end(test_data[n]);
+ } else {
+ mem_stream.write(test_data[n]);
+ }
+ }
+ })(i), i * 2);
+ }
+ };
+
+ describe("constructor", function() {
+ it('should have a MemoryStream class', function () {
+ expect(MemoryStream).to.be.ok();
+ });
+
+ it('should create Readable stream', function () {
+ var memory_stream = new MemoryStream([], {writable : false});
+ expect(memory_stream).to.be.ok();
+ expect(memory_stream).to.be.a(STREAM.Readable);
+
+ memory_stream = MemoryStream.createReadStream([]);
+ expect(memory_stream).to.be.a(STREAM.Readable);
+ });
+
+ it('should create Writable stream', function () {
+ var memory_stream = new MemoryStream([], {readable : false});
+ expect(memory_stream).to.be.ok();
+ expect(memory_stream).to.be.a(STREAM.Writable);
+
+ memory_stream = MemoryStream.createWriteStream([]);
+ expect(memory_stream).to.be.a(STREAM.Writable);
+ });
+
+ it('should create Duplex stream', function () {
+ var memory_stream = new MemoryStream([]);
+ expect(memory_stream).to.be.ok();
+ expect(memory_stream).to.be.a(STREAM.Duplex);
+ });
+
+ });
+
+ describe("readable stream", function () {
+ var test_data = 'abcdefghijklmnopqrstuvwxyz',
+ frequence = 50;
+
+ it("should read data from stream", function (done) {
+ var mem_stream = MemoryStream.createReadStream(test_data.split(''));
+
+ var data = '', chunks = 0;
+ mem_stream.on('data',function(chunk){
+ data += chunk;
+ ++chunks;
+ });
+
+ mem_stream.on('end',function () {
+ expect(chunks).to.be(test_data.length);
+ expect(data).to.be(test_data);
+ done();
+ });
+ });
+
+ it("should read data from stream with frequency", function (done) {
+
+ var mem_stream = new MemoryStream(test_data.split(''), {
+ writable : false,
+ frequence: frequence
+ });
+
+ var start_time = Date.now();
+
+ var data = '';
+ mem_stream.on('data',function(chunk){
+ data += chunk;
+ });
+
+ mem_stream.on('end',function(){
+ var execution_time = Date.now() - start_time;
+
+ expect(data).to.be(test_data);
+ expect(execution_time >= frequence * test_data.length).to.be(true);
+
+ done();
+ });
+ });
+
+ it("should read data pause/resume", function (done) {
+ var mem_stream = MemoryStream.createReadStream(test_data.split(''));
+
+ var start_time = Date.now();
+
+ var data = '', chunks = 0;
+ mem_stream.on('data',function(chunk){
+ data += chunk;
+ ++chunks;
+
+ if (! (chunks % 10) ) {
+ mem_stream.pause();
+ setTimeout(function () {
+ mem_stream.resume();
+ },frequence);
+ }
+ });
+
+ mem_stream.on('end',function() {
+ var execution_time = Date.now() - start_time;
+
+ expect(data).to.be(test_data);
+ expect(execution_time >= frequence).to.be(true);
+
+ done();
+ });
+ });
+
+ });
+
+ describe("writable stream", function () {
+ var test_data = 'abcdefghijklmnopqrstuvwxyz';
+
+ it("should write data to Writable", function (done) {
+ var mem_stream = MemoryStream.createWriteStream(),
+ i = 0;
+
+ writeToStream(mem_stream, test_data.split(''));
+
+ mem_stream.on('finish',function () {
+ expect(mem_stream.toString()).to.be(test_data);
+ done();
+ });
+
+ });
+
+ it("should not write data to readable stream", function (done) {
+ var mem_stream = new MemoryStream([], {writable : false});
+ expect(function () {
+ mem_stream.write("test");
+ }).to.throwError();
+
+ expect(function () {
+ mem_stream.end("test");
+ }).to.throwError();
+
+ done();
+ });
+
+ it("#toString", function (done) {
+ var mem_stream = new MemoryStream(null, {readable : false});
+ writeToStream(mem_stream, test_data.split(''));
+
+ mem_stream.on('finish',function () {
+ expect(mem_stream.toString()).to.be(test_data);
+ done();
+ });
+ });
+
+ it("#toBuffer", function (done) {
+ var mem_stream = new MemoryStream(null, {readable : false});
+ writeToStream(mem_stream, test_data.split(''));
+
+ mem_stream.on('finish',function () {
+ expect(mem_stream.toBuffer().toString('utf-8')).to.be(test_data);
+ done();
+ });
+ });
+
+ it("#toBuffer all data in one buffer", function (done) {
+ var i = 0,
+ mem_stream = new MemoryStream(null, {readable : false}),
+ arr_test_data = [],
+ str_test_data = '';
+ for (i = 0; i < 20; i++) {
+ var b = new Buffer([i]);
+ arr_test_data.push(b);
+ str_test_data += b.toString('hex');
+ }
+
+ writeToStream(mem_stream, arr_test_data, 10);
+
+ mem_stream.on('finish',function () {
+ expect(mem_stream.toBuffer().toString('hex')).to.be(str_test_data);
+ done();
+ });
+
+ });
+
+ it("not write data to the overflowed buffer", function (done) {
+ var mem_stream = new MemoryStream('data1'.split(''), {
+ readable : false,
+ maxbufsize : 10
+ });
+
+ mem_stream.write('data2', function (err) {
+ expect(err).to.not.be.ok();
+ expect(mem_stream.toString()).to.be('data1data2');
+ mem_stream.write('data3', function (err) {
+ expect(err).to.not.be.ok();
+ expect(mem_stream.toString()).to.be('data1data2');
+ done();
+ });
+ });
+ });
+
+ it("should process error for overflowed buffer", function (done) {
+ var mem_stream = new MemoryStream('data1'.split(''), {
+ readable : false,
+ maxbufsize : 10,
+ bufoverflow : true
+ });
+
+ mem_stream.write('data2', function (err) {
+ expect(err).to.not.be.ok();
+ expect(mem_stream.toString()).to.be('data1data2');
+ mem_stream.write('data3', function (err) {
+ expect(err).to.be.ok();
+ expect(mem_stream.toString()).to.be('data1data2');
+ done();
+ });
+
+ });
+
+ mem_stream.on('error', function () {
+ });
+
+ });
+ });
+
+ describe("duplex stream", function () {
+ var test_data = 'abcdefghijklmnopqrstuvwxyz';
+
+ it("should write/read",function (done) {
+ var mem_stream = new MemoryStream();
+
+ var data = '';
+ mem_stream.on('data',function(chunk){
+ data += chunk;
+ });
+
+ writeToStream(mem_stream, test_data.split(''));
+
+ mem_stream.on('end', function () {
+ expect(data).to.be(test_data);
+ done();
+ });
+ });
+
+ it("should write/read data with init buffer", function (done) {
+
+ var l = Math.floor(test_data.length / 2);
+
+ var test_data1 = test_data.substr(0, l),
+ test_data2 = test_data.substr(l);
+
+ var mem_stream = new MemoryStream(test_data1.split(''));
+
+ var data = '';
+ mem_stream.on('data',function(chunk){
+ data += chunk;
+ });
+
+ writeToStream2(mem_stream, test_data2);
+
+ mem_stream.on('end', function() {
+ expect(data).to.be(test_data);
+ done();
+ });
+
+ });
+
+
+ it("should piping data", function (done) {
+ var src_mem_stream = MemoryStream.createReadStream(test_data.split(''), {frequency : 25});
+ var dst_mem_stream = MemoryStream.createWriteStream();
+
+ src_mem_stream.pipe(dst_mem_stream);
+
+ dst_mem_stream.on('finish',function(){
+ expect(dst_mem_stream.toString()).to.be(test_data);
+ done();
+ });
+
+
+ });
+
+ it("should readable/piping data", function (done) {
+ var src_mem_stream = MemoryStream.createReadStream(test_data.split(''), {frequency : 25});
+ var dst_mem_stream = MemoryStream.createWriteStream();
+
+ src_mem_stream.once('readable', function () {
+ src_mem_stream.pipe(dst_mem_stream);
+ });
+
+ dst_mem_stream.on('finish',function(){
+ expect(dst_mem_stream.toString()).to.be(test_data);
+ done();
+ });
+ });
+
+ });
+});