From f3e71eb41707a375aa10970d5c1eda39d78dcb71 Mon Sep 17 00:00:00 2001 From: isaacs Date: Tue, 9 Oct 2012 17:37:40 -0700 Subject: [PATCH] test: Writable bufferizing, non-bufferizing, and callbacks --- test/simple/test-stream2-writable.js | 98 ++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) diff --git a/test/simple/test-stream2-writable.js b/test/simple/test-stream2-writable.js index bc1859ce22..bfd6bb75d6 100644 --- a/test/simple/test-stream2-writable.js +++ b/test/simple/test-stream2-writable.js @@ -140,3 +140,101 @@ test('write backpressure', function(t) { } })(); }); + +test('write bufferize', function(t) { + var tw = new TestWriter({ + lowWaterMark: 5, + highWaterMark: 100 + }); + + var encodings = + [ 'hex', + 'utf8', + 'utf-8', + 'ascii', + 'binary', + 'base64', + 'ucs2', + 'ucs-2', + 'utf16le', + 'utf-16le', + undefined ]; + + tw.on('finish', function() { + t.same(tw.buffer, chunks, 'got the expected chunks'); + }); + + chunks.forEach(function(chunk, i) { + var enc = encodings[ i % encodings.length ]; + chunk = new Buffer(chunk); + tw.write(chunk.toString(enc), enc); + }); + t.end(); +}); + +test('write no bufferize', function(t) { + var tw = new TestWriter({ + lowWaterMark: 5, + highWaterMark: 100, + decodeStrings: false + }); + + tw._write = function(chunk, cb) { + assert(Array.isArray(chunk)); + assert(typeof chunk[0] === 'string'); + chunk = new Buffer(chunk[0], chunk[1]); + return TestWriter.prototype._write.call(this, chunk, cb); + }; + + var encodings = + [ 'hex', + 'utf8', + 'utf-8', + 'ascii', + 'binary', + 'base64', + 'ucs2', + 'ucs-2', + 'utf16le', + 'utf-16le', + undefined ]; + + tw.on('finish', function() { + t.same(tw.buffer, chunks, 'got the expected chunks'); + }); + + chunks.forEach(function(chunk, i) { + var enc = encodings[ i % encodings.length ]; + chunk = new Buffer(chunk); + tw.write(chunk.toString(enc), enc); + }); + t.end(); +}); + +test('write callbacks', function (t) { + var callbacks = chunks.map(function(chunk, i) { + return [i, function(er) { + callbacks._called[i] = chunk; + }]; + }).reduce(function(set, x) { + set['callback-' + x[0]] = x[1]; + return set; + }, {}); + callbacks._called = []; + + var tw = new TestWriter({ + lowWaterMark: 5, + highWaterMark: 100 + }); + + tw.on('finish', function() { + t.same(tw.buffer, chunks, 'got chunks in the right order'); + t.same(callbacks._called, chunks, 'called all callbacks'); + t.end(); + }); + + chunks.forEach(function(chunk, i) { + tw.write(chunk, callbacks['callback-' + i]); + }); + tw.end(); +});