fs: set encoding on fs.createWriteStream
authorYosuke Furukawa <yosuke.furukawa@gmail.com>
Sat, 30 May 2015 17:12:07 +0000 (02:12 +0900)
committerYosuke Furukawa <yosuke.furukawa@gmail.com>
Tue, 2 Jun 2015 18:01:35 +0000 (03:01 +0900)
Enable encoding option on fs.createWriteStream.

PR-URL: https://github.com/nodejs/io.js/pull/1844
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
doc/api/fs.markdown
lib/fs.js
test/parallel/test-fs-write-stream-encoding.js [new file with mode: 0644]

index e16f72c..b9eca2f 100644 (file)
@@ -847,7 +847,8 @@ Returns a new WriteStream object (See `Writable Stream`).
 `options` may also include a `start` option to allow writing data at
 some position past the beginning of the file.  Modifying a file rather
 than replacing it may require a `flags` mode of `r+` rather than the
-default mode `w`.
+default mode `w`. The `encoding` can be `'utf8'`, `'ascii'`, `binary`,
+or `'base64'`.
 
 Like `ReadStream` above, if `fd` is specified, `WriteStream` will ignore the
 `path` argument and will use the specified file descriptor. This means that no
index 4cdd0ef..35d84da 100644 (file)
--- a/lib/fs.js
+++ b/lib/fs.js
@@ -1807,6 +1807,9 @@ function WriteStream(path, options) {
     this.pos = this.start;
   }
 
+  if (options.encoding)
+    this.setDefaultEncoding(options.encoding);
+
   if (typeof this.fd !== 'number')
     this.open();
 
diff --git a/test/parallel/test-fs-write-stream-encoding.js b/test/parallel/test-fs-write-stream-encoding.js
new file mode 100644 (file)
index 0000000..ca02d12
--- /dev/null
@@ -0,0 +1,32 @@
+'use strict';
+const common = require('../common');
+const assert = require('assert');
+const fs = require('fs');
+const path = require('path');
+const stream = require('stream');
+const firstEncoding = 'base64';
+const secondEncoding = 'binary';
+
+const examplePath = path.join(common.fixturesDir, 'x.txt');
+const dummyPath = path.join(common.tmpDir, 'x.txt');
+
+const exampleReadStream = fs.createReadStream(examplePath, {
+  encoding: firstEncoding
+});
+
+const dummyWriteStream = fs.createWriteStream(dummyPath, {
+  encoding: firstEncoding
+});
+
+exampleReadStream.pipe(dummyWriteStream).on('finish', function() {
+  const assertWriteStream = new stream.Writable({
+    write: function(chunk, enc, next) {
+      const expected = new Buffer('xyz\n');
+      assert(chunk.equals(expected));
+    }
+  });
+  assertWriteStream.setDefaultEncoding(secondEncoding);
+  fs.createReadStream(dummyPath, {
+    encoding: secondEncoding
+  }).pipe(assertWriteStream);
+});