diff --git a/lib/fs.js b/lib/fs.js index cf97eb236da02d..f58a55d4ef2e4b 100644 --- a/lib/fs.js +++ b/lib/fs.js @@ -1815,6 +1815,10 @@ 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-read-stream-encoding.js b/test/parallel/test-fs-read-stream-encoding.js new file mode 100644 index 00000000000000..68699136ea6366 --- /dev/null +++ b/test/parallel/test-fs-read-stream-encoding.js @@ -0,0 +1,17 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const fs = require('fs'); +const path = require('path'); +const stream = require('stream'); +const encoding = 'base64'; + +const example = path.join(common.fixturesDir, 'x.txt'); +const assertStream = new stream.Writable({ + write: function(chunk, enc, next) { + const expected = new Buffer('xyz'); + assert(chunk.equals(expected)); + } +}); +assertStream.setDefaultEncoding(encoding); +fs.createReadStream(example, encoding).pipe(assertStream); diff --git a/test/parallel/test-fs-read-stream-throw-type-error.js b/test/parallel/test-fs-read-stream-throw-type-error.js index 0bc7ccc3b2a3e1..9d1465c873ea2e 100644 --- a/test/parallel/test-fs-read-stream-throw-type-error.js +++ b/test/parallel/test-fs-read-stream-throw-type-error.js @@ -1,3 +1,4 @@ +'use strict'; const common = require('../common'); const assert = require('assert'); const fs = require('fs'); diff --git a/test/parallel/test-fs-write-stream-encoding.js b/test/parallel/test-fs-write-stream-encoding.js new file mode 100644 index 00000000000000..3d6dbeb37e94ab --- /dev/null +++ b/test/parallel/test-fs-write-stream-encoding.js @@ -0,0 +1,23 @@ +'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 example = path.join(common.fixturesDir, 'x.txt'); +const dummy = path.join(common.tmpDir, '/x.txt'); +const exampleReadStream = fs.createReadStream(example, firstEncoding); +const dummyWriteStream = fs.createWriteStream(dummy, 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(dummy, secondEncoding).pipe(assertWriteStream); +}); diff --git a/test/parallel/test-fs-write-stream-throw-type-error.js b/test/parallel/test-fs-write-stream-throw-type-error.js index 45500db17e6e57..316a9db5f22879 100644 --- a/test/parallel/test-fs-write-stream-throw-type-error.js +++ b/test/parallel/test-fs-write-stream-throw-type-error.js @@ -1,3 +1,4 @@ +'use strict'; const common = require('../common'); const assert = require('assert'); const fs = require('fs');